订阅更新

Flink Restart Strategy 和 Failover Strategy 有什么区别?

面试问 191 约 3 分钟读完

本文目录
  1. 面试怎么回答
  2. Restart Strategy 管的是时间和次数
  3. Failover Strategy 管的是重启范围
  4. 两种策略会组合工作
  5. Checkpoint 决定恢复到哪里
  6. 生产配置要考虑外部依赖
  7. 排障时的表达顺序
  8. 参考资料

面试怎么回答

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 重跑,但必须保证上下游数据一致。

Flink 故障恢复的三层分工

两种策略会组合工作

Task 报错后,故障处理先判断影响区域,再由 Restart Strategy 判断是否允许恢复、等待多久。即使 Failover 只选中一小片区域,如果重试次数已耗尽,作业仍会失败;反过来,允许无限重试也不代表每次只重启故障 Task。

Checkpoint 决定恢复到哪里

流作业被重启的 Task 通常从最近成功 Checkpoint 恢复算子状态和 Source 位点。Restart 和 Failover 决定“是否、何时、重启谁”,Checkpoint 决定“从什么一致状态继续”。没有可用 Checkpoint 时,恢复语义会不同。

生产配置要考虑外部依赖

Kafka、数据库或对象存储短暂故障适合指数退避并加 jitter,避免重试风暴;确定性代码错误则重试再多也无效。需要结合异常分类、告警升级、最大恢复时间和业务 SLA,不能只把 attempts 调大。

排障时的表达顺序

先说失败 Task 和根因,再说 Failover 选中了哪些 Region,然后检查 Restart Backoff 和剩余次数,最后确认从哪个 Checkpoint 恢复。这样能解释为什么一个局部异常看起来重启了很多算子,也能区分恢复慢是等待退避还是状态加载慢。

参考资料

刷题进度保存在当前浏览器