登录    关于
马育民老师的博客

马育民的博客

QQ:65242847

flink1.12.x 容错机制:状态恢复和自动重启策略分类

故障恢复

Task 发生故障时,Flink 需要重启出错的 Task 以及其他受到影响的 Task ,以使得作业恢复到正常执行状态。

Flink 通过重启策略和故障恢复策略来控制 Task 重启:

  • 重启策略决定是否可以重启以及重启的间隔;
  • 故障恢复策略决定哪些 Task 需要重启。

重启策略分类

  • 默认重启
  • 无重启
  • 固定延迟重启
  • 失败率重启

默认重启

如果配置了Checkpoint,而没有配置重启策略,那么代码中出现了 非致命错误时,程序会 无限重启

演示

https://www.malaoshi.top/show_1IX22HKMdC5F.html

无重启

Job直接失败,不会尝试进行重启

设置方式1:

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


原文出处:https://malaoshi.top/show_1IX22HJXWTFE.html