《Apache Flink 案例集(2022版)》——3.机器学习——Bilibili-Flink 在 B 站的多元化探索与实践(1) https://developer.aliyun.com/article/1228231
2.增量化
B站的增量化方案由Flink+Hudi构成,架构如上图所示。Flink计算引擎的 checkpoint 是一个天然的增量化机制,实时任务进行一次 checkpoint,产出一批增量数据进行增量化处理。数仓来源主要有日志数据和 binlog 数据,日志数据以append方式写入 HDFS 存储即可做到增量化的生产,但binlog 数据是 update 模式,使用HDFS 无法很好的支持,因此B站引入了 Hudi 存储,它能够支持 update 操作,并且具备一定的数据布局能力,同时它也可以做 Append 存储,并且能够解决 HDFS 的一些小文件问题。
增量化场景的落地上,考虑到复杂性选取了业务逻辑相对简单、没有复杂聚合逻辑的 ODS 和 DWD 层进行落地。
数据由 Flink 直接写到 Hive 的 ODS 层,我们对此进行了针对性的适配,支持了 Hive 表的增量化读取,开发了 HDFSStreamingSource,同时为了避免对 HDFS 路径频繁扫描的压力,ODS 层写入时会进行索引创建,记录写入的文件路径和时间,只需要追踪索引文件即可;
Source侧也采取分层架构,有文件分发层和读取层。文件分发层进行协调,分配读取文件数,防止读取层某个文件读取过慢堆积过多文件,中间的转换能够支持 FlinkSQL 操作,具备完整的实时数仓的能力;
Sink侧引入了 Hudi connector,支持数据 Append 写入 Hudi。B站还对 Hudi 的 compaction 机制进行了一些扩展,主要有三个:DQC 检测、数据布局的优化以及映射到 Hive 表的分区目录。
除了日志数据,B站对CDC也采用相同的方案,使得ODS到DWD的数据时效性有了明显提升。从数据生产到 DWD 可见提高到了分钟级别,DWD层的生产完成时间也从传统的 2-5点提前到了凌晨 1 点之前。此外,采用 Hudi 存储也为日后的湖仓一体打下了以一个好的基础。
《Apache Flink 案例集(2022版)》——3.机器学习——Bilibili-Flink 在 B 站的多元化探索与实践(3) https://developer.aliyun.com/article/1228224