Flink CDC有没有办法或者配置让CDC作业不去同步这种无主键的表?
在 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 的任务中。
在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提供了一些灵活的配置选项和策略,使得它能够适应各种不同的数据源和业务场景。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。