有没有大佬 遇到过, Flink CDC 中拉oracle 从binlog最新点位拉去的 直接报错推

有没有大佬 遇到过, Flink CDC 中拉oracle 从binlog最新点位拉去的 直接报错推出的?image.png 日志都没找到 yarn 上对应的appid 被清除了

展开
收起
真的很搞笑 2023-05-02 08:02:39 166 分享 版权
阿里云 AI 助理回答

根据您描述的问题,Flink CDC 在拉取 Oracle 数据时从 Binlog 最新点位开始消费直接报错退出,并且 Yarn 上对应的 AppID 被清除。以下是可能的原因分析及解决方案:


1. 问题原因分析

1.1 Binlog 格式或配置问题

  • 如果使用的是 MySQL CDC 源表(尽管您提到的是 Oracle,但部分原理类似),Binlog 格式不正确可能导致读取失败。例如,Binlog 格式为 MixedStatement 时,CDC 工具无法正确解析数据变更事件。
  • Oracle 的 LogMiner 是 Flink CDC 拉取 Oracle 数据的核心机制,如果 LogMiner 配置不当(如未启用归档日志或日志保留时间不足),可能导致无法从最新点位拉取数据。

1.2 日志保留时间不足

  • 如果 Oracle 的归档日志或在线日志被清理,而作业尝试从最新的点位开始消费,可能会导致找不到对应的日志文件,从而报错退出。
  • 类似于 MySQL 的 expire_logs_days 参数,Oracle 的日志保留策略也需要合理配置。

1.3 作业启动位点问题

  • 如果作业未正确设置启动位点(例如未指定 scan.startup.mode 参数),可能会导致作业尝试从一个无效的点位开始消费,进而报错退出。

1.4 资源不足或超时

  • 如果作业在启动过程中因资源不足(如内存、CPU)或超时(如 TaskManager 启动超时)导致失败,Yarn 可能会清除 AppID。

2. 解决方案

2.1 检查 Oracle 日志配置

  1. 确保 Oracle 数据库启用了归档日志模式:
    SELECT log_mode FROM v$database;
    

    如果返回值不是 ARCHIVELOG,需要启用归档日志模式:

    SHUTDOWN IMMEDIATE;
    STARTUP MOUNT;
    ALTER DATABASE ARCHIVELOG;
    ALTER DATABASE OPEN;
    
  2. 检查日志保留策略,确保日志文件不会被过早清理:
    • 确认归档日志路径和保留时间是否满足需求。
    • 如果日志已被清理,可以尝试从备份中恢复相关日志。

2.2 设置正确的启动位点

  • 在 Flink CDC 配置中,明确指定启动位点。例如:
    'scan.startup.mode' = 'latest-offset'
    

    或者,如果您希望从某个特定时间点开始消费:

    'scan.startup.mode' = 'timestamp',
    'scan.startup.timestamp-millis' = '1698765432000'
    

2.3 增加资源分配

  • 如果作业因资源不足导致失败,可以尝试增加 Flink 作业的资源配置:
    • 提高 TaskManager 和 JobManager 的内存:
    taskmanager.memory.process.size: 4096m
    jobmanager.memory.process.size: 2048m
    
    • 增加并行度以加快处理速度:
    parallelism.default: 4
    

2.4 调整超时参数

  • 如果作业在启动或 Failover 过程中因超时被清除,可以调整以下参数:
    • 设置 Task 取消超时时间为 0(仅用于调试,生产环境慎用):
    task.cancellation.timeout: 0
    
    • 增加 Checkpoint 超时时间:
    execution.checkpointing.timeout: 10min
    

2.5 查看详细日志

  • 如果 Yarn 上的 AppID 被清除,可以通过以下方式查找日志:
    1. 在实时计算开发控制台的 部署详情 页面,查看 Deployment ID。
    2. 使用 Deployment ID 在日志服务中搜索相关日志。
    3. 针对关键组件(如 Kafka、Oracle)设置更详细的日志级别:
      log4j.logger.org.apache.kafka.clients.consumer=trace
      log4j.logger.org.apache.flink.connector.jdbc=debug
      

3. 其他注意事项

  • 避免重复消费:确保每个并行度的 server-id 全局唯一,避免多个作业或工具使用相同的 server-id 导致冲突。
  • 检查权限:确保数据库用户具有足够的权限(如 SELECT、DELETE 权限)以读取变更数据。
  • 升级版本:如果使用的是较旧版本的 Flink CDC,建议升级到最新版本以获得更好的稳定性和性能。

通过以上步骤,您可以逐步排查并解决 Flink CDC 拉取 Oracle 数据时从最新点位消费报错的问题。如果问题仍未解决,请提供更详细的日志信息以便进一步分析。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

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

大数据领域前沿技术分享与交流,这里不止有技术干货、学习心得、企业实践、社区活动,还有未来。

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