实时数仓
分层:
ODS:Kafka topic_db topic_log
采集模块:
第一层Flume:日志数据
Maxwell:业务数据
DIM:HBase(Phoenix)
使用场景:事实表会根据主键获取一行维表数据(1.永久存储、2.根据主键查询)
HBase:海量数据永久存储,根据主键快速查询 √
Redis:用户表数据量大,内存数据库 ×
ClickHouse:并发不行,列存 ×
ES:默认给所有字段创建索引 ×
Hive(HDFS):效率低下 ×
Mysql本身:压力太大,实在要用就使用从库 √
动态配置:决定需要哪些维表
FlinkCDC读取MySQL配置表并转换为广播流
处理主流与广播流关联以后的数据流
处理广播流
获取并解析数据、建表、写入状态
处理主流
读取状态、过滤字段、加入SinkTable字段写出
自定义Sink将数据写出到Phoenix
DWD:Kafka
日志数据:DataStream
未经加工的 5 状态编程新老用户检验、侧输出流分流
日活 状态编程,按天去重数据,TTL
跳出 CEP
业务数据:FlinkSQL
事实表 订单 支付 加购 点赞 评论 收藏 领券 注册
JOIN:
WindowJoin、IntervalJoin
join、left join、right join、full join
LookUp join:维度退化
upsert-kafka sink
DWS:ClickHouse
关键词需求:FlinkSQL、提取事件时间开窗、自定义UDTF函数、IK分词器的使用
用户商品粒度下单:关联维表操作
JDBCUtil -> DimUtil -> 测试发现延迟过高
优化1:旁路缓存
缓存的选择:堆缓存、独立缓存服务
读缓存、写缓存、数据更新时删除缓存
数据更新时:将更新的数据写入Phoenix、删除Redis中的数据
先将更新的数据写入Phoenix、再删除Redis中的数据
先删除Redis中的数据、再将更新的数据写入Phoenix
先删除Redis中的数据、再将更新的数据写入Phoenix、再删除Redis中的数据
数据更新时:先将数据写入Redis、再将数据写入Phoenix
优化2:异步IO
10s聚合
ADS:数据接口