前言
在 Flink 中,restart-strategy.type 决定了应用程序失败后如何进行重启策略,下面我们主要讨论下 fixed-delay与failure-rate 的区别,以及在哪个场景中使用哪个最好?
固定延迟重启策略(Fixed Delay Restart Strategy)
配置:
restart-strategy.type: fixed-delay
restart-strategy.fixed-delay.attempts: 3
restart-strategy.fixed-delay.delay: 10 s
机制:
- 当任务失败时,Flink 会尝试重启任务,最多尝试
attempts次。 - 每次重启之间会有固定的延迟(例如
10s)。 - 如果尝试次数超过
attempts且任务仍未成功,则任务最终会失败。
适用场景:
- 当你希望对任务失败的重试次数有明确限制。
- 适合短时间内可恢复的场景(例如临时的外部依赖中断)。
失败率重启策略(Failure Rate Restart Strategy)
配置:
restart-strategy.type: failure-rate
restart-strategy.failure-rate.max-failures-per-interval: 3
restart-strategy.failure-rate.failure-rate-interval: 5 min
restart-strategy.failure-rate.delay: 10 s
机制:
- 定义了一个时间窗口(例如
5 min)和最大失败次数(例如3)。 - 如果在这个时间窗口内任务失败次数超过了最大失败次数,任务最终会失败。
- 每次重启之间也有固定的延迟(例如
10s)。
适用场景:
- 适合对失败频率进行控制,而不是单纯依赖总失败次数。
- 适合问题可能在短时间内频繁发生,但在较长时间内不会超出容忍范围的场景。
主要区别
| 特性 | 固定延迟策略 | 失败率策略 |
|---|---|---|
| 重启条件 | 固定次数 | 时间窗口内的失败次数 |
| 重启延迟 | 固定延迟 | 固定延迟 |
| 终止任务的条件 | 超过最大重试次数 | 时间窗口内失败频率超出限制 |
| 适用场景 | 对失败次数要求明确的场景 | 对失败频率有控制要求的场景 |
哪个更好?
选择依据:
-
任务的恢复难度与失败频率:
- 如果任务失败后可以很快恢复(例如依赖的外部服务会在短时间内重启),用 固定延迟策略 更加简单。
- 如果任务失败的原因可能是系统负载、频繁短暂问题,且这些问题有可能在较长时间范围内偶尔发生,选择 失败率策略 更合适。
-
对稳定性和容错的要求:
- 固定延迟策略 更适合严格限制任务重启次数的场景。
- 失败率策略 更加灵活,适合需要允许一定频率失败的任务。
总结建议:
- 如果你的任务对外部服务高度依赖,且外部服务的可靠性波动较大,推荐 失败率策略,以便更灵活应对短暂问题。
- 如果任务失败的原因比较明确,且短期恢复机会较高,选择 固定延迟策略 会更简单直观。
大家还是要根据你们具体的场景,去灵活的调整这两种策略的参数配置!
3324

被折叠的 条评论
为什么被折叠?



