繁体   English   中英

Flink:Taskmanager 丢失的集群执行错误

[英]Flink: Cluster Execution error of loss of Taskmanager

我在 Flink 上运行实时流程序,有 1 个 master 和 2 个 worker。 一个工人在单独的机器上运行,而另一个工人在主机本身上运行。 我正在使用我的程序的 JAR,其中Parallelism性设置为 2。我还从 Kafka 读取数据,有 2 个代理和 2 个分区。

在这种情况下,当我将作业提交到 Flink 集群时,它会运行一段时间并失败,并出现错误java.lang.Exception: The slot in which the task was executed has been released. Probably loss of TaskManager 82f8941ff339603995e37c453f8ff401 is execution of java.lang.Exception: The slot in which the task was executed has been released. Probably loss of TaskManager 82f8941ff339603995e37c453f8ff401 java.lang.Exception: The slot in which the task was executed has been released. Probably loss of TaskManager 82f8941ff339603995e37c453f8ff401 丢失任务管理器的可能原因是什么? (只有主机上的一个 Task-manager 丢失了,另一个仍然存在并显示在 Flink Web 界面上。)

我也遇到了这个问题,我找到了。

如果您看到 java.lang.Exception: 执行任务的槽已被释放。 即使 TaskManager 实际上没有崩溃,也可能丢失了 TaskManager,这意味着 TaskManager 有一段时间没有响应。 这可能是由于网络问题,但通常是由于长时间的垃圾收集停顿。 在这种情况下,快速修复是使用增量垃圾收集器,如 G1 垃圾收集器。 它通常会导致更短的停顿。 此外,您可以通过减少 Flink 为其内部操作占用的内存量来为用户代码分配更多内存(参见 TaskManager 托管内存的配置)。 如果这两种方法都失败并且错误仍然存​​在,只需将 TaskManager 的心跳暂停增加将 AKKA_WATCH_HEARTBEAT_PAUSE (akka.watch.heartbeat.pause) 设置为更大的值(例如 600s)。 这将导致 JobManager 在考虑 TaskManager 丢失之前等待一个较长的时间间隔的心跳。

解决方案由https://flink.apache.org/faq.html给出

我希望它能帮助你。

正如ulysses在他的回答中所说,您可以增加用于心跳的时间或使用G1GC之类的增量垃圾收集器(如果可用,Flink 的docker镜像已经使用了这个垃圾收集器)。

要启用 G1GC,您必须将以下参数添加到启动 flink 任务管理器的 java 命令中:

-XX:+UseG1GC

您可以在以下链接中找到有关此增量垃圾收集器的更多信息:

当用于此任务管理器的节点缺少可用空间时,我们观察到此错误。

目前使用的是 Flink 3.7.1,但之前的版本也受到了影响。

这被报告为一个错误https://issues.apache.org/jira/browse/FLINK-5844但被关闭,因为记者没有回应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM