Flink CDC中oracle cdc 增量同步的性能问题大伙有遇到吗?https://www.infoq.cn/article/pGakNSLI9xUfEj9HtOlT这篇文章里说的优化,群里的大佬有做过类似的优化吗
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用 Flink CDC 进行 Oracle CDC 增量同步时,性能问题确实是一个常见的挑战。根据知识库中的相关资料以及行业实践,以下是一些可能的优化方法和建议,供您参考:
Oracle CDC 使用 LogMiner
技术来解析日志文件,但在大数据量场景下,LogMiner
的读取效率可能会成为性能瓶颈。
优化建议: - 升级到更高版本的 Oracle CDC:例如,Dataphin V3.13 版本后使用的是 Oracle CDC 2.4,相较于之前的版本有性能改进。 - 调整 startScn
和 endScn
参数:通过合理设置这些参数,减少需要加载的日志文件范围,从而提升性能。 - 避免 PDB 上直接执行 LogMiner:如果您的数据库是多租户架构(CDB/PDB),确保在 CDB 数据库中读取 PDB 的补偿日志,并配置 debezium.database.pdb.name
参数。
Flink CDC 的性能优化可以从以下几个方面入手:
在维表 Join 场景中,开启异步模式可以显著提升吞吐性能。通过配置 table.exec.async-lookup.key-ordered-enabled
参数,可以在保证更新流正确性的同时,提升异步 I/O 的吞吐性能。
配置示例:
SET table.exec.async-lookup.key-ordered-enabled=true;
如果全量同步完成后进入增量阶段的时间较长,可能是由于 Checkpoint 间隔设置过大导致的。建议根据业务需求调整合理的 Checkpoint 间隔时间。
配置示例:
execution.checkpointing.interval: 5min
如果多个 CDC 作业同时运行,可能会对数据库造成较大压力。可以通过将数据先同步到 Kafka 消息队列中,再消费 Kafka 数据进行解耦,从而减轻数据库压力。
Oracle CDC 在处理表结构时可能存在一些限制,以下是一些常见问题及优化建议:
Oracle LogMiner 对表名和列名的长度有限制(≤30个字符)。如果表名过长,可能导致同步失败。建议在设计表结构时遵循这一限制。
如果出现 DataException: file不是有效的字段名
错误,可能是因为字段名大小写不一致。确保 Flink 中字段的名字大小写与 Oracle 表完全一致。
为了更好地排查性能问题,可以利用以下监控手段:
通过监控 currentEmitEventTimeLag
指标,判断是否已完成全量数据同步并进入增量阶段。当该指标大于 0 时,表示已进入 Binlog 读取阶段。
在 MySQL CDC 源表所在的 TM 日志中查找 BinlogSplitReader is created
日志,确认是否读取完全量数据。
以上优化方法涵盖了从 Oracle 数据库层面、Flink CDC 配置层面到监控诊断的多个维度。如果您正在尝试优化 Oracle CDC 增量同步性能,建议结合实际业务场景逐步实施上述措施。如果有进一步的具体问题或需要更详细的配置指导,请随时补充说明!