【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.rhkb.cn/news/178026.html

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

相关文章

【pdf密码】PDF没有密码,为什么不能编辑?

打开PDF文件的时候,没有提示带有密码,但是打开文件之后发现没有办法编辑PDF文件,这个是因为PDF文件设置了限制编辑,我们需要将限制取消才能够编辑文件。 那么,我们应该如何取消密码,编辑文件呢&#xff1f…

如何在校园跑腿系统小程序中构建稳健的订单处理与分配系统?

1. 数据库设计 首先,设计订单数据结构。使用数据库(例如MySQL、MongoDB等),创建订单表以存储订单相关信息,包括订单ID、用户信息、交付地址、订单状态等。 CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMAR…

02【保姆级】-GO语言开发注意事项(特色重点)

02【保姆级】-GO语言开发注意事项(特色重点) 一、Go语言的特性1.1 第一个hello word(详解)1.2 开发编译。(重要点 / 面试题)1.3 开发注意事项1.4 GO语言的转义字符1.5 注释1.6 API 文档 之前我学过C、Java、…

Nginx代理转发请求POST变GET请求问题

🚀 注重版权,转载请注明原作者和原文链接 🥭 作者:Yuan-Programmer 🍎 个人博客:https://boke.open-yuan.com 🍉 已经替换了新的域名,总站叫做:OpenYuan开袁网&#xff0…

EASYX实现多物体运动

eg1:单个物体运动使用easyx实现单个小球的运动 #include <stdio.h> #include <easyx.h> #include <iostream> #include <math.h> #include <stdlib.h> #include <conio.h> #include <time.h> #define PI 3.14 #define NODE_WIDTH 4…

设计融合_ c#

单例模式 using System; namespace DesignIntegration{ public class TimeManager{ private static TimeManager _instance; private static readonly Object locker new Object(); private TimeManager() { } public static TimeManager…

手机app 爬虫

近期在做某个项目,涉及到需要对手机app的进行数据爬取。在上一篇博文中,讲述了以模拟机为例的配置操作流程,这里将以苹果手机为例进行描述。 下面将讲述具体配置步骤 1、安装 抓包软件 fiddler (Fiddler | Web Debugging Proxy and Troubleshooting Solutions) ​ 下载后…

【Java】AI+智慧工地云平台源码(SaaS模式)

伴随着科学技术的不断发展&#xff0c;信息化手段、移动技术、智能穿戴及工具在工程施工阶段的应用不断提升&#xff0c;智慧工地概念应运而生&#xff0c;庞大的建设规模催生着智慧工地的探索和研发。 一、带你认识智慧工地 伴随着技术的不断发展&#xff0c;信息化手段、移动…

GZ035 5G组网与运维赛题第10套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项&#xff08;高职组&#xff09; 赛题第10套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通&#xff08;35分&#xff09; 子任务1&#xff1a;5G公共网络部署与调试&#xff08;15分&#xff09; 子…

win10-mmgen安装/cyclegan运行问题记录

mmconda环境&#xff1a; conda&#xff1a; CUDA 11.3 conda install pytorch1.11.0 torchvision0.12.0 torchaudio0.11.0 cudatoolkit11.3 -c pytorch pip install mmcv-full1.5.0 -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.11.0/index.html 成功运行 c…

日常踩坑-[sass]Error: Expected newline

在学习sass的时候&#xff0c;运行时发现报错 经过网上冲浪知道&#xff0c;原来在声明语言的时候 lang 不能声明为 sass &#xff0c;而是 scss ,这就有点坑了 原因&#xff1a; scss是sass3引入进来的&#xff0c;scss语法有"{}“,”;"而sass没有&#xff0c;所以…

OSPF高级特性2(特殊区域,聚合)

目录 一、特殊区域 1、STUB区域&#xff1a; 2、totally stub区域 3、NSSA区域&#xff08;Not-So-stubby Area&#xff09; 4、totally NSSA区域 二、OSPF路由聚合 一、特殊区域 定义&#xff1a;特殊区域是指人为定义的一些区域&#xff0c;它们在逻辑中一般位于ospf区…

kubeadm部署kubernetes1.28

k8s在1.24版本以后删除了内置dockershim插件&#xff0c;原生不再支持docker运行时&#xff0c;需要使用第三方cri接口cri-docker https://github.com/Mirantis/cri-dockerd.git 安装前&#xff0c;需要先升级systemd和主机内核&#xff0c;本操作文档安装的是最新的版本kube…

前端埋点方式

前言&#xff1a; 想要了解用户在系统中所做的操作&#xff0c;从而得出用户在本系统中最常用的模块、在系统中停留的时间。对于了解用户的行为、分析用户的需求有很大的帮助&#xff0c;想实现这种需求可以通过前端埋点的方式。 埋点方式&#xff1a; 1.什么是埋点&#xff1f…

梯度下降|笔记

1.梯度下降法的原理 1.1确定一个小目标&#xff1a;预测函数 机器学习中一个常见的任务是通过学习算法&#xff0c;自动发现数据背后的规律&#xff0c;不断改进模型&#xff0c;做出预测。 上图的坐标系&#xff0c;横轴表示房子面积&#xff0c;纵轴表示房价&#xff0c;图…

对比解析php和go对JSON处理的区别

一、go 转化php数组代码 php程序 $str <<<EOF {"操作源":"任意","数据库":"任意","语句类型":"CREATE DATABASE&#xff1b;DROP DATABASE&#xff1b;ALTER DATABASE","影响行数":"不…

能力惊艳!DingoDB多模向量数据库完成首批向量数据库产品测试

近日&#xff0c;中国信息通信研究院&#xff08;简称“中国信通院”&#xff09;正式开展“可信数据库”首批向量数据库产品测试&#xff0c;作为向量数据库领域创新与应用的代表企业&#xff0c;九章云极DataCanvas公司自主研发的DingoDB多模向量数据库参与并顺利完成本次测评…

目标检测与图像识别分类的区别?

目标检测与图像识别分类的区别 目标检测和图像识别分类是计算机视觉领域中两个重要的任务&#xff0c;它们在处理图像数据时有一些区别。 目标检测是指在图像中定位和识别多个目标的过程。其主要目标是确定图像中每个目标的边界框位置以及对应的类别标签。目标检测任务通常涉…

串口通信(6)应用定时器中断+串口中断实现接收一串数据

本文为博主 日月同辉&#xff0c;与我共生&#xff0c;csdn原创首发。希望看完后能对你有所帮助&#xff0c;不足之处请指正&#xff01;一起交流学习&#xff0c;共同进步&#xff01; > 发布人&#xff1a;日月同辉,与我共生_单片机-CSDN博客 > 欢迎你为独创博主日月同…