我在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界面显示。)
答案 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 但是因为记者没有回应而被关闭。