Flink重启策略

当任务失败时,Flink需要重新启动失败的任务和其他受影响的任务,才能将任务恢复到正常状态。
重启策略(Restart strategies)和故障转移策略(failover strategies)用于控制任务重新启动。重启策略决定是否以及何时重启失败的/受影响的任务。故障转移策略决定应该重新启动哪些任务来恢复作业。

集群可以使用默认重启策略启动,当没有定义特定于作业的重启策略时,总是使用默认重启策略。如果使用重启策略提交作业,则该策略将覆盖集群的默认设置。
默认的重启策略是通过Flink的配置文件link-conf.yaml设置的,配置参数restart-strategy定义了采用哪种策略。如果不启用检查点,则使用"无重启"策略。如果检查点被激活,并且没有配置重启策略,则使用固定延迟策略(重启尝试次数使用Integer.MAX_VALUE)。

除了可以在flink-conf.yaml中设置默认的重启策略外,我们还可以为每个Flink作业定义特定的重启策略。这个重启策略是通过调用StreamExecutionEnvironment上的setRestartStrategy方法以编程方式设置的。

目前的重启策略有以下5种:

(可以查看org.apache.flink.api.common.restartstrategy.RestartStrategies类)

1)固定延迟策略(Fixed Delay Restart Strategy)
2)指数延迟策略(Exponential Delay Restart Strategy)
3)故障率重启策略(Failure Rate Restart Strategy)
4)无重启策略(No Restart Strategy)
5)后备策略(Fallback Restart Strategy)

1. 固定延迟策略(Fixed Delay Restart Strategy)

固定延迟重启策略是尝试给定次数重新启动作业。如果超过最大尝试次数,任务最终会失败。在两次连续的重启尝试之间,重启策略需要等待固定的时间。

在flink-conf.yaml中设置:

# 重启策略
restart-strategy: fixed-delay
# 尝试次数
restart-strategy.fixed-delay.attempts: 3
# 固定延迟时间
restart-strategy.fixed-delay.delay: 10 s

在代码中设置:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(
  3, // number of restart attempts
  Time.of(10, TimeUnit.SECONDS) // delay
));

2. 指数延迟策略(Exponential Delay Restart Strategy)

指数延迟重启策略试图无限地重启作业,随着延迟的增加,直到最大延迟。任务从不失败。在两次连续的重启尝试之间,重启策略等待延迟时间会呈指数增长,直到达到最大值。然后,它将等待延迟时间保持在最大数值。如果当作业正确执行时,指数延迟值在一段时间后(restart-strategy.exponential-delay.reset-backoff-threshold)复位为最初的值(restart-strategy.exponential-delay.initial-backoff)。

在flink-conf.yaml中设置:

# 重启策略
restart-strategy: exponential-delay
# 初次失败后重启时间间隔(初始值)
restart-strategy.exponential-delay.initial-backoff: 10 s
# 最大重启时间间隔,超过这个最大值后,重启时间间隔不再增大
restart-strategy.exponential-delay.max-backoff: 2 min
# 以后每次失败,重启时间间隔为上一次重启时间间隔乘以这个值
restart-strategy.exponential-delay.backoff-multiplier: 2.0
# 多长时间作业运行无失败后,重启间隔时间会重置为初始值(第一个配置项的值)
restart-strategy.exponential-delay.reset-backoff-threshold: 10 min
# 每次重启间隔时间的最大抖动值(加或减去该配置项范围内的一个随机数),防止大量作业在同一时刻重启
restart-strategy.exponential-delay.jitter-factor: 0.1

在代码中设置:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setRestartStrategy(RestartStrategies.exponentialDelayRestart(
  Time.milliseconds(1),
  Time.milliseconds(1000),
  1.1, // exponential multiplier
  Time.milliseconds(2000), // threshold duration to reset delay to its initial value
  0.1 // jitter
));

3. 故障率重启策略(Failure Rate Restart Strategy)

故障率重启策略是在任务失败后重新启动任务,但当故障率(每一个时间间隔的故障率)超过时,任务最终会失败。在两次连续的重启尝试之间,重启策略需要等待一定的时间。即在restart-strategy.failure-rate.failure-rate-interval时间内失败超过restart-strategy.failure-rate.max-failures-per-interval该值则失败。

在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

在代码中设置:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setRestartStrategy(RestartStrategies.failureRateRestart(
  3, // max failures per interval
  Time.of(5, TimeUnit.MINUTES), //time interval for measuring failure rate
  Time.of(10, TimeUnit.SECONDS) // delay
));

4. 无重启策略(No Restart Strategy)

作业直接失败,不尝试重启。

在flink-conf.yaml中设置:

restart-strategy: none

在代码中设置:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setRestartStrategy(RestartStrategies.noRestart());

5. 后备策略(Fallback Restart Strategy)

使用集群定义的重启策略。这对于支持检查点的流程序很有帮助。默认情况下,如果没有定义其他重启策略,则选择固定延迟重启策略。

适用场景特别是当你有一个自定义的重启策略的实现时,在flink-conf.yaml中配置时特别有用。

故障转移策略

故障转移策略只有2种,full和region

full:就是一个task failed就重启所有的task

region:就是只重启受影响的task

可以在flink-conf.yaml中设置,通过配置项:jobmanager.execution.failover-strategy,默认值就是region。

此处附上官网说明:

Task Failure Recovery
https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/ops/state/task_failure_recovery/#task-failure-recovery

你可能感兴趣的:(flink,flink,大数据,big,data)