如何在 Flink 中自动故障转移工作



我在3台机器的集群上使用Apache Flink 1.4,其中一台是JobManager,另外2台主机TaskManager。

我在集群模式下启动 flink 并提交一个 flink 作业。 我在 flink 配置中配置了 24 个任务槽,对于作业,我使用 6 个任务槽。在代码中,我启用了检查点,并将重新启动策略设置为 fixedDelayRestart。

当我提交作业时,我看到 3 个任务分配给工作计算机 1,3 个任务分配给工作计算机 2。现在,当我在 WorkerMachine 2 上杀死任务管理器时,我看到整个作业失败。

  1. 这是预期的行为,还是像 Spark 中那样具有自动故障转移功能。

  2. 我们是否需要使用 YARN/Mesos 或 Zookeeper 来实现自动故障转移?

  3. 我们
  4. 尝试了重启策略,但是当它重新启动时,我们收到一个异常,指出没有可用的任务槽,然后作业失败。我们认为 24 个插槽足以接管。我们在这里可能做错了什么?

注意-

这是一个 Flink 流式处理作业。每次 JobManager 尝试连接到我杀死的 TaskManager 时,我都会得到一个 java.net.ConnectException。它重试 3 次(我设置的数字),然后作业失败。

我希望作业管理器将工作负载移动到运行任务管理器的其余计算机上。还是它期望两个任务管理器在重新启动时都已启动?

如果您丢失了运行作业的一个或多个任务管理器,将根据配置的重新启动策略执行以下操作:

  1. Flink 在所有其他运行它的任务管理器上停止作业。
  2. Flink 将尝试从集群中的其余任务管理器(如果可用)获取所需并行度的缺失插槽数量。 如果没有足够的任务槽可用,Flink 会要求集群管理器(YARN、Mesos、Native Kubernetes)启动新的任务管理器——不适用于独立集群
  3. Flink 根据其最新的检查点或保存点(以较新的为准)重新启动整个作业。 请注意,Flink 的容错模型是基于检查点的:你配置检查点应该多久启动一次,然后每个操作员将其 Flink 管理的状态写入检查点文件到某个分布式存储上——基本上是你选择的任何分布式文件系统。请参考 Flink 的检查点文档了解配置详情。

从 https://ververica.zendesk.com/hc/en-us/articles/360002262919-What-happens-if-a-task-manager-is-lost-

相关内容

  • 没有找到相关文章

最新更新