在 Apache Flink 中,restart-strategy.type
用于指定作业的重启策略(Restart Strategy),它决定了作业在失败后如何恢复。
Flink 提供了 4 种内置重启策略 ,可以通过 flink-conf.yaml
或代码动态配置。
1. 可配置的 restart-strategy.type
值
策略类型 | 配置值 (restart-strategy.type ) |
说明 |
---|---|---|
固定延迟重启 | fixed-delay |
每次失败后固定延迟一段时间重启。 |
失败阈值重启 | failure-rate |
在时间窗口内允许一定次数的失败,超过则放弃。 |
指数延迟重启 | exponential-delay |
每次失败后延迟时间指数增长(适合短时故障)。 |
不重启(直接失败) | disable, off, none |
作业失败后直接终止,不尝试恢复(默认策略)。 |
2. 详细配置方式
2.1 通过 flink-conf.yaml
配置
yaml
# 固定延迟重启
restart-strategy.type: fixed-delay
restart-strategy.fixed-delay.attempts: 3 # 最大尝试次数
restart-strategy.fixed-delay.delay: 10 s # 每次重启的延迟时间
# 失败率重启
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 # 每次重启的延迟时间
# 指数延迟重启
restart-strategy.type: exponential-delay
restart-strategy.exponential-delay.initial-backoff: 1 s # 初始延迟
restart-strategy.exponential-delay.max-backoff: 1 min # 最大延迟
restart-strategy.exponential-delay.backoff-multiplier: 2.0 # 延迟倍数(指数增长)
restart-strategy.exponential-delay.reset-backoff-threshold: 5 min # 重置延迟的时间窗口
restart-strategy.exponential-delay.jitter-factor: 0.1 # 随机抖动因子(避免集群同时重启)
# 不重启(直接失败) (默认策略)
restart-strategy.type: none
2.2 通过代码动态配置
java
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 固定延迟重启
env.setRestartStrategy(
RestartStrategies.fixedDelayRestart(
3, // 最大尝试次数
Time.seconds(10) // 延迟时间
)
);
// 失败率重启
env.setRestartStrategy(
RestartStrategies.failureRateRestart(
3, // 时间窗口内允许的失败次数
Time.minutes(5), // 时间窗口长度
Time.seconds(10) // 延迟时间
)
);
// 指数延迟重启
env.setRestartStrategy(
RestartStrategies.exponentialDelayRestart(
Time.seconds(1), // 初始延迟
Time.minutes(1), // 最大延迟
2.0, // 延迟倍数
Time.minutes(5), // 重置延迟的时间窗口
0.1 // 随机抖动因子
)
);
// 不重启
env.setRestartStrategy(RestartStrategies.noRestart());
3. 各策略的适用场景
策略 | 适用场景 |
---|---|
fixed-delay | 通用场景,适合大多数作业(如短暂网络故障)。 |
failure-rate | 需要严格限制失败次数的场景(如依赖外部服务不可用时快速放弃)。 |
exponential-delay | 短时故障频发时避免雪崩效应(如 Kafka 短暂不可用)。 |
none | 测试环境或无需自动恢复的作业(如一次性批处理任务)。 |
参考官方文档: