我在Flink上运行实时流程序,有1个主程序和2个工作程序。一个工人在单独的机器上运行,而另一个工人在主机器本身上运行。我正在使用我的程序的JAR,其中Parallelism设置为2。另外,我使用2个代理和2个分区从Kafka读取数据。
在这种情况下,当我将作业提交到Flink集群时,它将运行一段时间,并失败并返回错误java.lang.Exception: The slot in which the task was executed has been released. Probably loss of TaskManager 82f8941ff339603995e37c453f8ff401。失去taskmanager的可能原因是什么?(仅主计算机上的一个任务管理器丢失,另一个任务管理器仍在那里并显示在Flink Web界面上。)
发布于 2017-02-15 13:50:33
我遇到了问题,too.And,我找到了这个。
如果您看到java.lang.Exception:执行任务的插槽已被释放。即使TaskManager实际上没有崩溃,可能也会丢失TaskManager,这意味着TaskManager在一段时间内没有响应。这可能是由于网络问题,但通常是由于长时间的垃圾收集停滞。在这种情况下,一种快速的解决方法是使用增量垃圾收集器,如G1垃圾收集器。这通常会导致较短的停顿。此外,您可以通过减少用于内部操作的内存闪存抓取量来为用户代码提供更多内存(请参阅TaskManager管理内存的配置).If这两种方法都会失败并且错误仍然存在,只需通过将AKKA_WATCH_HEARTBEAT_PAUSE (akka.watch.heartbeat.pause)设置为更大的值(例如600s)来增加任务管理器的心跳暂停。这将导致JobManager在考虑TaskManager丢失之前等待较长时间间隔的心跳。
解决方案由https://flink.apache.org/faq.html给出。
我希望它能帮助你。
发布于 2017-12-04 16:02:18
正如ulysses在他的文章中所说,你可以增加用于心跳的时间,或者使用像G1GC这样的增量垃圾收集器(Flink的docker镜像已经使用了这个垃圾收集器,如果它可用的话)。
要启用G1GC,您必须在启动flink的任务管理器的java命令中添加以下参数:
-XX:+UseG1GC
您可以在以下链接中找到有关此增量垃圾收集器的更多信息:
发布于 2020-02-19 22:53:20
当用于此任务管理器的节点缺少可用空间时,我们观察到此错误。
当前使用Flink 3.7.1,但较早的版本也受到影响。
这被报道为错误https://issues.apache.org/jira/browse/FLINK-5844,但被关闭了,因为记者没有回应。
https://stackoverflow.com/questions/41845343
复制相似问题