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表)