Flink CDC 系列(6)—— Flink CDC MySQL Connector 工作机制之 Incremental Snapshot Reading

Flink CDC 系列文章:
《Flink CDC 系列(1)—— 什么是 Flink CDC》
《Flink CDC 系列(2)—— Flink CDC 源码编译》
《Flink CDC 系列(3)—— Flink CDC MySQL Connector 与 Flink SQL 的结合使用案例Demo》
《Flink CDC 系列(4)—— Flink CDC MySQL Connector 常用参数表》
《Flink CDC 系列(5)—— Flink CDC MySQL Connector 启动模式》
《Flink CDC 系列(6)—— Flink CDC MySQL Connector 工作机制之 Incremental Snapshot Reading》
《Flink CDC 系列(7)—— 从 MySQL 到 ElasticSearch》

什么是Incremental Snapshot Reading

Incremental snapshot reading 是读取表块照数据的新机制。和旧的快照机制相比,有以下优点:

  1. MySQL CDC Source 支持并行读取快照数据
  2. MySQL CDC Source 在快照读取阶段,支持数据块级别的 checkpoint
  3. MySQL CDC Source 不需要获取全局的读锁(FLUSH TABLES WITH READ LOCK)

如果想要并行地读取快照数据,需要给每一个 reader 指定一个唯一的 server id,‘server-id’可以指定一段数值范围,如’5400-6400’。

Incremental Snapshot Reading 如何工作

Flink MySQL CDC source 启动之后,Incremental Snapshot Reading 会分为两个阶段来读取数据。首先是快照阶段,并行地读取表的快照。快照阶段完成后是 binlog 阶段,以单个并行度的方式读取表的 binlog 数据。

快照阶段,快照数据按照表的主键和行数被切分为多个数据块,被分配给多个快照 reader 处理。每个快照 reader 根据块读取算法处理分配给它的数据块并把读取到的数据发送给下游。Flink MySQL CDC source 负责管理数据块的处理状态(完成与否),因此,在快照阶段可以支持数据块级别的 checkpoint。如果有故障发生,Flink MySQL CDC source 可以从 checkpoint 恢复并从上一个完成的数据块开始继续工作。

所有的快照数据块完成之后,快照阶段结束,Flink MySQL CDC source 会进入 binlog 读取阶段,在这个阶段,仅启动一个 task,即一个并行度。为了保证快照数据和 binlog 数据的顺序,binlog reader 直到快照数据块完成 checkpoint 才启动,以保证所有快照数据都已经被下游获取了。binlog reader 把 binlog 的位置记录在 Flink 状态中,因此,在 binlog 阶段可以支持行级别的 checkpoint。

Flink 周期性的对 Flink MySQL CDC source 执行 checkpoint,在出现故障时,作业可以从最后一次成功提交的 checkpoint 恢复,保证了精准一致。

补充:当表没有主键时,Incremental snapshot reading 会失败,这时需要修改配置,把 scan.incremental.snapshot.enabled 设置为 false,使用旧的快照读取机制。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

修破立生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值