开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

我使用Flink cdc整库同步mysql,之前设置多表同步101个表, 这种state是否合理?

我使用Flink cdc整库同步mysql,之前设置多表同步101个表, 今天新增了1个表,然后重新部署,我还是沿用之前的状态(“有状态启动”),发现在holo这边会新建这个新增的表, 但是数据没写入, 这种state是否合理?还是说每次新增表都要使用“无状态启动”,才能写数据 20f28500c41da09958d280ee24c33878.png

展开
收起
真的很搞笑 2024-01-04 14:37:33 69 0
3 条回答
写回答
取消 提交回答
  • 在Apache Flink中,CDC(Change Data Capture)源是用于捕获数据库变更事件的源。当你使用CDC源同步MySQL数据库时,Flink会创建一个状态,这个状态包含了已经同步过的数据的信息。

    当你新增一个表并重新部署任务时,Flink会检测到新的表,并在Holo中新建这个表。但是,由于这个表在之前的任务中没有出现过,所以Flink不会从这个表开始同步数据,而是会从状态中记录的最后一个已知的事件开始同步。这就是为什么你在新表中看不到数据的原因。

    如果你想让Flink从新表的开始位置同步数据,你需要清除Flink的状态。这可以通过使用"无状态启动"来实现。"无状态启动"会清空所有的状态,然后从头开始同步数据。

    另一种方法是,你可以手动更新Flink的状态,让它知道新表的存在。这通常需要一些额外的配置和管理,可能会比"无状态启动"更复杂。

    总的来说,每次新增表是否需要使用"无状态启动"取决于你的具体需求和场景。如果你希望从新表的开始位置同步数据,那么你可能需要使用"无状态启动"。如果你希望从上次同步的位置继续同步数据,那么你不需要使用"无状态启动",但需要确保你的状态管理策略能够正确地处理新表的情况。

    2024-01-05 14:42:49
    赞同 展开评论 打赏
  • 参考一下这个文档哦dae2c3913217b769805f7ff9ceaa2f4a.png
    https://help.aliyun.com/zh/flink/developer-reference/create-database-as-statement?spm=a2c4g.11186623.0.i2 ,此回答整理自钉群“实时计算Flink产品交流群”

    2024-01-04 17:24:15
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在Flink CDC中,有状态启动和无状态启动是两种不同的启动方式。有状态启动会保留之前的状态信息,而无状态启动则会丢弃之前的状态信息。

    在你的情况下,由于新增了一个表,并且使用了有状态启动,所以在holo这边会新建这个新增的表。但是数据没有写入,可能是因为新表的数据同步还没有完成。这种情况下,你可以尝试等待一段时间,让数据同步完成。如果长时间没有数据写入,可以考虑使用无状态启动重新部署Flink作业,以确保新表的数据能够正确写入。

    2024-01-04 15:50:01
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    搭建电商项目架构连接MySQL 立即下载
    搭建4层电商项目架构,实战连接MySQL 立即下载
    PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

    相关镜像