当前位置: 首页 > news >正文

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) 的配置项。
  • 抖动因子会为每次的延迟时间加减一个随机值。
  • 即使多个作业使用指数延迟重启策略且所有的配置参数完全相同,抖动因子也会让这些作业分散在不同的时间重启。

相关文章:

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

Flink概念知识讲解之:Restart重启策略配置 当 Task 发生故障时,Flink 需要重启出错的 Task 以及其他受到影响的 Task ,以使得作业恢复到正常执行状态。 Flink 通过重启策略和故障恢复策略来控制 Task 重启:重启策略决定是否可以…...

[java基础-集合篇]LinkedList源码粗析

LinkedList 的数据结构 实现List、Deque 接口,基于 双向链表实现的列表。与基于数组的 ArrayList 不同,基于链表的LinkedList 允许在列表的任何位置快速地插入和删除元素。 Java中LinkedList实现了Deque,它提供了 add, offer, remove, poll, …...

面试:C++类成员初始化顺序

1、非静态数据成员:按它们在类定义的声明顺序初始化,不会按它们在初始化列表的顺序。 2、静态数据成员:在main函数启动之前,并且只初始化一次 3、基类构造函数:如果类从一个或多个基类继承而来,基类的构造…...

【Python】Python与C的区别

文章目录 语句结束符代码块表示变量声明函数定义注释格式Python的标识符数据输入input()函数数据输出print()函数 语句结束符 C 语言 C 语言中每条语句必须以分号;结束。例如,int a 10;、printf("Hello, World!");。分号是语句的一部分,用于…...

[开源]自动化定位建图系统(视频)

系统状态机: 效果展示: 1、 机器人建图定位系统-基础重定位,定位功能演示 2、 机器人建图定位系统-增量地图构建,手动回环检测演示 3、… 开源链接: https://gitee.com/li-wenhao-lwh/lifelong-backend Qt人机交互…...

ISP流程--去马赛克详解

前言 本期我们将深入讨论ISP流程中的去马赛克处理。我们熟知,彩色图像由一个个像元组成,每个像元又由红、绿、蓝(RGB)三通道构成。而相机传感器只能感知光的强度,无法直接感知光谱信息,即只有亮暗而没有颜色…...

Objective-C语言的软件工程

Objective-C语言的软件工程探讨 引言 在软件工程的领域中,编程语言的选择是至关重要的。Objective-C,作为一种为苹果公司的macOS和iOS操作系统而开发的编程语言,凭借其灵活性和强大的功能被广泛应用于应用开发。然而,随着Swift等…...

Objective-C语言的语法糖

Objective-C语言的语法糖探秘 在编程语言的发展历程中,语法糖(Syntactic Sugar)是一个颇具趣味性和重要性的概念。它让编程的表达更加简洁直观,同时提高了代码的可读性和可维护性。Objective-C 作为一种面向对象的编程语言&#…...

设计模式中的代理模式

在Java中,代理模式(Proxy Pattern)可以通过静态代理和动态代理两种主要方式实现。 一、静态代理模式 在编译时就已经确定了代理类和被代理类的关系。 代理类和目标对象通常实现相同的接口或继承相同父类。 缺点是对于每个需要代理的目标对象…...

15个学习Python 的编程游戏网站

从小很多人都会在想,那些枯燥的教学课程要是全部变成游戏就好了,这样的话那期末成绩不得立即起飞了嘛?那对于编程很多人也有这样的想法,边玩边学就好了 这不已经有很多程序员开发了多款边玩边学的编程游戏供大家使用,…...

微信小程序实现拖拽盒子效果

要实现一个当前盒子高度由里面的盒子进行支配高度拖拽的效果 // wxml<view class"exmation-item" wx:elif"{{type4}}"> <view class"exmation-item-drag-box" id"drag-box"> <!-- 内容 --><view class"exm…...

Linux-蓝牙协议

SPP (Serial Port Profile): 串口协议&#xff08;SPP&#xff09;是一个蓝牙配置文件&#xff0c;允许设备通过蓝牙模拟传统的串行端口通信。它通常用于无线串口连接&#xff0c;允许设备如计算机和外设&#xff08;例如打印机或条形码扫描器&#xff09;之间进行数据传输。A…...

moviepy 将mp4视频文件提取音频mp3 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…...

imageio 图片转mp4 保存mp4

目录 安装&#xff1a; imageio 图片转mp4 numpy 保存mp4 安装&#xff1a; FFMPEG: pip install imageio[ffmpeg] pyav: pip install imageio[pyav] imageio 图片转mp4 import glob import osimport cv2 import imageio from natsort import natsortedfrom PIL import …...

Postman接口测试04|批量运行测试用例、参数化、Mock Server、Cookie鉴权、Newman生成测试报告

目录 十一、Postman批量运行测试用例 十二、实现数据驱动&#xff08;也称参数化&#xff09; 1、csv文件 1️⃣编辑csv文件 2️⃣更新参数的值 3️⃣修改测试脚本和断言 5️⃣批量运行测试用例 2、Json文件 1️⃣编辑Json文件 2️⃣其他操作和处理csv文件相同 十三、…...

学技术学英语:http状态码 401 Unauthorized vs 403 Forbidden

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#xff1a;先看关键单词&#xff0c;再看英文&#xff0c;最后看中文总结&#xff0c;再回头看一遍英文原文&#xff0c;效果更佳&#xff01;&#xff01; 关键词 unauthorized未授权的/ˌʌnˈɔːθəraɪzd/authentication认证/…...

@LocalBuilder装饰器: 维持组件父子关系

一、前言 当开发者使用Builder做引用数据传递时&#xff0c;会考虑组件的父子关系&#xff0c;使用了bind(this)之后&#xff0c;组件的父子关系和状态管理的父子关系并不一致。为了解决组件的父子关系和状态管理的父子关系保持一致的问题&#xff0c;引入LocalBuilder装饰器。…...

React(二)——Admin主页/Orders页面/Category页面

文章目录 项目地址一、侧边栏1.1 具体实现 二、Header2.1 实现 三、Orders页面3.1 分页和搜索3.2 点击箭头显示商家所有订单3.3 页码按钮以及分页 四、Category页面4.1 左侧商品添加栏目4.2 右侧商品上传栏 五、Sellers页面六、Payment Request 页面&#xff08;百万数据加载&a…...

移动端屏幕分辨率rem,less

谷歌模拟器&#xff1a;能直接看到移动端效果 屏幕分辨率 右键电脑桌面 &#xff0c;点击显示设置 PC端是逻辑分辨率&#xff0c;移动端代码也是参考逻辑分辨率 网页端宽度和逻辑分辨率尺寸相同 手机屏幕尺寸不同&#xff0c;网页宽度均为 100% 所以就需要添加视口标签&#x…...

Docker Desktop 构建java8基础镜像jdk安装配置失效解决

Docker Desktop 构建java8基础镜像jdk安装配置失效解决 文章目录 1.问题2.解决方法3.总结 1.问题 之前的好几篇文章中分享了在Linux(centOs上)和windows10上使用docker和docker Desktop环境构建java8的最小jre基础镜像&#xff0c;前几天我使用Docker Desktop环境重新构建了一个…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...