flink on yarn,stop 任务后,flink job manager 、task manager 容器都已经退出了。但是 yarn 上的 AM 容器要很久(十几分钟,甚至30分钟都有)才会改为 Finished 状态,大家有遇到过嘛,资源回收这么久要如何排查和解决呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在 Flink on Yarn 的场景下,当您停止任务后,Flink Job Manager 和 Task Manager 容器已经退出,但 Yarn 上的 ApplicationMaster (AM) 容器需要较长时间(十几分钟甚至 30 分钟)才变为 Finished
状态,这通常与资源回收机制、Yarn 配置或 Flink 参数设置有关。以下是排查和解决该问题的详细步骤:
首先需要确认 AM 容器延迟退出的具体原因,可以通过以下方式获取相关日志: - Flink 日志:查看 Flink Job Manager 和 Task Manager 的运行日志,检查是否存在异常或超时情况。 - Yarn 日志:通过 Yarn ResourceManager 或 NodeManager 获取 AM 容器的日志,分析其退出过程中的耗时点。
如果日志中存在类似 Heartbeat timeout
或 GC overhead
的错误信息,则可能是资源不足或配置不当导致的延迟。
AM 容器的退出时间可能受到 Flink 和 Yarn 的超时参数影响,建议调整以下关键参数:
akka.ask.timeout
和 heartbeat.timeout
如果任务规模较大或网络延迟较高,可能导致心跳超时,建议适当增大这两个参数的值。例如:
akka.ask.timeout: 600s
heartbeat.timeout: 600s
注意:仅在大规模作业中调整这些参数,避免因参数过大导致异常恢复时间变长。
taskmanager.numberOfTaskSlots
和内存配置
如果 TaskManager 内存不足,可能导致资源释放延迟。建议根据作业复杂度调整 TaskManager 的内存和 Slot 数量,确保每个 Slot 至少分配 1 核 4 GiB 的资源。
yarn.am.liveness-monitor.expiry-interval-ms
该参数控制 Yarn 对 AM 容器的心跳检测间隔,默认值为 600 秒(10 分钟)。如果 AM 容器未能及时响应心跳,Yarn 会延迟将其标记为 Finished
。可以适当减小该值以加快资源回收速度:
yarn.am.liveness-monitor.expiry-interval-ms: 300000 # 设置为 5 分钟
yarn.nodemanager.resource.memory-mb
和 yarn.scheduler.maximum-allocation-mb
确保 Yarn 的资源池配置足够支持 Flink 作业的运行和退出,避免因资源争抢导致延迟。
如果 AM 容器在退出过程中频繁触发垃圾回收(GC),可能会导致延迟。建议: - 启用 GC 日志:在 Flink 配置中添加以下参数以记录 GC 行为:
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/to/gc.log
jobmanager.memory.process.size: 4g
taskmanager.memory.process.size: 8g
如果您的 Flink 作业依赖外部系统(如 MySQL、Kafka 等),可能存在连接池未正确关闭的情况,导致 AM 容器延迟退出。建议: - 调大连接池超时参数:例如,MySQL 连接池的 connection.pool.size
和 client.timeout
参数:
connection.pool.size: 50
client.timeout: 600s
如果您使用的是实时计算 Flink 版,可以尝试通过动态扩缩容功能减少资源回收时间。动态更新并发度和资源配置时,Flink 会复用现有的 JobManager 和 TaskManager 容器,从而降低重启代价。
通过上述步骤,您可以从日志分析、参数调整、GC 优化和依赖管理等多个方面排查和解决 AM 容器延迟退出的问题。如果问题仍未解决,建议联系阿里云技术支持团队,提供详细的日志和配置信息以便进一步分析。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。