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

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

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

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

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

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

注意 -

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

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