Flink:失去任务管理器的集群执行错误

时间:2017-01-25 07:02:00

标签: java apache-flink flink-streaming

我在Flink上运行实时流媒体节目,有1名主人和2名工作人员。一个工作程序在单独的计算机上运行,​​而另一个工作程序在主计算机上运行。我正在使用我的程序的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而失败。失去任务管理员的可能原因是什么? (主机上只有一个任务管理器丢失,另一个仍在那里,并在Flink Web界面显示。)

3 个答案:

答案 0 :(得分:1)

我也遇到了这个问题。我发现了这个。

如果看到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

提供

我希望它可以帮到你。

答案 1 :(得分:1)

正如ulysses在他的anwer中所说,你可以增加心跳所用的时间或使用像G1GC这样的增量垃圾收集器(Flink的docker图像已经使用了这个垃圾收集器,如果& #39;可用)。

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

-XX:+UseG1GC

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

答案 2 :(得分:0)

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

当前使用Flink 3.7.1,但早期版本也受到影响。

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

相关问题