故障恢复
当 Task 发生故障时,Flink 需要重启出错的 Task 以及其他受到影响的 Task ,以使得作业恢复到正常执行状态。
Flink 通过重启策略和故障恢复策略来控制 Task 重启:
- 重启策略决定是否可以重启以及重启的间隔;
- 故障恢复策略决定哪些 Task 需要重启。
重启策略分类
- 默认重启
- 无重启
- 固定延迟重启(推荐)
- 失败率重启
默认重启
如果配置了Checkpoint,而没有配置重启策略,那么代码中出现了 非致命错误时,程序会 无限重启
演示
https://www.malaoshi.top/show_1IX22HKMdC5F.html
无重启
Job直接失败,不会尝试进行重启
设置方式1:
在 flink-conf.yaml 中设置下面的参数来启用:
restart-strategy: none
设置方式2(在程序中设置):
val env = ExecutionEnvironment.getExecutionEnvironment();
env.setRestartStrategy(RestartStrategies.noRestart());
演示
https://www.malaoshi.top/show_1IX22HQ6zWLR.html
固定延迟重启策略(推荐)
在开发中经常使用
设置方式1:
重启策略可以配置 flink-conf.yaml 的下面配置参数来启用,作为默认的重启策略:
例子:
restart-strategy: fixed-delay
restart-strategy.fixed-delay.attempts: 3
restart-strategy.fixed-delay.delay: 10 s
设置方式2:
也可以在程序中设置:
import org.apache.flink.api.common.time.Time;
import java.util.concurrent.TimeUnit;
val env = ExecutionEnvironment.getExecutionEnvironment()
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(
3, // 最多重启3次数
Time.of(10, TimeUnit.SECONDS) // 重启时间间隔
));
解释: 如果job失败,重启3次,每次间隔 10s
演示
https://www.malaoshi.top/show_1IX22HeQcKQr.html
失败率重启策略
在开发中偶尔使用
设置方式1:
在 flink-conf.yaml 中设置下面的参数来启用:
例子:
restart-strategy: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
设置方式2:
失败率重启策略也可以在程序中设置:
val env = ExecutionEnvironment.getExecutionEnvironment()
env.setRestartStrategy(RestartStrategies.failureRateRestart(
3, // 每个测量时间间隔最大失败次数
Time.of(5, TimeUnit.MINUTES), //失败率测量的时间间隔
Time.of(10, TimeUnit.SECONDS) // 两次连续重启的时间间隔
));
解释:如果5分钟内job失败不超过三次,自动重启, 每次重启间隔10s (如果5分钟内程序失败超过3次,则程序退出)
演示
https://www.malaoshi.top/show_1IX22IInLLOu.html
感谢:https://blog.csdn.net/yang_shibiao/article/details/119972875