Flink CDC中oracle cdc过几个小时就报这异常?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用Flink CDC集成Oracle CDC时,如果作业运行几个小时后出现异常,可能的原因和解决方案如下:
问题描述:
如果您在多租户容器数据库(CDB)中使用Oracle CDC,并且目标表位于可插拔数据库(PDB)中,可能会遇到Oracle LogMiner不支持在PDB上执行
的错误。
解决方案:
在CDB数据库中读取PDB的补偿日志时,需要配置debezium.database.pdb.name
参数,确保正确指定PDB名称。
问题描述:
如果任务运行报错ORA-00942: table or view does not exist
,这可能是由于Oracle CDC 2.4版本的一个已知问题导致的。
解决方案:
手动在CDB实例中重建LOG_MINING_FLUSH
表。此问题通常出现在Dataphin V3.13及之后的版本中,因为这些版本使用了Oracle CDC 2.4。
问题描述:
如果作业运行一段时间后报错Task did not exit gracefully within 180 + seconds
,这表明Task在Failover或退出过程中被阻塞,超过了默认的task.cancellation.timeout
超时时间(180秒)。
解决方案:
task.cancellation.timeout
参数设置为0,以避免Task退出超时。Cancelling
状态的Task,查看其栈信息,排查自定义函数实现中的潜在问题(如close
方法长时间阻塞或计算方法未返回)。问题描述:
如果日志能够读取到Oracle LogMiner数据,但实际数据读取效率较低,可能是由于大数据量场景下的性能瓶颈。
解决方案:
建议使用Dataphin实时集成工具,其在大数据量场景下的性能表现更优。此外,确保字段名大小写与Oracle表完全一致,避免因字段名不匹配导致的数据读取失败。
问题描述:
在非正常情况下(如故障发生),Debezium可能以at-least-once
语义投递变更事件,导致Flink消费时出现重复事件。
解决方案:
table.exec.source.cdc-events-duplicate=true
。PRIMARY KEY
,以便Flink生成一个有状态算子对变更事件去重并生成规范化的changelog流。表名长度超限:
如果表名长度超过30个字符,Oracle LogMiner将无法处理。请确保表名和列名长度不超过30个字符。
字段名大小写不匹配:
如果运行日志报错DataException: file is not a valid field name
,请检查Flink中字段的大小写是否与Oracle表完全一致。
权限配置:
确保按照数据库环境(CDB模式或非CDB模式)正确配置Oracle权限。可以通过以下SQL命令排查权限问题:
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'C##DBZUSER';
SELECT TABLE_NAME FROM DBA_TAB_PRIVS WHERE GRANTEE = 'C##DBZUSER';
补偿日志检查:
使用以下SQL命令检查补偿日志是否开启:
SELECT * FROM dba_log_groups WHERE table_name = 'PF_ID_NAME_PK';
动态更新问题:
如果动态更新配置偶发不生效,建议升级到最新版本的Flink,修复相关缺陷。
通过以上分析和解决方案,您可以根据具体的异常信息定位问题并采取相应的措施。如果问题仍未解决,请提供详细的错误日志以便进一步排查。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。