我的工作有状态操作员并且还启用了检查点。 Staful Operator 的其中一项任务由于某种原因失败,已重新启动并恢复检查点状态。
我想问以下哪一个是重启行为:
- 仅重新启动并恢复失败的任务
- 所有操作员(包含失败的任务)的任务都将重新启动并恢复
- 整个作业重新启动并恢复
如果一项任务失败,是否会重新启动整个作业?
tldr:对于流作业,答案通常是肯定的,但不一定。
Flink 流作业的恢复涉及将源回退到检查点中记录的偏移量,并将状态重置回仅消耗了这些偏移量之前的数据后的状态。
仅重新启动失败的任务会导致不一致,并且无法提供精确一次语义,除非失败的任务不依赖于任何上游任务,并且没有下游任务依赖于它。
那么Flink能做的就是恢复状态并在此基础上重新启动处理故障转移区域,它考虑了作业图中的这些依赖关系。在流作业的情况下,只有当作业非常并行时,才有可能完成整个作业的恢复和重新启动。因此,在并行作业令人尴尬的情况下,只有失败的区域才会恢复并重新启动(包括从源到接收器的所有子任务),而其他区域则继续运行。
如果使用此方法jobmanager.execution.failover-strategy
被设定为region
,自 Flink 1.10 以来一直是默认值。
要了解更多相关信息,请参阅FLIP-1:任务失败的细粒度恢复和Apache Flink 1.9.0 发布公告,其中引入了此功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)