1 为什么选择kafka?
① 实时写入,实时读取
② 消息队列适合,其他数据库受不了
2 ods层
1)存储原始数据
埋点的行为数据 (topic :ods_base_log)
业务数据 (topic :ods_base_db)
2)业务数据的有序性: maxwell配置,指定生产者分区的key为 table
3 dwd+dim层
① 事实表存Kafka
② 维度表存Hbase,基于热存储加载维表的join方案:
随机查
长远考虑
适合实时读写
DIM:事实数据根据维度ID查询相应的维度数据
HBase:√
Redis:用户表数据量大,内存使用量太大
HDFS(Hive):太慢,效率低
Mysql:维表数据属于业务库,实时计算查询MySQL会给业务库增加压力--从库 √
ClickHouse:QPS高、列存
3.1 动态分流
将事实表写入kafka的dwd层,将维度表写入hbase。为了避免因表的变化而重启Flink任务,在mysql存一张表来动态配置。
DIM层编程:
1.消费Kafka topic_db主题数据(包含所有的业务表数据)
2.过滤维表数据(根据表名做过滤)
3.将数据写入Phoenix(每张维表对应一张Phoenix表)

本文详细介绍了实时数据仓库的构建过程,包括选择kafka作为消息队列,ods层存储原始数据,dwd+dim层利用HBase存储维度表,dwm层处理join操作,dws层使用ClickHouse进行轻度聚合,ads层提供数据接口。文章还讨论了如何保证缓存一致性,如使用异步IO优化维度表查询,并通过Phoenix操作HBase,以及在ClickHouse中实现一致性查询。最后提到了监控方案,使用Prometheus + Grafana。
最低0.47元/天 解锁文章
647

被折叠的 条评论
为什么被折叠?



