【问题标题】:Flink: Cluster Execution error of loss of TaskmanagerFlink: Cluster Execution error of loss of Taskmanager
【发布时间】:2020-02-19 22:53:19
【问题描述】:

我在 Flink 上运行实时流程序,有 1 个 master 和 2 个 worker。一名工作人员在单独的机器上运行,而另一名工作人员在主机本身上运行。我正在使用我的程序的 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。任务管理器丢失的可能原因是什么? (只有一个在 master 机器上的 Task-manager 丢失了,另一个还在,并且在 Flink Web Interface 中显示。)

【问题讨论】:

    标签: java apache-flink flink-streaming


    【解决方案1】:

    我也遇到了这个问题。我找到了这个。

    如果您看到 java.lang.Exception: 执行任务的槽已被释放。即使TaskManager实际上没有崩溃,也可能丢失TaskManager,这意味着TaskManager有一段时间没有响应。这可能是由于网络问题,但通常是由于长时间的垃圾收集停止。在这种情况下,一个快速的解决方法是使用增量垃圾收集器,例如 G1 垃圾收集器。它通常会导致更短的停顿。此外,您可以通过减少 Flink 为其内部操作获取的内存量来为用户代码分配更多内存(请参阅 TaskManager 托管内存的配置)。如果这两种方法都失败并且错误仍然存​​在,只需将 TaskManager 的心跳暂停增加将 AKKA_WATCH_HEARTBEAT_PAUSE (akka.watch.heartbeat.pause) 设置为更大的值(例如 600 秒)。这将导致 JobManager 在考虑 TaskManager 丢失之前等待更长的时间间隔。

    解决方案由https://flink.apache.org/faq.html给出

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      正如ulysses 在他的回答中所说,您可以增加用于心跳的时间或使用像G1GC 这样的增量垃圾收集器(如果可用,Flink 的 docker 镜像已经使用了这个垃圾收集器)。

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

      -XX:+UseG1GC

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2018-11-21
          • 2015-09-10
          • 1970-01-01
          • 2022-12-02
          • 2013-04-27
          • 2015-12-19
          • 1970-01-01
          • 1970-01-01
          • 2017-03-31
          相关资源
          最近更新 更多