请教各位,如果CDC JOB停止了一段时间后,再重新启动,那么两次JOB之间的数据,会按照数据库的操作行为形成Insert/Update Before / Updata After / DELETE的rowkind吗?还是在第二次JOB启动的时候,只会以全量数据同步的方式,全部以Insert向后续算子输出?谢谢
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在CDC JOB停止一段时间后重新启动的情况下,作业的行为取决于所使用的具体技术(如Flink CDC)以及作业的配置方式。通常,Flink CDC支持从上次停止的位置继续读取Binlog,这意味着它能够捕获到两次JOB执行期间数据库中的所有变更操作,包括Insert、Update Before(如果支持并配置)、Update After及DELETE操作。
对于MySQL CDC:如果作业配置为在重启时从最新状态恢复(即利用checkpoint或savepoint),那么它会继续从上次停止的Binlog位置读取,因此能够识别出所有的变更事件,并以相应的RowKind(例如+I, -U, +U, -D)输出到后续算子。这确保了数据的连续性和一致性,不会简单地以全量插入的方式处理。
对于MongoDB CDC:在MongoDB 6.0及以上版本且开启了前像功能时,通过配置'scan.full-changelog' = 'true'
,可以在SQL作业中输出-U(更新前镜像值)消息,实现更细粒度的变更记录处理。而在较低版本或特定配置下,可能需要额外逻辑来管理状态以获取更新前的镜像值,但基本原理仍然是基于增量日志进行连续处理,而非全量同步。
综上所述,只要作业被正确配置为断点续传模式,并且数据库的Binlog或类似变更日志没有因为过期而被清理,两次JOB之间的数据变更应当会被识别并以相应的RowKind形式输出,而不是仅以全量插入的方式处理。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。