Flink Restart Strategy 和 Failover Strategy 有什么区别?
本文目录
面试怎么回答
Restart Strategy 决定失败后能不能重启、重试多少次以及等待多久,比如 fixed-delay、failure-rate、exponential-delay;Failover Strategy 决定哪些 Task 要重启,比如 full 或 region。两者组合后再从最近成功 Checkpoint 恢复:前两者解决恢复调度范围,Checkpoint 解决恢复状态位置。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
Restart Strategy 和 Failover Strategy 都带着“重启”,面试里很容易答成同一件事。
一个决定是否重启、何时重启;另一个决定为了恢复一致性,到底重启哪些 Task。
Restart Strategy 控制重试资格、次数与退避时间,Failover Strategy 根据执行图和数据交换边界确定故障影响范围。
Restart Strategy 管的是时间和次数
固定延迟策略会按设定次数和间隔重试;失败率策略限制一个时间窗口内允许的失败次数;指数退避会逐步拉长间隔并可加入抖动,避免外部系统故障时大量作业同步重启。超过策略条件后,作业最终失败。
Failover Strategy 管的是重启范围
full 会重启作业中的全部 Task;region 会根据流水线区域计算恢复所需的最小影响集合。区域通常由流水线数据交换组织,阻塞交换会形成边界。局部恢复能减少无关 Task 重跑,但必须保证上下游数据一致。

两种策略会组合工作
Task 报错后,故障处理先判断影响区域,再由 Restart Strategy 判断是否允许恢复、等待多久。即使 Failover 只选中一小片区域,如果重试次数已耗尽,作业仍会失败;反过来,允许无限重试也不代表每次只重启故障 Task。
Checkpoint 决定恢复到哪里
流作业被重启的 Task 通常从最近成功 Checkpoint 恢复算子状态和 Source 位点。Restart 和 Failover 决定“是否、何时、重启谁”,Checkpoint 决定“从什么一致状态继续”。没有可用 Checkpoint 时,恢复语义会不同。
生产配置要考虑外部依赖
Kafka、数据库或对象存储短暂故障适合指数退避并加 jitter,避免重试风暴;确定性代码错误则重试再多也无效。需要结合异常分类、告警升级、最大恢复时间和业务 SLA,不能只把 attempts 调大。
排障时的表达顺序
先说失败 Task 和根因,再说 Failover 选中了哪些 Region,然后检查 Restart Backoff 和剩余次数,最后确认从哪个 Checkpoint 恢复。这样能解释为什么一个局部异常看起来重启了很多算子,也能区分恢复慢是等待退避还是状态加载慢。
参考资料
- Flink Task Failure Recovery:https://nightlies.apache.org/flink/flink-docs-stable/docs/ops/state/task_failure_recovery/