先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。





既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)

正文
| 3 | tom | 333 | 男 | 2023-06-01 13:00:00 | 2023-06-01 13:00:00 |
看到这里,有些同学可能会疑惑为何不采用离线数仓中的快照表,而要选择使用 Flink 实时同步的方式。确实,从需求层面看,离线数仓的快照表似乎是一种合理的选择。然而,我们需要注意离线数仓通常采用凌晨 T+1 执行 SQL 的方式将业务数据筛选后同步至下游,这种操作适用于对业务数据精确度要求不高的场景。
对于对数据精确度要求较高的需求,采用 T+1 的同步方式可能会导致数据不一致的问题。详细的问题分析和解决方案可以参考我另一篇文章:深入数仓离线数据同步:问题分析与优化措施。
那么对于对数据精确度要求较高的场景,我们可以选择实时同步的方式来实现。这是因为实时同步通过读取 binlog 日志,能够获取业务数据的完整变更历史。与离线数仓中的 T+1 执行 SQL 不同,实时同步能够更及时地捕获和应用数据变更,确保数据的高一致性和精确度。
二、技术选型
在实时同步领域,要实现背景中的需求通常有两种常见的解决方式:
- 实时同步 + 拉链表:
- 拉链表完整记录了整个 binlog 的数据流向,并通过
start_date和end_date字段进行天粒度筛选。 - 可以采用此方式,实现细节可以参考笔者另一篇文章:Flink实时数仓同步:拉链表实战详解。
- 拉链表完整记录了整个 binlog 的数据流向,并通过
- 实时同步 + 快照表:
- 本文主要内容。
- 快照表适用于对数据的历史状态感兴趣,通过实时同步捕获变更事件,并将精确数据写入快照表。
本文主要介绍第二种实现方式:实时同步 + 快照表。
三、技术架构
鉴于业务数据通常存储在关系型数据库中,这里选择采用Flink-CDC持续读取binlog日志进行实时同步。为了保证实时数据能够高效写入下游并支持用户OLAP查询分析,这里选择了企业中常见的MMP库Doris作为实时数仓的存储层。整体架构如下图所示:

基于上图的设计,引入了一张额外的流水表到 Doris 中。这个设计的目的是为了实现业务的解耦,建立一张专门存储业务数据表的历史变更记录的流水表。这种结构不仅有助于满足当前需求,而且在后续可能出现的其他需求中也更加灵活可扩展。
在实际实现中,可以通过一个 Flink 程序来构建这两张表:流水表和快照表。这种设计模式使得系统更为模块化,同时也方便了后期其他需求的使用。
因此建议读者先阅读笔者另一篇文章:Flink实时数仓同步:流水表实战详解;再回到本文。这样能够更好地理解整个系统设计的背景和实际应用。
四、数据流转过程
Flink实时同步程序负责处理捕获到的MySQL数据变更事件。在处理流程中,首先将全量数据存储到快照表,然后针对新增(INSERT)、修改(UPDATE)、删除(DELETE)等操作,将其同步至流水表。当符合以下任意一个条件便会触发合并任务:
- 当binlog数据中的日期为第二天。
- 凌晨过了5分钟 [自定义阈值]。
一旦触发合并任务,程序将执行JOIN操作,将流水表前一天数据与快照表中前两天的数据进行整合,最终得到前一天的全量数据,并将其写入至快照表的前一天分区中。这种设计模式既保证了数据的完整性和准确性,又有效地将全量数据存储于快照表中,数据流转过程如下图所示:

本文介绍了Flink实时数仓同步中快照表的实战应用,强调了实时同步在数据精确度要求较高场景的重要性。文章详细阐述了技术选型、技术架构,以及数据流转过程,重点解析了实时同步+快照表的实现,包括全量同步、增量同步和合并阶段的逻辑。推荐对大数据和Flink感兴趣的读者阅读。
最低0.47元/天 解锁文章
1709

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



