首页 文章

Flink:Clustermanager失去的Cluster Execution错误

提问于
浏览
1

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

2 回答

  • 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

    正如ulysses在他的anwer中所说的那样,你可以增加用于心跳的时间或使用增量垃圾收集器,如G1GC(Flink 's docker images already use this garbage collector if it'可用) .

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

    -XX:+UseG1GC

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

相关问题