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

Flink CDC同步的源表必须要有主键吗?

Flink CDC同步的源表必须要有主键吗?Caused by: org.apache.flink.table.api.ValidationException: Incremental snapshot for tables requires primary key, but table sc_test.tag_test doesn't have primary key.
at com.ververica.cdc.connectors.mysql.source.utils.ChunkUtils.getChunkKeyColumn(ChunkUtils.java:55)
at com.ververica.cdc.connectors.mysql.source.assigners.MySqlChunkSplitter.analyzeTable(MySqlChunkSplitter.java:148)

展开
收起
真的很搞笑 2024-01-09 11:22:04 182 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    Flink CDC同步的源表不一定需要有主键。但是,如果源表没有主键,那么在增量快照时可能会出现问题。在这种情况下,你需要为源表添加一个主键,以便Flink CDC可以正确地进行增量同步。

    2024-01-09 15:39:51
    赞同 展开评论 打赏
  • 是的,对于Flink CDC同步源表,如果使用的是基于主键的增量快照策略(Incremental Snapshot),那么源表确实需要具有一个主键。这是因为Flink CDC依赖于主键来跟踪和识别数据库中的数据变更,以便在流处理中实现精确的一次性语义(exactly-once semantics)。

    当你遇到如下的错误信息时:

    Caused by: org.apache.flink.table.api.ValidationException: Incremental snapshot for tables requires primary key, but table sc_test.tag_test doesn't have primary key.
    at com.ververica.cdc.connectors.mysql.source.utils.ChunkUtils.getChunkKeyColumn(ChunkUtils.java:55)
    at com.ververica.cdc.connectors.mysql.source.assigners.MySqlChunkSplitter.analyzeTable(MySqlChunkSplitter.java:148)
    

    这表示Flink CDC MySQL连接器检测到你试图从sc_test.tag_test表中读取CDC数据,但该表没有定义主键。为了成功执行CDC同步任务,请确保目标MySQL表有一个明确的主键,并重新配置并启动Flink作业。如果表设计上无法添加主键,或者由于业务原因不能使用主键进行CDC,则可能需要考虑是否可以更改CDC策略或选择其他支持无主键表的工具进行数据同步。

    2024-01-09 14:19:27
    赞同 展开评论 打赏

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

相关产品

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

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载