我使用Flink cdc整库同步mysql,之前设置多表同步101个表, 今天新增了1个表,然后重新部署,我还是沿用之前的状态(“有状态启动”),发现在holo这边会新建这个新增的表, 但是数据没写入, 这种state是否合理?还是说每次新增表都要使用“无状态启动”,才能写数据
在Apache Flink中,CDC(Change Data Capture)源是用于捕获数据库变更事件的源。当你使用CDC源同步MySQL数据库时,Flink会创建一个状态,这个状态包含了已经同步过的数据的信息。
当你新增一个表并重新部署任务时,Flink会检测到新的表,并在Holo中新建这个表。但是,由于这个表在之前的任务中没有出现过,所以Flink不会从这个表开始同步数据,而是会从状态中记录的最后一个已知的事件开始同步。这就是为什么你在新表中看不到数据的原因。
如果你想让Flink从新表的开始位置同步数据,你需要清除Flink的状态。这可以通过使用"无状态启动"来实现。"无状态启动"会清空所有的状态,然后从头开始同步数据。
另一种方法是,你可以手动更新Flink的状态,让它知道新表的存在。这通常需要一些额外的配置和管理,可能会比"无状态启动"更复杂。
总的来说,每次新增表是否需要使用"无状态启动"取决于你的具体需求和场景。如果你希望从新表的开始位置同步数据,那么你可能需要使用"无状态启动"。如果你希望从上次同步的位置继续同步数据,那么你不需要使用"无状态启动",但需要确保你的状态管理策略能够正确地处理新表的情况。
参考一下这个文档哦
https://help.aliyun.com/zh/flink/developer-reference/create-database-as-statement?spm=a2c4g.11186623.0.i2 ,此回答整理自钉群“实时计算Flink产品交流群”
在Flink CDC中,有状态启动和无状态启动是两种不同的启动方式。有状态启动会保留之前的状态信息,而无状态启动则会丢弃之前的状态信息。
在你的情况下,由于新增了一个表,并且使用了有状态启动,所以在holo这边会新建这个新增的表。但是数据没有写入,可能是因为新表的数据同步还没有完成。这种情况下,你可以尝试等待一段时间,让数据同步完成。如果长时间没有数据写入,可以考虑使用无状态启动重新部署Flink作业,以确保新表的数据能够正确写入。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。