Flink CDC 技术对比与分析

1.1. 变更数据捕获(CDC)技术

null

广义概念上,能够捕获数据变更的技术统称为 CDC(Change Data Capture)。通常我们说的 CDC 主要面向数据库的变更,是一种用于捕获数据库中数据变化的技术。

CDC 的主要应用有三个方面:

  • 数据同步,通过 CDC 将数据同步到其他存储位置来进行异地灾备或备份。

  • 数据分发,通过 CDC 将数据从一个数据源抽取出来后分发给下游各个业务方做数据处理和变换。

  • 数据采集,使用 CDC 将源端数据库中的数据读取出来后,经过 ETL 写入数据仓库或数据湖。

null

按照实现机制,CDC 可以分为两种类型:基于查询和基于日志的 CDC。基于查询的 CDC 通过定时调度离线任务的方式实现,一般为批处理模式,无法保证数据的实时性,数据一致性也会受到影响。基于日志的 CDC 通过实时消费数据库里的日志变化实现,如通过连接器直接读取 MySQL 的 binlog 捕获变更。这种流处理模式可以做到低延迟,因此更好地保障了数据的实时性和一致性。

null

在上图中,我们比较了几种常见的 CDC 方案。相比于其他方案,Flink CDC 在功能上集成了许多优势:

  • 在实现机制方面,Flink CDC 通过直接读取数据库日志捕获数据变更,保障了数据实时性和一致性。

  • 在同步能力方面,Flink CDC 支持全量和增量两种读取模式,并且可以做到无缝切换。

  • 在数据连续性方面,Flink CDC 充分利用了 Apache Flink 的 checkpoint 机制,提供了断点续传功能,当作业出现故障重启后可以从中断的位置直接启动恢复。

  • 在架构方面,Flink CDC 的分布式设计使得用户可以启动多个并发来消费源库中的数据。

  • 在数据变换方面,Flink CDC 将从数据库中读取出来后,可以通过 DataStream、SQL 等进行各种复杂计算和数据处理。

  • 在生态方面,Flink CDC 依托于强大的 Flink 生态和众多的 connector 种类,可以将实时数据对接至多种外部系统。

null

自 2.0 版本起,Flink CDC 引入了增量快照框架,实现了数据库全量和增量数据的一体化读取,并可以在全量和增量读取之间进行无缝切换。在读取全量数据时,Flink CDC source 会首先将数据表中的已有数据根据主键分布切分成多个 chunk(如上图中的绿色方块所示),并将 chunk 分发给多个 reader 进行并发读取。

null

对于数据变化频繁、已有数据较多的数据库,在全量同步过程中已同步的数据可能会发生变化。一些数据集成工具的解决方案是在读取前获取表锁阻止数据变更,再进行全量数据读取,然而这种方案会对在线业务造成较大影响。为解决该问题,Flink CDC 的增量快照框架引入了水位线(watermark)的概念:在启动全量同步前,首先获取数据库当前最新的 binlog 位点,记为低水位线(low watermark),如上图中的蓝色方块所示,随后启动全量读取。

null

在所有全量数据读取完成后,CDC source 会再次获取最新的 binlog 位点,并记为高水位线(high watermark),如上图中第二个蓝色方块所示。位于高低水位线之间、与被捕获表相关的 binlog 事件(上图中的黄色方块)即为全量数据在读取阶段发生的数据变化,CDC source 会将这部分增量数据合并至现有快照,合并完成后即可获得与源数据库完全一致的实时快照,并且在此过程中无需对数据库进行加锁,不会影响线上业务的正常运行。

null

业界常用的另一个 CDC 工具是 Debezium。与 Flink CDC 相比,Debezium 方案需要在全量读取前为数据库加锁,且只能使用单并发读取。如果在同步过程中任务发生失败,需要从全量数据重新读取才能够保证一致性。Flink CDC 的增量快照框架方案在全量读取前无需加锁,并且可以使用多并发读取。依托于 Flink checkpoint 机制,如果在同步过程中作业发生异常,可快速从最近一次成功的 checkpoint 恢复读取。

Flink CDC 社区从 2020 年 7 月份创立至今受到了各位开发者的广泛关注,整个社区蓬勃发展。截至 2023 年 1 月,项目 star 数量超过 3000 个,超过 70 位贡献者提交了超过 500 个 commit,项目 fork 数量超过 1200 次。在此也特别感谢每一位参与 Flink CDC 的开发者为社区蓬勃发展做出的卓越贡献!

2022 年 11 月,Flink CDC 社区发布了最新的 2.3 版本,对 MySQL CDC 进行了诸多稳定性和稳定性改进,新增了 Db2 CDC 连接器,MongoDB CDC 连接器接入了增量快照框架。详情可阅读 Flink CDC 2.3 发布公告: Flink CDC 2.3 发布,持续优化性能,更多连接器支持增量快照,新增 Db2 支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值