几种模式
在 Flink CDC 中,
scan.startup.mode
参数用于指定启动时从哪个位置开始读取数据。这个参数有以下几种可选模式:
initial
:这是默认的启动模式。当你首次启动 CDC 任务时,它会从最早的可用 binlog 位置开始读取数据,并执行一个初始快照,然后继续读取最新的 binlog。latest-offset
:如果你希望 CDC 在每次启动时从最新的 binlog 位置开始读取数据,可以使用此模式。CDC 会忽略之前的 checkpoint,从当前 binlog 文件的最后一个位置开始读取。earliest-offset
:使用此模式可以指定从最早的 binlog 位置开始读取数据,跳过快照阶段。specific-offset
:使用此模式可以指定具体的 binlog 位置来进行启动。你需要提供scan.startup.specific-offsets
参数,并指定对应的 binlog 文件名和偏移量。CDC 将从指定的位置开始读取数据。timestamp
:从指定的时间戳开始读取数据。启动时,Flink CDC 会从 MySQL 的 binlog 中获取与指定时间戳匹配的日志位置,然后从这个位置开始读取数据。
当你启动一个 Flink CDC 任务时,如果之前已经执行过一段时间并结束了,再重新启动该任务时,默认情况下,CDC 会根据
scan.startup.mode
的配置来确定从哪个位置开始读取数据。如果你希望 CDC 在重新启动时从之前的 checkpoint 位置开始读取数据,可以使用 Flink 的状态后端来保存和恢复 CDC 任务的状态。这样,CDC 可以根据最新的 checkpoint 来确定从哪个位置开始读取数据,并保持数据的一致性。
earliest-offset和initial模式有什么区别
在 Flink CDC 的 MySQL 连接器中,
earliest-offset
和
initial
两种启动模式都涉及到从 Binlog 的起始位置开始读取数据,但它们之间存在一些差异:
- earliest-offset:- 此模式指定从最早的 Binlog 记录开始读取数据。- 不会执行任何形式的一致性快照读取(snapshot read),直接从最早的 Binlog 开始读取。- 这意味着如果数据表在 Flink CDC 任务启动之前发生了变化,那么在任务启动时这些变化不会被读取到,因为任务是从最早的 Binlog 开始读取,而不是从当前数据库的状态开始读取。- 适用于需要重新处理所有历史数据的场景,或者当你知道数据库中没有需要从中间点开始同步的数据时。
- initial(默认模式):- 此模式是 Flink CDC 的默认启动模式。- 它首先执行一个一致性快照读取,记录下当前数据库的所有数据,然后再从最早的 Binlog 记录开始读取增量变更。- 这样可以确保在 Flink CDC 任务启动时,数据库中的所有现有数据都被读取和同步,然后才开始处理新的变更。- 适用于需要从数据库的当前状态开始同步数据的场景,确保数据的完整性和一致性。
总结来说,
earliest-offset
模式直接从最早的 Binlog 开始读取,跳过快照读取阶段,而
initial
模式会先进行一次快照读取以获取当前数据库的状态,然后再从最早的 Binlog 开始读取增量变更。选择哪种模式取决于你的数据同步需求和数据一致性要求。如果你需要确保数据的完整性,通常推荐使用
initial
模式。如果你需要从最早的数据开始重新处理,并且不介意跳过一些历史数据,可以使用
earliest-offset
模式。
版权归原作者 学亮编程手记 所有, 如有侵权,请联系我们删除。