Flink概念知识讲解之:Restart重启策略配置

Flink概念知识讲解之:Restart重启策略配置

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

Flink 通过重启策略和故障恢复策略来控制 Task 重启:重启策略决定是否可以重启以及重启的间隔;故障恢复策略决定哪些 Task 需要重启。

重启策略

Flink 作业如果没有定义重启策略,则会遵循集群启动时加载的默认重启策略。 如果提交作业时设置了重启策略,该策略将覆盖掉集群的默认策略。

可以通过 Flink 的配置文件 flink-conf.yaml 来设置默认的重启策略。配置参数restart-strategy 定义了采取何种策略。 如果没有启用 checkpoint,就采用“不重启”策略。如果启用了 checkpoint 且没有配置重启策略,那么就采用固定延时重启策略, 此时最大尝试重启次数由 Integer.MAX_VALUE 参数设置。

restart-strategy从1.17版本开始之后改为restart-strategy.type

每个重启策略都有自己的一组配置参数来控制其行为。 这些参数也在配置文件中设置。 后文的描述中会详细介绍每种重启策略的配置项。

restart-strategy的可选值包括以下:

  • none, off, disable: 不重启策略。
  • fixeddelay, fixed-delay :固定延时重启策略。
  • failurerate, failure-rate: 故障率重启策略。
  • exponentialdelay, exponential-delay: 指数延迟重启策略。

接下来,我们来分别详细描述一下这些重启策略的原理。

fixed-delay 固定延时重启策略

固定延时重启策略按照给定的次数尝试重启作业。 如果尝试超过了给定的最大次数,作业将最终失败。 在连续的两次重启尝试之间,重启策略等待一段固定长度的时间。

通过在 flink-conf.yaml 中设置如下配置参数,默认启用此策略。

restart-strategy: fixed-delay

配置项:

  • estart-strategy.fixed-delay.attempts 默认值 1 ,也就是默认重启1一次。请注意这个和没有配置重启策略的默认值不一样,没有配置策略,默认值为 Integer.MAX_VALUE
  • restart-strategy.fixed-delay.delay 默认值 1 s ,两次连续重新启动尝试之间的延迟时间。如:1 min 、 20 s

举例如下:

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

在这种配置下,如果任务从 “Restarting” 状态变成了 “Running”,然后再次因为异常变成 “Restarting”,那么重启次数并不会重新计数。 restart-strategy.fixed-delay.attempts 这个参数设置的是在整个任务运行期间最多允许重启的次数,而不是连续失败时的最多重启次数。也就是说,无论任务在运行过程中的任何时间点出现异常,只要累计的重启次数没有超过 5 次,都会尝试进行重启。因此,即使任务在重启后恢复运行,但后续再次失败,重启次数仍会继续累计,而不会重新计数。

failure-rate 故障率重启策略

故障率重启策略在故障发生之后重启作业,但是当故障率(每个时间间隔发生故障的次数)超过设定的限制时,作业会最终失败。 在连续的两次重启尝试之间,重启策略等待一段固定长度的时间。

通过在 flink-conf.yaml 中设置如下配置参数,默认启用此策略。

restart-strategy: failure-rate

配置项:

  • restart-strategy.failure-rate.max-failures-per-interval: 这个设置是在给定的时间间隔内允许的最大失败次数。例如,如果设置为 3,则表示在设定的时间间隔内,如果作业失败了超过3次,Flink将不再尝试重启作业。
  • restart-strategy.failure-rate.failure-rate-interval: 这个设置是用于测量故障率的时间窗口。这个时间间隔与上一个参数一起使用,例如,如果设置为 “1 min”,则 Flink 会在每个 “1 min” 的时间段内跟踪作业失败次数,并与 max-failures-per-interval 的设置进行比较。
  • restart-strategy.failure-rate.delay: 这是连续两次尝试重新启动作业之间的延迟时间。例如,如果作业失败后立即尝试进行重启,然后又失败,此设置将使 Flink 在下一次尝试重新启动之前等待指定的时间。此设置有助于避免作业在出现持续性问题时过于频繁地尝试重启。

举例如下:

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

exponential-delay 指数延迟重启策略

指数延迟重启策略在两次连续的重新启动尝试之间,重新启动的延迟时间不断呈指数增长,直到达到最大延迟时间。 然后,延迟时间将保持在最大延迟时间。

当作业正确地执行后,指数延迟时间会在一些时间后被重置为初始值,这些阈值可以被配置。

restart-strategy.type: exponential-delay

配置项:

  • restart-strategy.exponential-delay.attempts-before-reset-backoff

    • 默认值 infinite ,如果重新启动策略已设置为指数延迟,则表示Flink 在任务失败前重试执行的次数。一旦 backoff 被重置为其初始值,该数字将被重置。
  • restart-strategy.exponential-delay.backoff-multiplier:

    • 指数延迟重启策略的基本工作原理是,在每一次 任务失败并需要重启时,系统都会等待一段时间,这段时间就被称为 “backoff”。 系统初始的 “backoff” 时间由 restart-strategy.exponential-delay.initial-backoff 这个配置项来设定。

      当任务连续失败时,为了防止过于频繁的重启,可能使得问题更加严重,系统会在每次重启之前将 “backoff” 时间进行延长。这个延长就是按照指数递增的:每一次延长的 “backoff” = 当前的 “backoff” * restart-strategy.exponential-delay.backoff-multiplier

      比如说,如果你的 initial-backoff 是 10s,而 backoff-multiplier 是 2,那么:

      • 第1次重启会等待 10s
      • 第2次重启会等待 10s * 2 = 20s
      • 第3次重启会等待 20s * 2 = 40s
      • 以此类推

      通过这种方式,Flink 可以在遇到持续性的问题时,通过逐渐增加重启间隔,为系统提供恢复的时间,同时也避免了过于频繁的重启导致的系统压力。

  • restart-strategy.exponential-delay.initial-backoff:

    • restart-strategy.exponential-delay.initial-backoff 配置项用于设置每次重新启动任务时的初始暂停(backoff)时间。默认值是 1 秒。这个配置项的影响是,在任务失败后,将等待这个初始暂停时间后才进行第一次重启尝试。
  • restart-strategy.exponential-delay.jitter-factor:

    • restart-strategy.exponential-delay.jitter-factor 默认值是0.1,表示实际重启间隔在计算出的间隔基础上会添加或减去最多10%的时间。 假设按照指数间隔计算出的重启间隔是100秒,那么加入抖动因子后,实际的重启间隔将在90秒到110秒之间。

      例如,假设我们的 backoff 时间是 10s,乘数为 2,抖动因子为 0.1。那么在第一次任务失败后,重启的等待时间将在 9s 到 11s 之间(±10%)。如果任务再次失败,那么下一次的等待时间将在 (2*10s)90% 到 (210s)*110% 之间,即 18s 到 22s。这样就能够在一定程度上避免多个作业同时重启的问题,从而更好地利用资源,提高系统的稳定性和效率。

  • restart-strategy.exponential-delay.max-backoff:

    • restart-strategy.exponential-delay.max-backoff 是 Flink 的指数延时重启策略中的一个配置项,其作用是设置每次尝试重新启动任务之间的最大暂停持续时间。其默认值是 “1 min”,代表最大的等待重启时间是 1 分钟。
    • 在 exponential-delay 类型的重启策略中,每次任务失败后的重启等待时间会按照一个乘数进行增长,这个乘数是由 restart-strategy.exponential-delay.backoff-multiplier 配置项进行控制的。但无论这个乘数设置为多少,实际的等待时间都不会超过 restart-strategy.exponential-delay.max-backoff 所设置的值。
  • restart-strategy.exponential-delay.reset-backoff-threshold:

    • restart-strategy.exponential-delay.reset-backoff-threshold"是 Flink 指数延迟重启策略中的一个配置项,其默认值为 “1h”。 这个参数的作用是,设定一个时间阈值,当作业能够成功运行超过这个阈值的时间之后,下一次如果出现任务失败,计算重启时间间隔也就是backoff会被重置为初始值。换句话说,这是判断系统是否已经从错误恢复,并将失败尝试次数重置的指标。

    • 为什么要这么设计呢?

      在指数延迟重启策略中,每次任务失败后的重启等待时间会按照一个乘数进行增长,这个乘数是由 restart-strategy.exponential-delay.backoff-multiplier 配置项进行控制的。然而,这种策略存在一个问题,也就是如果曾有过一段时间的失败,会导致后续的重启间隔变得非常长。

      因此,restart-strategy.exponential-delay.reset-backoff-threshold 就派上了用场。如果一个任务在一段时间(例如 “1h”)内没有失败,那么我们可以认为,这个任务已经从之前的错误中恢复过来。那么下一次如果再出现任务失败,我们就可以将backoff重置为初始值,而不需要采取以前因为连续错误而逐渐增加的延迟时间。

举例如下:

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: 1.4
restart-strategy.exponential-delay.reset-backoff-threshold: 10 min
restart-strategy.exponential-delay.jitter-factor: 0.1
restart-strategy.exponential-delay.attempts-before-reset-backoff: 10

默认重启策略

默认情况下,没有开启 checkpoint ,不重启。开启 checkpoint ,默认采用固定延时重启策略。但是默认 1s 重启一次,且会一直尝试重启,没有上限次数。这种频繁无限的默认重启策略是不合理的,可能会导致外部组件雪崩,也会一直占用计算资源。

所以在 1.19版本,默认策略改为指数延迟重启策略。我们强烈推荐 Flink 用户使用指数延迟重启策略,因为使用这个策略时, 作业偶尔异常可以快速重试,作业频繁异常可以避免外部组件发生雪崩。原因如下所示:

  • 所有的重启策略在重启作业时都会延迟一定的时间来避免频繁重试对外部组件的产生较大压力。
  • 除了指数延迟重启策略以外的所有重启策略延迟时间都是固定的。
  • 如果延迟时间设置的过短,当作业短时间内频繁异常时,会频繁重启访问外部组件的主节点,可能导致外部组件发生雪崩。例如:大量的 Flink 作业都在消费 Kafka,当 Kafka 集群出现故障时大量的 Flink 作业都在同一时间频繁重试,很可能导致雪崩。
  • 如果延迟时间设置的过长,当作业偶尔失败时需要等待很久才会重试,从而导致作业可用率降低。
  • 指数延迟重启策略每次重试的延迟时间会指数递增,直到达到最大延迟时间。
  • 延迟时间的初始值较短,所以当作业偶尔失败时,可以快速重试,提升作业可用率。
  • 当作业短时间内频繁失败时,指数延迟重启策略会降低重试的频率,从而避免外部组件雪崩。
  • 除此以外,指数延迟重启策略的延迟时间支持抖动因子 (jitter-factor) 的配置项。
  • 抖动因子会为每次的延迟时间加减一个随机值。
  • 即使多个作业使用指数延迟重启策略且所有的配置参数完全相同,抖动因子也会让这些作业分散在不同的时间重启。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/892468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VUE3 VITE项目在 npm 中,关于 Vue 的常用命令有一些基础命令

如果你正在使用 Vite 构建的 Vue 3 项目,并且想要使用相关的 Vue 和 Vite 工具,下面是一些常用的命令和步骤来创建和管理 Vue 项目。 1. 使用 npm create 创建 Vue 3 项目(Vite) 如果你还没有创建项目,可以使用以下命…

微服务电商平台课程七:前端框架vue

后台商城: https://github.com/macrozheng/mall-admin-web 前台商城:https://github.com/macrozheng/mall-app-web Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编…

【Uniapp-Vue3】v-for列表渲染的用法

如果我们想要重复渲染多个元素,就可以使用v-for进行渲染。 比如我们想要将元素渲染5次: 如果我们想要知道当前元素是渲染的第几个,可以在v-for的时候添加参数index,并在差值表达式中填入index: 则index会以0开始进行渲…

《新闻大厦抢先版》V0.18.105+Dlcs官方学习版

《新闻大厦抢先版》官方版https://pan.xunlei.com/s/VODaeUn3v-ZWVvvmUMfo5AqWA1?pwdnhpz# 建造并不断优化新闻大楼,保障员工权益并及时赶上周日的印刷交期! 招募并管理不同职业以登上成功的阶梯:记者、摄像师、勤杂工,除此以外…

解锁3D模型转换:STL转OBJ全攻略

一、3D模型转换的基石:STL与OBJ格式概览 在3D模型的世界里,STL和OBJ格式犹如两大基石,支撑着模型创建、编辑、转换与应用的方方面面。了解它们的特性,是深入探究3D模型转换的关键第一步。 1.1 STL格式深度剖析 STL 全称为Stereo…

OpenAI的对话和图像API简单体验

OpenAI的对话和图像API简单体验 前言OpenAI API 对话和图像接口PythonJavaScript Azure OpenAI API 对话和图像接口PythonJavaScript 总结 前言 JS 和 Python 是比较受欢迎的两个调用 OpenAI 对话 API 的两个库, 这里 简单记录这两个库对 OpenAI 的对话(Chat)和图像(Image)的使…

RK3568 Android 13 内置搜狗输入法小计

问:为什么写? 答:网上搜出来的都试过了,不行!下面直接上代码和注意事项! 首先到这个目录(/RK3568/Rockchip_Android13_SDK_Release/device/rockchip/rk356x/tl3568_evm/preinstall&#xff09…

windows10下安装Microsoft SQL Server 2016

一、下载安装包 网站:MSDN, 我告诉你 - 做一个安静的工具站 选择需要的版本,点击详细信息,复制ed2k链接,打开eMule或迅雷,新建下载,粘贴链接,开始下载。 下载好的文件是一个.iso镜像文件。 二、…

探索图像编辑的无限可能——Adobe Photoshop全解析

文章目录 前言一、PS的历史二、PS的应用场景三、PS的功能及工具用法四、图层的概念五、调整与滤镜六、创建蒙版七、绘制形状与路径八、实战练习结语 前言 在当今数字化的世界里,视觉内容无处不在,而创建和编辑这些内容的能力已经成为许多行业的核心技能…

IDEA Maven构建时报错:无效的目标发行版17

报错分析 报错原因:Maven 构建时,Java 版本配置不匹配 我安装的JDK版本是1.8,但由于种种原因,Maven构建时指定了 Java 17 作为目标发行版,从而导致错误 解决方案 首先,java -version,查看环…

React前端框架:构建现代Web应用的强大工具

在现代Web开发中,前端框架的使用已成为构建高效、可维护的应用程序的标准实践。React作为一种流行的前端框架,凭借其简洁、高效、灵活的特点,已成为许多开发者的首选。本文将介绍React框架的基本概念、核心特点以及如何使用它构建Web应用。 …

西电-神经网络基础与应用-复习笔记

此为24年秋研究生课程复习笔记 导论 神经网络的研究方法分为 连接主义,生理学派,模拟神经计算。高度的并行、分布性,很强的鲁棒和容错性。便于实现人脑的感知功能(音频图像的识别和处理)。符号主义,心理学派,基于符号…

学习flv.js

前言 flv.js一款使用纯 JavaScript 编写的 HTML5 Flash 视频 (FLV) 播放器,无需 Flash!!!flv.js 的工作原理是将 FLV 文件流转换为 ISO BMFF(碎片 MP4)片段,然后通过Media Source Extensions&l…

Gitlab-Runner配置

原理 Gitlab-Runner是一个非常强大的CI/CD工具。它可以帮助我们自动化执行各种任务,如构建、测试和部署等。Gitlab-Runner和Gitlab通过API通信,接收作业并提交到执行队列,Gitlab-Runner从队列中获取作业,并允许在不同环境下进行作…

LLM 智能视频字幕助手,支持生成、断句、优化、翻译、视频合成全流程

卡卡字幕助手(VideoCaptioner)是一款功能强大的视频字幕配制软件。操作简单且无需高配置,利用大语言模型进行字幕智能断句、校正、优化、翻译,一键为视频配上效果惊艳的字幕。 🎯 可使用强大的语音识别引擎&#xff0c…

HTML实战课堂之启动动画弹窗

一:代码片段讲解 小提示:下面是一个包含启动页和弹窗的完整示例。这个示例包括一个简单的启动页和一个弹窗,当用户点击启动页上的按钮时,会显示弹窗。 1. **HTML结构**: - #startPage:启动页,包…

GitLab本地服务器配置ssh和克隆项目

1. 本地安装好git git链接:https://git-scm.com/downloads/win 无脑点击下一步安装即可,打开Git Bash命令终端如下: 2. 配置本地用户名和邮箱 git config --global user.name "你的名字" git config --global user.email "你的邮箱&quo…

Unity热更新 之 Addressables(2) 本地/远端打包 流程测试

基础篇:Unity热更新 之 Addressables(1) 资源基础加载-CSDN博客 基础方法来源于唐老狮,我也是初学热更这一块,所有不保证步骤完全正确,如有不足还请斧正 目录 0.前提 1.本地打包 1.1.资源放入包 1.2.简化路径名称给出标签(如有需要的话) …

HDFS架构原理

一、HDFS架构整体概述 HDFS是Hadoop Distribute File System 的简称,意为:Hadoop分布式文件系统。HDFS是Hadoop核心组件之一,作为大数据生态圈最底层的分布式存储服务而存在。HDFS解决的问题就是大数据如何存储,它是横跨在多台计算机上的文件…

图像处理|腐蚀操作

在计算机视觉与图像处理中,腐蚀操作(Erosion)是形态学操作的一种。形态学操作广泛应用于二值图像中,主要用于分析和提取图像中的结构信息。腐蚀操作是这类操作中最常见的一种,用来对图像进行“收缩”处理,消…