【flink】Task 故障恢复详解以及各重启策略适用场景说明

文章目录

  • 一. 重启策略种类(Restart Strategies)
    • 1. Fixed Delay Restart Strategy
    • 2. Failure Rate Restart Strategy
    • 3. Fallback Restart Strategy
    • 4. No Restart Strategy
  • 二. 故障恢复策略(Failover Strategies)
    • 1. (全图恢复策略)Restart All Failover Strategy
    • 2. (基于region局部恢复策略)Restart Pipelined Region Failover Strategy
  • 三. 各重启策略的适用场景
    • 1. 失败率重启策略适用场景
      • 1.1. 流式数据处理应用程序:
      • 1.2. 应用程序容忍性要求较低
      • 1.3. 需要自适应容错性的任务
      • 1.4. 可配置性
    • 2. 固定延迟重启策略适用场景
      • 2.1. 失败要求较为严格的任务
      • 2.2. 任务执行时间可控(比如离线任务)
    • 3. 无策略使用场景

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

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

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

 

一. 重启策略种类(Restart Strategies)

参数 restart-strategy 定义了采取何种策略。

  • 如果没有启用 checkpoint,就采用“不重启”策略。
  • 如果启用了 checkpoint 且没有配置重启策略,那么就采用固定延时重启策略, 此时最大尝试重启次数由 Integer.MAX_VALUE 参数设置。

restart-strategy的种类

  • none:没有重启策略 ,为默认策略
  • fixed-delay:固定尝试次数重启策略
  • failure-rate:失败率跟踪重启策略:这个策略会根据作业或任务的失败率以指数级递增的方式来计算重启的等待时间。
  • exponential-delay:失败率跟踪重启策略,这个策略会根据作业或任务的失败率以指数级递增的方式来计算重启的等待时间。

 

可以通过 Flink 的配置文件 flink-conf.yaml 来设置默认的重启策略。
也可以通过编程语言动态的设置,这里使用java语法

例子:设置固定延时重启策略。

//如果发生故障,系统会重启作业 3 次,每两次连续的重启尝试之间等待 10 秒钟。
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3, // 尝试重启的次数Time.of(10, TimeUnit.SECONDS) // 延时
));

 

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

java

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3, // 尝试重启的次数Time.of(10, TimeUnit.SECONDS) // 延时
));

 

2. Failure Rate Restart Strategy

故障率重启策略

在故障发生之后重启作业,在两个连续的重启尝试之间等待固定的时间,当故障率(每个时间间隔发生故障的次数,也就说这个任务可以有多个这样的时间间隔)超过设定的限制时,作业最终会失败。

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

# 失败率说明:五分钟内发生了超过三次故障,作业就失败。其中每次重试间隔为10秒
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

 

3. Fallback Restart Strategy

使用群集定义的重启策略。 这对于启用了 checkpoint 的流处理程序很有帮助。 如果没有定义其他重启策略,默认选择固定延时重启策略。
ing

 

4. No Restart Strategy

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

restart-strategy: none

程序中设置

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

 
 

二. 故障恢复策略(Failover Strategies)

支持两种故障恢复策略:
在这里插入图片描述

1. (全图恢复策略)Restart All Failover Strategy

在全图重启故障恢复策略下,Task 发生故障时会重启作业中的所有 Task 进行故障恢复。

 

2. (基于region局部恢复策略)Restart Pipelined Region Failover Strategy

该策略会将作业中的所有 Task 划分为数个 Region。当有 Task 发生故障时,它会尝试找出进行故障恢复需要重启的最小 Region 集合

相比于全局重启故障恢复策略,这种策略在一些场景下的故障恢复需要重启的 Task 会更少。

此处 Region 指以 Pipelined 形式进行数据交换的 Task 集合。(ing)

  • DataStream 和 流式 Table/SQL 作业的所有数据交换都是 Pipelined 形式的。
  • 批处理式 Table/SQL 作业的所有数据交换默认都是 Batch 形式的。
  • DataSet 作业中的数据交换形式会根据 ExecutionConfig 中配置的 ExecutionMode 决定。

需要重启的 Region 的判断逻辑如下:

  • 出错 Task 所在 Region 需要重启。
  • 如果要重启的 Region 需要消费的数据有部分无法访问(丢失或损坏),产出该部分数据的 Region 也需要重启。
  • 需要重启的 Region 的下游 Region 也需要重启。这是出于保障数据一致性的考虑,因为一些非确定性的计算或者分发会导致同一个 Result Partition 每次产生时包含的数据都不相同。

 

三. 各重启策略的适用场景

1. 失败率重启策略适用场景

1.1. 流式数据处理应用程序:

流式任务的数据源可能不稳定,这里指发生的时间不稳定,任务可能会由于输入数据的异常负载波动而失败。当情况发生时,需要允许故障的发生,且在需要(可能发生多次)的时候进行有限次的重试,以保证任务运行的连续性。

失败率重启策略允许在一定时间窗口内容忍一定的任务失败,同时限制了过于频繁的重启,有助于稳定应用程序的运行。

 

1.2. 应用程序容忍性要求较低

在某些情况下,容忍任务失败可能不是首要任务,而是为了确保整个作业继续运行。Failure Rate 重启策略可以用于实现一定程度的容错,同时不会过于频繁地中断整个作业。

比如做大屏展示,要求每5分钟展示某些指标的聚合情况,这种任务有几个窗口的数据丢失影响不大,重点是持续运行。

 

1.3. 需要自适应容错性的任务

Failure Rate 重启策略还可以用于实现自适应容错性。当系统负载增加时,可能会增加失败率。通过动态调整失败率阈值,可以使系统在负载较高时更宽容,降低重启频率,从而提高整体性能。

 

1.4. 可配置性

Failure Rate 重启策略具有很高的可配置性,你可以根据具体应用程序和环境进行调整和配置,以确保达到期望的容错行为。

比如实时任务中的窗口聚合,可以根据窗口大小去设置失败率阈值、时间窗口和最大重试次数等参数,以满足应用程序的需求。

 

2. 固定延迟重启策略适用场景

2.1. 失败要求较为严格的任务

 

2.2. 任务执行时间可控(比如离线任务)

如果你的任务的执行时间相对较短且可预测,那么固定延迟重启策略更容易实现,因为你可以合理地估计任务需要的时间,以确定重启的延迟。

 

3. 无策略使用场景

适用于那些对于任何任务失败都不允许的应用程序。

 
参考:
Task 故障恢复

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

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

相关文章

手机平板摄像头如何给电脑用来开视频会议

环境: Iriun Webcam EV虚拟摄像头 钉钉会议 问题描述: 手机平板摄像头如何给电脑用来开视频会议 解决方案: 1.下载软件 手机端和电脑端都下载这个软件,连接同一局域网打开软件连接好 另外一款软件Iriun 也是一样操作 2.打…

【C++ 系列文章 -- 程序员考试 201811 下午场 C++ 专题 】

1.1 C 题目六 阅读下列说明和C代码,填写程序中的空(1) ~(5),将解答写入答题纸的对应栏内。 【说明】 以下C代码实现一个简单乐器系统,音乐类(Music)可以使用…

Elasticsearch 8.X 如何生成 TB 级的测试数据 ?

1、实战问题 我只想插入大量的测试数据,不是想测试性能,有没有自动办法生成TB级别的测试数据?有工具?还是说有测试数据集之类的东西?——问题来源于 Elasticsearch 中文社区https://elasticsearch.cn/question/13129 2…

VSCode 设置平滑光标

1.点击左下角的设置按钮,再点击设置 2.点击文本编辑器,点击光标,勾选控制是否启用平滑插入动画。 3.随便打开一个文件,上下左右移动光标时,会发现非常的流畅。 原创作者:吴小糖 创作时间:2023…

STM32:AHT20温湿度传感器驱动程序开发

注:温湿度传感器AHT20数据手册.pdf http://www.aosong.com/userfiles/files/AHT20%E4%BA%A7%E5%93%81%E8%A7%84%E6%A0%BC%E4%B9%A6(%E4%B8%AD%E6%96%87%E7%89%88)%20B1.pdf 一、分析AHT数据手册文档 (1).准备工作 1.新建工程。配置UART2 2.配置I2C1为I2C标准模式&…

Docker dnmp 多版本php安装 php8.2

Laravel9 开发需要用到php8.1以上的版本,而dnmp只支持到php8.0。安装php8.2的步骤如下: 1. 从/services/php80目录复制一份出来,重命名为php82,extensions目录只保留 install.sh 和 install-php-extensions 这两个文件 2. 修改.en…

234. 回文链表、Leetcode的Python实现

博客主页:🏆看看是李XX还是李歘歘 🏆 🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺 💗点关注不迷路,总有一些📖知识点📖是你想要的💗 ⛽️今…

接口测试 —— Jmeter读取数据库数据作测试参数

1、添加Jdbc Request 2、添加ForEach控制器(右键线程组->逻辑控制器->ForEach控制器) ①输入变量的前缀:mobilephone; 从jdbc request设置的变量得知,我们要取的值为mobilephone_1、mobilephone_2、mobilephone_3......所以这里输入m…

CSS3中的字体和文本样式

CSS3优化了CSS 2.1的字体和文本属性,同时新增了各种文字特效,使网页文字更具表现力和感染力,丰富了网页设计效果,如自定义字体类型、更多的色彩模式、文本阴影、生态生成内容、各种特殊值、函数等。 1、字体样式 字体样式包括类…

在前端实现小铃铛上展示消息

点击铃铛显示如下消息框&#xff1a; 如果点击消息&#xff0c;可以实现消息从列表中移除,并从铃铛总数上进行扣减对应的已读消息数。 关于以上功能的实现方式&#xff1a; <!-- 铃铛位置 --><i class"el-icon-bell" click"showPopover true"&…

Jenkins中解决下载maven包巨慢的问题

背景介绍 我们在使用jenkins构建maven项目时由于依赖很多第三方jar包&#xff0c;默认会从maven中央仓库下载&#xff0c;由于maven中央仓库服务器是国外的&#xff0c;所以下载很慢&#xff0c;甚至会超时 解决办法 增加jenkins maven 源配置 如下图所示&#xff0c;增加m…

Nacos本地修改编译源码2.2.3

下载Nacos源码 由于github访问速度慢&#xff0c;所以在gitee上下载 git clone https://gitee.com/mirrors/Nacos.git切换2.2.3版本 git checkout 2.2.3或者直接下载2.2.3的源码 本地编译 源码导入idea&#xff0c;然后编译 mvn -Dmaven.test.skiptrue -Drat.skiptrue c…