🗒️FlinkCDC|全量阶段分片读取源码
2023-6-5
| 2023-10-12
字数 1250阅读时长 4 分钟
type
status
date
slug
summary
tags
category
icon
password

MySqlSnapshotSplitReadTask

每个分片的处理逻辑

水位线

水位线就是binlog的偏移量,通过SHOW MASTER STATUS语句获取
signalEventDispatcher处理高低水位线的基本逻辑就是将其放入到一个队列中。

数据

chunk的数据通过select查询获取。
数据写入到Object[] row中,通过dispatcher.dispatchSnapshotEvent派发。
构建查询语句的代码如下,主要是SQL拼接。

SnapshotSplitReader

读取分片数据,数据格式
[low watermark event][snapshot events][high watermark event][binlog events][binlog-end event]
经过规整处理后,得到数据格式
[low watermark event][normalized events][high watermark event]
upsertBinlog方法里使用binlog读取的数据对snapshotRecords进行规范化处理。
这里基于主键数据操作幂等的原理:
notion image
  1. 在读取完LowWaterMark到HighWaterMark之间的任意时间点都可能是select操作开始的时间;
  1. 但是读取的binlog日志内容都是完整一致的;
  1. 对各个可能进行select的时间点用完整的binlog进行修正,得到的结果都是相同的。因为具有某条主键的数据只能存在一条;
  1. 这样就得到高水位的一致性分片数据了。
可以自己手动模拟这几个time的场景验证一下
 
  • FlinkCDC
  • FlinkCDC|新增表FlinkCDC|FAQ整理
    Loading...