Flink CDC中mysql cdc设置scan.startup.mode = initial时,是写完snapshot后再读最新binlog吗?这里最新是啥意思,启动时候开始的binlog,还是snapshot读完后的开始的binlog?
在 Flink CDC 的 MySQL CDC 连接器中,当设置 scan.startup.mode = initial
时,它会在写完快照(snapshot)后读取最新的 binlog。这里的 "最新" 指的是在写完快照后开始产生的 binlog。
具体流程如下:
首先,Flink CDC 连接器会执行一个初始的全量快照操作,读取指定时间点之前的数据,并将其作为初始状态进行处理。
在完成快照后,连接器会启动 binlog 解析器,并从上一次同步的位置开始读取 binlog。这个位置是快照开始之前的 binlog 文件的位置。
连接器会持续解析和处理新生成的 binlog。它会读取到写完快照时的位置之后的 binlog 内容,并根据 binlog 中的变更操作来更新流数据。
因此,"最新" 在这种情况下指的是在写完快照后生成的 binlog,而不是整个数据库的 binlog 历史记录。
需要注意的是,在 scan.startup.mode = initial
下,连接器会较长时间地阻塞,直到完成全量快照的读取过程。这可能对任务的启动时间和性能产生一定影响,尤其是对于大型数据库或包含大量数据的表格。
在Flink CDC中,如果将MySQL CDC Connector的scan.startup.mode参数设置为initial,则会在启动时从MySQL数据库中读取快照数据,并在读取完成后从最新的binlog位置开始读取数据。这里的最新binlog位置是指从MySQL数据库中读取快照数据后,MySQL CDC Connector在读取binlog数据时所使用的起始位置。
具体来说,当MySQL CDC Connector的scan.startup.mode参数设置为initial时,Flink CDC会执行以下操作:
从MySQL数据库中读取快照数据,包括指定表的所有数据。
在读取快照数据完成后,MySQL CDC Connector会记录下当前的binlog位置。
在之后的数据读取过程中,MySQL CDC Connector会从记录的binlog位置开始读取binlog数据,并将其转换为数据流。
因此,在使用scan.startup.mode = initial时,MySQL CDC Connector会先读取快照数据,然后从最新的binlog位置开始读取数据,即在读取快照数据完成后,MySQL CDC Connector会记录下当前的binlog位置作为
所有快照块完成后,Source 将继续在单个任务中读取 binlog。 为了保证快照记录和 binlog 记录的全局数据顺序,binlog reader 将开始读取数据直到快照块完成后并有一个完整的 checkpoint,以确保所有快照数据已被下游消费。 binlog reader 在状态中跟踪所使用的 binlog 位置,因此 binlog 阶段的 Source 可以支持行级别的 checkpoint。这个checkpoint内有MySqlBinlogSplit和MySqlSnapshotSplit 都有。
此回答整理至钉群“Flink CDC 社区”。"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。