我在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都会启动?
答案 0 :(得分:0)
如果您丢失了一个或多个运行作业的任务管理器,则将根据配置的重新启动策略执行以下操作:
来自https://ververica.zendesk.com/hc/en-us/articles/360002262919-What-happens-if-a-task-manager-is-lost-