Flink CDC里有没有大佬遇到过一个奇怪的问题,oracle cdc增量更新数据的时候,source端有2个并行度在读数,并且两个并行度数据重复是为啥?以前一直都是单并行度读取oracle的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Flink CDC中,Oracle CDC增量更新时出现两个并行度读取数据且数据重复的问题,可能与以下几个原因相关。以下是详细分析和解决方案:
Oracle CDC源表在增量阶段通常依赖于日志(如Redo Log)进行数据捕获。如果启用了增量快照框架(scan.incremental.snapshot.enabled=true
),并且并行度设置为大于1,则可能会导致多个并行任务同时读取相同的数据分片(chunk)。这种情况下,数据重复是由于并行任务之间的分片分配逻辑未正确处理。
scan.incremental.snapshot.enabled=true
。如果不需要增量快照功能,可以将其关闭。chunk key
)的分布均匀。可以通过以下参数优化分片逻辑:
'scan.incremental.snapshot.chunk.key-column' = 'your_key_column'
确保指定的分片键列具有良好的分布性,避免数据倾斜。
在Oracle CDC中,类似于MySQL CDC,每个并行任务需要独立的Server ID来消费日志数据。如果多个并行任务使用了相同的Server ID,可能会导致它们读取到相同的数据变更记录,从而引发数据重复问题。
'server-id' = '1000-1001'
确保Server ID范围的数量不小于并行度。
如果下游算子存在反压,可能导致Source端的并行任务无法及时推进,进而重复读取相同的数据。这种情况通常伴随着sourceIdleTime
指标的异常波动。
currentFetchEventTimeLag
和currentEmitEventTimeLag
指标,判断是否存在数据处理瓶颈。Flink CDC依赖Checkpoint机制实现Exactly Once语义。如果Checkpoint间隔时间过长或失败,可能导致并行任务在Failover后重新读取部分数据,造成重复。
5分钟
:'execution.checkpointing.interval' = '5min'
Oracle Redo Log的消费方式可能与Flink CDC连接器的实现存在兼容性问题。例如,某些版本的Oracle CDC连接器可能未正确处理多线程并发读取场景,导致数据重复。
根据上述分析,建议按照以下步骤排查和解决问题: 1. 检查是否启用了增量快照框架,并调整分片键和并行度配置。 2. 确保每个并行任务分配了独立的Server ID范围。 3. 监控反压和Source端指标,优化下游算子性能。 4. 调整Checkpoint配置,确保Exactly Once语义。 5. 升级Flink CDC连接器版本,验证Oracle日志格式的兼容性。
如果问题仍未解决,建议提供更详细的作业配置和日志信息,以便进一步分析。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。