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

时间:2018-01-15 11:29:14

标签: apache-flink

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

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

当我提交作业时,我看到3个任务被分配给工作机1,3个被分配给工作机2.现在,当我在WorkerMachine 2上杀死TaskManager时,我看到整个作业失败。

  1. 这是预期的行为,还是像Spark一样自动进行故障转移。

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

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

  4. 注意 -

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

    我希望JobManager将工作负载移动到运行TaskManager的剩余计算机上。或者它是否期望在重新启动时两个TaskManagers都会启动?

1 个答案:

答案 0 :(得分:0)

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

  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-