Flink实时数仓
为什么分层?
复杂的问题简单化
避免重复计算
参考大厂做法
ods层
- 采集到ods链路:
用户行为数据(前端埋点):前端埋点=》Nginx=》日志服务器(springboot--落盘成log)=》flume==》kafka:topic_log
业务数据(MySQL):mysql-》cdc工具:flinkCDC-》kafka - 为什么使用flinkCDC?有没有对比过其他cdc工具?
dataX,Maxwell,canal,flinkcdc。dataX是基于查询的,其他三个是监听binlog变化的。实时增量采集需要监听binlog。
支持断点续传:会将元数据持久化到数据库,记录binlog读取的位置。
可以同步历史数据
对flink支持比较友好
格式更简单,轻量,方便解析。
dwd层
事实表:实时场景,只需要事务型事实表。
事务型:选择业务过程,声明粒度,确认维度,确定事实。
周期型
累积型
维度表:基于星型模型,要构造一级维度(维度整合)。
实时场景如果没有做维度整合:任一张维度表发生更新,都要修改join完的历史结果,不好处理。