Flink CDC1.16.0 1.17.1 版本 ,job也提交不了,什么原因?

Flink CDC1.16.0 1.17.1 版本 ,多跑几个双流join的job 好像就会卡住 大家有遇到过吗 ,基本三个或者以上大宽表的job时 ,web ui基本点不了 ,没反应,job也提交不了?

展开
收起
真的很搞笑 2023-12-24 19:42:36 60 分享 版权
阿里云 AI 助理回答

根据您描述的问题,Flink CDC 1.16.0 和 1.17.1 版本在运行多个双流 JOIN 的作业时出现卡顿、Web UI 无响应以及无法提交新作业的情况,可能与以下几个方面的原因相关。以下是详细分析和解决方案:


1. 资源不足导致的性能瓶颈

当运行多个双流 JOIN 作业时,尤其是涉及大宽表的场景,可能会因为资源分配不足而导致系统卡顿或无响应。

原因分析

  • 双流 JOIN 操作通常会维护较大的状态数据(State),尤其是在未合理设置状态生命周期(TTL)的情况下,状态数据会持续增长,占用大量内存和磁盘资源。
  • 如果多个作业同时运行,且每个作业的状态数据较大,可能会导致 TaskManager 内存耗尽或 GC 压力过高,从而影响系统的整体性能。
  • Web UI 的无响应可能是由于 JobManager 或 TaskManager 的资源被耗尽,导致无法及时处理用户请求。

解决方案

  1. 优化状态管理

    • 使用 JOIN_STATE_TTL Hint 为双流 JOIN 的左右流分别设置合理的状态生命周期(TTL)。例如,左流可以设置较短的 TTL(如 12 小时),右流可以设置较长的 TTL(如 18 天)。
    • 示例配置:
      SELECT /*+ JOIN_STATE_TTL('left_table' = '12h', 'right_table' = '18d') */ *
      FROM left_table
      JOIN right_table ON left_table.key = right_table.key;
      
    • 合理设置全局状态 TTL 参数 table.exec.state.ttl,以控制状态数据的过期时间。
  2. 增加资源配置

    • 提高 TaskManager 和 JobManager 的内存配置,确保有足够的资源处理多个作业。
    • 在阿里云实时计算 Flink 版中,可以通过调整 CU(Compute Unit)数量来增加资源分配。
  3. 监控和调优

    • 使用阿里云提供的监控工具,查看 TaskManager 的内存使用情况、GC 时间以及反压(Backpressure)情况。
    • 如果发现反压较高,可以参考文档中的调优方法,减少状态大小或优化 JOIN 操作。

2. State Backend 配置问题

State Backend 的选择和配置对双流 JOIN 作业的性能有重要影响。

原因分析

  • 如果使用的是 RocksDB 作为 State Backend,可能会因为磁盘 I/O 性能不足导致作业卡顿。
  • Gemini StateBackend 在双流 JOIN 场景下支持 KV 分离优化,但需要显式开启该功能。

解决方案

  1. 启用 KV 分离优化

    • 在作业配置中添加以下参数,强制开启 KV 分离优化:
      table.exec.join.kv-separate: FORCE
      
    • 该功能仅对 Gemini StateBackend 生效,请确保您的作业使用了 Gemini StateBackend。
  2. 优化 Checkpoint 配置

    • 增加 Checkpoint 间隔时间,避免频繁的 Checkpoint 操作对性能造成影响:
      execution.checkpointing.interval: 180s
      
    • 确保 State 数据的生命周期(TTL)与 Checkpoint 配置相匹配,避免因状态过大导致 Checkpoint 失败。

3. 自定义函数或逻辑阻塞

如果作业中使用了自定义函数(UDF),可能会因为实现问题导致任务阻塞。

原因分析

  • 自定义函数的 close 方法中可能存在长时间阻塞的操作,或者计算逻辑未及时返回结果,导致 Task 无法正常退出。
  • 当作业 Failover 或退出时,TaskManager 可能会因为超时而被强制停止,进一步影响系统的稳定性。

解决方案

  1. 排查自定义函数

    • 检查所有自定义函数的实现,确保 close 方法中没有长时间阻塞的操作。
    • 如果发现阻塞问题,可以通过设置 task.cancellation.timeout 参数为 0 来调试,找到处于 Cancelling 状态的 Task 并查看其栈信息:
      task.cancellation.timeout: 0
      
    • 注意:该参数仅用于调试,请勿在生产环境中使用。
  2. 优化计算逻辑

    • 确保自定义函数的计算逻辑高效且无死循环,避免对系统性能造成影响。

4. 平台版本升级建议

根据知识库资料,实时计算 Flink 版在 2024 年 9 月 11 日发布了新版本,包含多项性能优化和缺陷修复。建议您升级到最新版本以解决潜在的兼容性问题。

升级建议

  1. 升级引擎版本

    • 升级到 VVR 8.0.7 或更高版本,该版本支持更精准的算子状态生命周期(TTL)Hints,并优化了 MySQL CDC 和 Redis 连接器的性能。
    • 升级操作请参见阿里云实时计算控制台的作业引擎版本升级指南。
  2. 验证新功能

    • 新版本支持通过 Hints 为双流 JOIN 和分组聚合算子单独设置 TTL,您可以尝试使用这些功能优化作业性能。

总结

针对您描述的问题,建议从以下几个方面入手: 1. 优化状态管理:合理设置状态生命周期(TTL),减少状态大小。 2. 调整资源配置:增加 TaskManager 和 JobManager 的内存,提升系统性能。 3. 启用 KV 分离优化:确保使用 Gemini StateBackend 并开启 KV 分离功能。 4. 排查自定义函数:检查是否存在阻塞逻辑,优化计算实现。 5. 升级引擎版本:升级到最新版本以获得性能优化和缺陷修复。

如果问题仍未解决,建议联系阿里云技术支持团队,提供详细的日志和作业配置信息以便进一步排查。

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

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

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