Flink重启策略


Flink 支持多种不同的重启策略,这些策略控制了在失败情况下工作要如何重启。 集群在启动时会伴随一个默认的重启策略,在没有定义具体工作重启策略时会使用该默认策略。 如果在工作提交时制定一个重启策略,该策略会覆盖集群的默认设定。

概览

默认的重启策略可以通过 Flink 的配置文件 flink-conf.yaml 指定。 配置参数 restart-strategy 定义了哪个策略被使用。 如果没有启用 checkpointing,则使用无重启 (no restart) 策略。 如果启用了 checkpointing,但没有配置重启策略,则使用固定间隔 (fixed-delay) 策略,其中 Integer.MAX_VALUE 参数是尝试重启次数。 参阅下列可用的重启策略来了解什么值能被支持。

每个重启策略都有自己的一组参数来控制策略的行为。 这些值也可以在配置文件中设置。 每个重启策略的描述包括了更多关于对应配置值的信息。

重启策略对应值
固定间隔 (Fixed delay)fixed-delay
失败率 (Failure rate)failure-rate
无重启 (No restart)none

除了定义默认的重启策略,也可以为每个 Flink 工作定义一个具体的重启策略。 这个重启策略可以通过调用 ExecutionEnvironment 的 setRestartStrategy 方法在编程时设置。 该方法对 StreamExecutionEnvironment 同样有效。

下列例子展示我们如何为我们的工作设置一个固定间隔重启策略。 在失败的情况下,系统会重启工作 3 次,并在连续两次尝试重启中等待 10 秒

val env = ExecutionEnvironment.getExecutionEnvironment()
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(
  3, // 尝试重启的次数
  Time.of(10, TimeUnit.SECONDS) // 间隔
))

重启策略

以下各部分描述与具体重启策略相关的配置选项。

固定间隔 (Fixed Delay) 重启策略

固定截个重启策略会根据指定的次数尝试重启工作。 如果超过了最大尝试次数,则工作最终失败。 在连续两次的重启尝试中,重启策略会等待一段固定的时间。

这个策略可以通过设置 flink-conf.yaml 中的下列配置参数作为默认策略启动。

restart-strategy: fixed-delay
配置参数描述默认值
restart-strategy.fixed-delay.attempts在工作宣布失败之前 Flink 尝试重启的次数1, 或 Integer.MAX_VALUE 如果被 checkpointing 激活
restart-strategy.fixed-delay.delay间隔重启指的是在一次失败的执行之后,并不会立即重新开始另一次执行,而是在一段间隔之后再开始. 当程序与外部系统进行交互时,比如连接或待定事务需要在 Flink 尝试重新执行之前超时,该方法是有助的akka.ask.timeout, 或 10s 如果被 checkpointing 激活

举个例子:

restart-strategy.fixed-delay.attempts: 3
restart-strategy.fixed-delay.delay: 10 s

固定间隔重启策略也可以在编程时进行设定

val env = ExecutionEnvironment.getExecutionEnvironment()
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(
3, // 尝试重启的次数
Time.of(10, TimeUnit.SECONDS) // 间隔
))

失败率 (Failure Rate) 重启策略

失败率重启策略在失败后重启工作,当超过 failure rate (一个时间段内的失败次数) 时工作宣告失败。 在连续两次重启尝试中,该重启策略会等待一端固定的时间。

这个策略可以通过设置 flink-conf.yaml 中的下列配置参数作为默认策略启动。

restart-strategy: failure-rate
配置参数描述默认值
restart-strategy.failure-rate.max-failures-per-interval在工作宣告失败之前,给定时间段内的最大重启次数1
restart-strategy.failure-rate.failure-rate-interval衡量失败率的时间段.1 minute
restart-strategy.failure-rate.delay连续两次重启尝试间的间隔akka.ask.timeout
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

失败率重启策略也可以在编程时进行设定

val env = ExecutionEnvironment.getExecutionEnvironment()
env.setRestartStrategy(RestartStrategies.failureRateRestart(
  3, // 一个时间段内的最大失败次数
  Time.of(5, TimeUnit.MINUTES), // 衡量失败次数的是时间段
  Time.of(10, TimeUnit.SECONDS) // 间隔
))
无重启 (No Restart) 策略

没有任何工作重启,若工作失败则直接宣告失败。

restart-strategy: none

无重启策略也可以通过编程来设定

val env = ExecutionEnvironment.getExecutionEnvironment()
env.setRestartStrategy(RestartStrategies.noRestart())
回调 (Fallback) 重启策略

使用集群定义的重启策略。 该策略对启用 checkpointing 的流式程序有帮助。 如果没有其他的定义的重启策略,每一次默认启用都会启动固定间隔重启策略,

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你提到的问题是Flink自动重启的情况。Flink是一个分布式流处理框架,它可以在大规模数据集上进行实时计算和批处理。Flink的自动重启机制是为了保证作业的高可用性。 有几个可能的原因导致Flink自动重启: 1. 作业异常:如果作业出现异常错误,Flink会尝试自动重启作业以恢复正常运行。这可能是由于代码错误、资源不足或其他问题引起的。你可以检查作业的日志或错误信息来查找具体的问题。 2. 任务失败:Flink作业由多个并行任务组成,如果其中一个任务失败,Flink会尝试自动重启该任务。任务失败可能是由于输入数据错误、计算逻辑问题或资源限制引起的。 3. 配置问题:Flink的自动重启机制可以通过配置文件进行调整。你可以检查作业的配置文件,确认自动重启策略和重试次数是否合理。如果配置不正确,可能会导致频繁的重启。 为了解决Flink自动重启的问题,你可以尝试以下几个步骤: 1. 检查日志和错误信息,找出作业失败的具体原因。根据错误类型和描述,尝试修复代码或调整配置。 2. 调整自动重启策略和重试次数。根据作业的特点和需求,合理设置自动重启策略和重试次数,以免频繁重启造成性能损失。 3. 检查资源配置。确保作业所需的资源(CPU、内存、网络等)足够满足作业的需求,避免资源不足导致作业失败和频繁重启。 如果以上步骤无法解决问题,你可以提供更多的细节和错误信息,以便我提供更具体的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值