Flink CDC中oracle cdc过几个小时就报这异常?

Flink CDC中oracle cdc过几个小时就报这异常?image.png

展开
收起
真的很搞笑 2023-12-31 21:14:25 55 分享 版权
阿里云 AI 助理回答

在使用Flink CDC集成Oracle CDC时,如果作业运行几个小时后出现异常,可能的原因和解决方案如下:


1. Oracle LogMiner的PDB支持问题

  • 问题描述
    如果您在多租户容器数据库(CDB)中使用Oracle CDC,并且目标表位于可插拔数据库(PDB)中,可能会遇到Oracle LogMiner不支持在PDB上执行的错误。

  • 解决方案
    在CDB数据库中读取PDB的补偿日志时,需要配置debezium.database.pdb.name参数,确保正确指定PDB名称。


2. 表不存在错误

  • 问题描述
    如果任务运行报错ORA-00942: table or view does not exist,这可能是由于Oracle CDC 2.4版本的一个已知问题导致的。

  • 解决方案
    手动在CDB实例中重建LOG_MINING_FLUSH表。此问题通常出现在Dataphin V3.13及之后的版本中,因为这些版本使用了Oracle CDC 2.4。


3. Task退出超时问题

  • 问题描述
    如果作业运行一段时间后报错Task did not exit gracefully within 180 + seconds,这表明Task在Failover或退出过程中被阻塞,超过了默认的task.cancellation.timeout超时时间(180秒)。

  • 解决方案

    • task.cancellation.timeout参数设置为0,以避免Task退出超时。
      注意:此参数仅用于调试,请勿在生产环境中使用该配置。
    • 重启作业后,如果仍然存在阻塞问题,需找到处于Cancelling状态的Task,查看其栈信息,排查自定义函数实现中的潜在问题(如close方法长时间阻塞或计算方法未返回)。

4. 数据读取效率低

  • 问题描述
    如果日志能够读取到Oracle LogMiner数据,但实际数据读取效率较低,可能是由于大数据量场景下的性能瓶颈。

  • 解决方案
    建议使用Dataphin实时集成工具,其在大数据量场景下的性能表现更优。此外,确保字段名大小写与Oracle表完全一致,避免因字段名不匹配导致的数据读取失败。


5. Debezium投递重复事件

  • 问题描述
    在非正常情况下(如故障发生),Debezium可能以at-least-once语义投递变更事件,导致Flink消费时出现重复事件。

  • 解决方案

    • 设置作业参数table.exec.source.cdc-events-duplicate=true
    • 在源表上定义PRIMARY KEY,以便Flink生成一个有状态算子对变更事件去重并生成规范化的changelog流。

6. 其他常见问题

  • 表名长度超限
    如果表名长度超过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,修复相关缺陷。


通过以上分析和解决方案,您可以根据具体的异常信息定位问题并采取相应的措施。如果问题仍未解决,请提供详细的错误日志以便进一步排查。

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

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

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