我正在Flink上运行实时流程序,其中有1位主控和2位工作人员。一个工人正在另一台计算机上运行,而另一工人正在主计算机本身上运行。我正在使用程序中的Parallelism
设置为2的JAR。另外,我还从具有2个代理和2个分区的Kafka中读取了数据。
在这种情况下,当我将作业提交到Flink群集时,它将运行一段时间,并因错误java.lang.Exception: The slot in which the task was executed has been released. Probably loss of TaskManager 82f8941ff339603995e37c453f8ff401
而失败。失去任务管理员的可能原因是什么? (仅丢失了主机上的一个任务管理器,另一个丢失了,并显示在Flink Web界面上。)
最佳答案
我也遇到了这个问题。我找到了。
如果看到java.lang.Exception:在其中执行任务的插槽已释放。即使TaskManager实际上没有崩溃,它也可能丢失了,这意味着TaskManager暂时没有响应。这可能是由于网络问题造成的,但通常是由于垃圾收集站长时间停滞所致。在这种情况下,快速解决方案是使用增量垃圾收集器,例如G1垃圾收集器。通常可以缩短停顿时间。此外,您可以通过减少Flink为其内部操作抓取的内存量(请参阅TaskManager受管内存的配置)来为用户代码分配更多的内存。如果这两种方法均失败并且错误仍然存在,则只需增加TaskManager的心跳暂停时间,将AKKA_WATCH_HEARTBEAT_PAUSE(akka.watch.heartbeat.pause)设置为更大的值(例如600s)。这将导致JobManager等待心跳较长的时间间隔,然后再考虑TaskManager丢失。
解决方案由https://flink.apache.org/faq.html给出
希望对您有所帮助。