Flink CDC在strem api里面在哪里设置?

Flink CDC中scan.incremental.snapshot.chunk.key-column在strem api里面在哪里设置?

展开
收起
真的很搞笑 2023-09-20 12:16:08 102 分享 版权
阿里云 AI 助理回答

在Flink CDC中,scan.incremental.snapshot.chunk.key-column 参数用于指定某一列作为快照阶段切分分片的切分列。该参数在DataStream API中的设置方式如下:

设置方式

在使用DataStream API构建MySQL CDC Source时,scan.incremental.snapshot.chunk.key-column 参数可以通过 MySqlSourcestartupOptionsdeserializer 配置项进行设置。具体配置方法如下:

  1. 通过 MySqlSource.Builder 配置
    在创建 MySqlSource 时,可以通过 MySqlSource.Builderdeserializer 方法传递 Debezium 配置,进而设置 scan.incremental.snapshot.chunk.key-column 参数。

    示例代码如下:

    MySqlSource<String> mySqlSource = MySqlSource.<String>builder()
       .hostname("your-mysql-hostname")
       .port(3306)
       .databaseList("your-database-name")
       .tableList("your-database-name.your-table-name")
       .username("your-username")
       .password("your-password")
       .deserializer(new JsonDebeziumDeserializationSchema()) // 使用自定义反序列化器
       .debeziumProperties(new Properties() {{
           setProperty("scan.incremental.snapshot.chunk.key-column", "your-key-column");
       }})
       .build();
    
  2. 通过 Debezium 配置传递
    如果使用 Debezium 的 JSON 格式或其他格式,可以在 Debezium 的配置中直接添加 scan.incremental.snapshot.chunk.key-column 参数。例如:

    Properties debeziumProps = new Properties();
    debeziumProps.setProperty("scan.incremental.snapshot.chunk.key-column", "your-key-column");
    

    然后将这些配置传递给 MySqlSourcedebeziumProperties 方法。

  3. 注意事项

    • 无主键表必填:如果读取的是无主键表,则必须设置 scan.incremental.snapshot.chunk.key-column,并且选择的列必须是非空类型(NOT NULL)。
    • 有主键表选填:对于有主键的表,该参数为选填项,仅支持从主键中选择一列。
    • 并发读取:启用增量快照功能(scan.incremental.snapshot.enabled=true)时,scan.incremental.snapshot.chunk.key-column 的设置会影响并发读取的分片逻辑。

参数作用

  • 分片逻辑scan.incremental.snapshot.chunk.key-column 指定的列会作为快照阶段切分分片的依据,影响数据读取的并行度和内存占用。
  • Exactly Once 语义:如果指定的列不存在更新操作,可以保证 Exactly Once 语义;如果指定的列发生更新操作,则只能保证 At Least Once 语义。

参考资料

MySQL CDC源表相关配置说明
分片参数优化与内存空间管理

以上是关于 scan.incremental.snapshot.chunk.key-column 在 Flink CDC DataStream API 中的设置方法及注意事项,请根据实际场景进行配置。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

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

还有其他疑问?
咨询AI助理