几种模式
在 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 模式。
links:
https://nightlies.apache.org/flink/flink-cdc-docs-release-3.0/docs/connectors/pipeline-connectors/mysql/
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |