基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

Flink-CDC 数据读取原理

知识点图片

本文讲解Flink-CDC的数据读取流程:全量阶段通过“快照+Binlog修正”并行读取数据保证一致性,随后无缝切换到增量Binlog流。

Flink-CDC的数据读取流程:

1. 切片的划分

全量阶段数据读取为分布式读取,会先对当前表数据按主键划分多个chunk,后续子任务读取chunk区间内的数据,根据主键列是否为数值类型对表划分为均匀分布的chunk及非均匀分布的chunk

  • 1.1. 均匀分布:
    主键列类型为数值类型,查询出主键列的最小值,最大值,按chunkSize大小将数据均匀划分
  • 1.2. 非均匀分布:
    主键列为非数值类型,每次划分需要对未划分的数据按主键进行升序排序,取出chunkSize条数据的最大值为当前chunk的结束位置

2. 全量切片数据读取

Flink-cdc将表数据划分为多个chunk后,子任务在不加锁的情况下,并行读取chunk数据,因为全程无锁在数据分片读取过程中,可能有其他事务对切片范围的数据进行修改,此时无法保证数据一致性
因此,在全量阶段flink使用快照记录读取+Binlog数据修正的方式保证数据的一致性

  • 2.1. 快照读取:通过JDBC执行sql查询切片范围的数据记录
  • 2.2. 数据修正:在快照读取操作前、后执行show master status查询binlog文件的当前偏移量,在快照读取完毕后,查询区间内的binlog数据并对读取的快照记录进行修正
    切片数据处理完后会向下游发送已完成切片数据的起始位置,binlog的最大偏移量,用于增量读取binlog数据

3. 增量切切片数据读取

全量阶段切片数据读取完成后,flink-cdc增量读取binlog的起始位置为所以切片的最小的binlog偏移量,只有满足(捕获的binlog数据的偏移量>数据所属分片的binlog的最大偏移量)才会下数据

00:00
00:00