Flink CDC里oracle当表没有主键的时候,按照两个字段组合定义一个主键,全量的时候一个chunk只输出一条数据,这个怎么回事呀?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用Flink CDC读取Oracle表时,如果表没有主键,并且通过两个字段组合定义了一个逻辑主键,全量阶段可能会出现一个chunk只输出一条数据的情况。这种现象通常与Flink CDC的增量快照算法以及分片(chunk)机制有关。以下是详细的原因分析和解决方法:
分片机制与主键依赖
增量快照算法
scan.incremental.snapshot.chunk.size
参数控制,默认值为8096行。Oracle表特性
调整分片参数
scan.incremental.snapshot.chunk.size
参数来控制每个分片的大小。如果分片过小,可以适当增大该值,以减少分片数量并提高读取效率。
'scan.incremental.snapshot.chunk.size' = '16384'
优化逻辑主键选择
scan.incremental.snapshot.chunk.key-column
参数手动指定一个非空字段作为分片依据。
'scan.incremental.snapshot.chunk.key-column' = 'your_column_name'
升级Flink版本
检查数据分布
启用动态列模式
dynamicColumnSink
),以减少对主键的依赖。但需要注意,动态列模式下不支持主键自增列,且overwriteMode
必须设置为UPDATE
。通过以上方法,您可以有效解决Flink CDC在Oracle表无主键场景下全量读取时一个chunk只输出一条数据的问题。如果问题仍然存在,建议结合具体表结构和数据分布情况进一步分析。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。