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

Flink CDC有没有办法或者配置让CDC作业不去同步这种无主键的表?

Flink CDC有没有办法或者配置让CDC作业不去同步这种无主键的表?

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

    在 Flink CDC 中,你可以通过扫描增量快照时忽略无主键表来避免同步此类表。
    具体操作如下:

    tableEnv.executeSql(
        "CREATE TABLE my_table (" +
            "id INT," +
            "name STRING," +
            "amount DECIMAL(10,2)," +
            "proctime AS PROCTIME()," +
            "PRIMARY KEY (id) NOT ENFORCED" +
        ") WITH (" +
            "'connector' = 'jdbc'," +
            "'url' = 'jdbc:mysql://localhost:3306/mydatabase'," +
            "'username' = 'myusername'," +
            "'password' = 'mypassword'," +
            "'scan.incremental.snapshot.enabled'='true'," +
            "'scan.incremental.snapshot.mode'='rowid'," +
            "'scan.incremental.snapshot.delay'='1s'" +
        ")"
    );
    

    在这个例子中,scan.incremental.snapshot.enabled 参数被设置为 true,这意味着 Flink CDC 将使用增量快照模式。而 scan.incremental.snapshot.mode 参数则被设置为 rowid,这表示 Flink CDC 将使用基于行 ID 的增量快照模式。
    当使用这种方式时,Flink CDC 将忽略那些没有主键或者唯一约束的表,因此不会去同步它们。
    请注意,这种方法可能并不适用于所有的场景,因为有些表可能确实需要被同步,即使它们没有主键。在这种情况下,你需要自己决定哪些表需要被同步,然后将这些表添加到 Flink CDC 的任务中。

    2023-11-29 14:00:22
    赞同 展开评论 打赏
  • 在Flink CDC中,确实存在一种配置可以使得CDC作业不去同步无主键的表。具体来说,您可以使用scan.incremental.snapshot.chunk.key-column参数进行配置。这个参数允许您指定一个或多个列作为块键列,用于划分表的快照。

    此外,对于某些无主键的表,比如Oracle的表,Flink CDC能够通过监听redo log(相当于binlog)来获取数据变更内容。Oracle的redo log记录了所有DML操作,包括对无主键表的变更,因此Flink CDC在这种情况下并不需要依赖表的主键。同样,MySQL CDC连接器在2.4版本也支持读取无主键表,同时支持新增表时原有实时同步链路不断流。

    Flink CDC提供了一些灵活的配置选项和策略,使得它能够适应各种不同的数据源和业务场景。

    2023-11-25 09:17:11
    赞同 展开评论 打赏

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

相关产品

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

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