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

【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 故障恢复

相关文章:

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

文章目录 一. 重启策略种类(Restart Strategies)1. Fixed Delay Restart Strategy2. Failure Rate Restart Strategy3. Fallback Restart Strategy4. No Restart Strategy 二. 故障恢复策略(Failover Strategies)1. (全…...

一个计算机高手的成长3

这是转在茶余的帖子。文中绝大部分技术术语我不懂,所以无资格评论他的技术价值。但文章强烈的逻辑说服力,和通篇流露的进取精神,使我觉得这是篇有价值的帖子,至少值得一读。 就像我开始从MIS转到通信一样,我看过大量通…...

2023应届生能力考试含解析(Java后端开发)——(1)

1.以下代码的循环次数是 ( ) public class Test {public static void main(String[] args) {int i 7;do {System.out.println(--i);--i;} while (i ! 0);System.out.println(i);} } A 0 B 1 C 7 D 无限次 这段代码会导致无限循环的原因是在 do-while 循环中&#…...

Ansible中的任务执行控制

循环 简单循环 {{item}} 迭代变量名称 loop: - value1 - value2 - ... //赋值列表{{item}} //迭代变量名称循环散列或字典列表 - name: create filehosts: host1tasks:- name: file moudleservice:name: "{{ item.name }}"state: "{{…...

利用maven的dependency插件分析工程的依赖

dependency:analyze https://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html 分析项目的依赖,确定哪些:用了并且声明了、用了但没有声明、没有使用但声明了。 dependency:analyze可以单独使用,所以它总是会执行test-…...

【广州华锐互动】VR野外求生技能学习,让你感受真实的冒险之旅!

随着科技的迅速发展,虚拟现实(VR)技术为人们提供了一个全新的、身临其境的探险体验。通过将用户带入一个仿真的、沉浸式的虚拟环境,VR互动体验让人们在安全的氛围中感受到野外探险的乐趣。本文将从视觉呈现、沉浸式体验、交互性和应用范围四个方面&#…...

k8s、调度约束

Kubernetes 是通过 List-Watch **** 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦 用户是通过 kubectl 根据配置文件,向 APIServer 发送命令,在 Node 节点上面建立 Pod 和 Container。 APIS…...

Redis的介绍,以及Redis的安装(本机windows版,虚拟机Linux版)和Redis常用命令的介绍

目录 一. Redis简介 二. Redis的安装 2.1 Linux版安装 2.2 windows版安装 三. Redis的常用命令 一. Redis简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。 它…...

电子器件 MOS管的参数、选型与使用技巧

一、电路符号 MOS管分为 G(栅极)、S(源极)、D(漏极) 三极,在图中 S 极有两条线,D 极只有一条线。 1.1 NMOS 和 PMOS 下图中,左侧是 PMOS,右侧是 NMOS。箭头…...

EtherCAT主站SOEM -- 2 -- SOEM之ethercatbase.h/c文件解析

EtherCAT主站SOEM -- 2 -- SOEM之ethercatbase.h/c文件解析 一 ethercatbase.h/c文件功能预览:二 ethercatbase.h/c 文件的主要函数的作用:2.1 ecx_writedatagramdata:2.2 ecx_setupdatagram:2.3 ecx_adddatagram:2.4 …...

Spring集成高性能队列Disruptor

Disruptor简介 Disruptor(中文翻译为“破坏者”或“颠覆者”)是一种高性能、低延迟的并发编程框架,最初由LMAX Exchange开发。它的主要目标是解决在金融交易系统等需要高吞吐量和低延迟的应用中的并发问题。 Disruptor特点 无锁并发&#x…...

C++——类和对象(中)完结

赋值运算符重载 运算符重载 C 为了增强代码的可读性引入了运算符重载 , 运算符重载是具有特殊函数名的函数 ,也具有其 返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。 函数名字为:关键…...

Sqoop的安装和使用

目录 一.安装 二.导入 1.全量导入 一.MySQL导入HDFS 二.MySQL导入Hive 2.增量导入 一.过滤导入hdfs/hive 二.导出 一.安装 1.下载地址:sqoop下载地址 2.解压 tar -zxvf ./sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C ../module/ 3.改名和配置归属权限 #改名…...

java毕业设计基于springboot+vue的村委会管理系统

项目介绍 采用JAVA语言,结合SpringBoot框架与Vue框架以及MYSQL数据库设计并实现的。本村委会管理系统主要包括个人中心、村民管理、村委会管理、村民信息管理、土地变更管理、农业补贴管理、党员信息管理等多个模块。它帮助村委会管理实现了信息化、网络化&#xf…...

【C++】多态 ⑪ ( 纯虚函数和抽象类 | 纯虚函数语法 | 抽象类和实现 | 代码示例 )

文章目录 一、纯虚函数和抽象类1、纯虚函数2、纯虚函数语法3、抽象类和实现 二、完整代码示例 一、纯虚函数和抽象类 1、纯虚函数 纯虚函数 : 在 C 语言中 , " 纯虚函数 " 是 特殊类型的 虚函数 , " 纯虚函数 " 在 父类 中 声明 , 但是没有实现 ; 抽象类 …...

node 第十四天 基于express的第三方中间件multer node后端处理用户上传文件

Multer 是一个 node.js 中间件,用于处理multipart/form-data 类型的表单数据,它主要用于上传文件。它是写在 busboy 之上的所以非常高效。前面我们已经知道了怎样利用express提供的静态资源处理中间件express.static()处理用户请求静态资源文件(图片, js…...

KnowledgeGPT:利用检索和存储访问知识库上增强大型语言模型10.30

利用检索和存储访问知识库上增强大型语言模型 摘要引言2 相关研究3方法3.1 任务定义3.2 知识检索3.2.1 代码实现3.2.2 实体链接3.2.3 获取实体信息3.2.4 查找实体或值3.2.5 查找关系 3.3 知识存储 4 实验4.1 实验设置4.2 流行知识库上的查询4.3 基于知识的问题回答 摘要 大型语…...

Angular material Chips Autocomplete

Chips Autocomplete 官网的例子我没法正常使用,无法实现搜索 我的select是个通用组件,现在贴代码: component.ts import {Component,ElementRef,forwardRef,Input,OnChanges,OnDestroy,OnInit,SimpleChanges,ViewChild, } from angular/co…...

『亚马逊云科技产品测评』活动征文|搭建基础运维环境

授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 目录 1、什么是容器化部署 2、连接到控制台 3、安装docker 3.1 更新…...

双指针扫描

import os import sys# 请在此输入您的代码 sinput() Alist(s) nlen(A) t1 for i in range(n//2):if A[i]!A[n-1-i]:t0break if t1:print(Y) else:print(N)n,smap(int,input().split()) alist(map(int,input().split())) #尺取法,变O(n*n)为O(n) #维护一个最短的区间…...

uniapp小程序九宫格抽奖

定义好奖品下标,计时器开始抽奖,请求接口,出现中奖奖品之后,获取中奖商品对应的奖品下标,再次计时器判断当前移动的小标是否为中奖商品的下标,并且是否转到3圈(防止转1圈就停止)&…...

mysql树状结构查询及注意事项

一、说明 由于Mysql不像oracle一样支持树状查询,需要用户自行处理,本文记录了一种常见的通过自定义函数的方式进行mysql树状查询的方法,以及使用的注意事项。 二、函数 CREATE DEFINERrootlocalhost FUNCTION get_child_menus(in_pid varc…...

TimeGPT-1——第一个时间序列数据领域的大模型他来了

一直有一个问题:时间序列的基础模型能像自然语言处理那样存在吗?一个预先训练了大量时间序列数据的大型模型,是否有可能在未见过的数据上产生准确的预测?最近刚刚发表的一篇论文,Azul Garza和Max Mergenthaler-Canseco提出的TimeGPT-1,将ll…...

通过Google搜索广告传送的携带木马的PyCharm软件版本

导语 最近,一起新的恶意广告活动被发现,利用被入侵的网站通过Google搜索结果推广虚假版本的PyCharm软件。这个活动利用了动态搜索广告,将广告链接指向被黑客篡改的网页,用户点击链接后下载的并不是PyCharm软件,而是多种…...

网站文章收录因素,别人复制文章排名比你原创的好?

我经常看到有站长抱怨“网站不收录”,“排名不好”,“复制的文章为什么秒收”之类的问题。对于SEO从业者来说,这确实是一个打击,认为搜索引擎不公平。凭什么自己原创不收录,别人复制去了,秒收他的&#xff…...

C#开源的一个能利用Windows通知栏背单词的软件 - ToastFish

前言 今天给大家推荐一个C#开源且免费的能利用Windows通知栏背单词的软件,可以让你在上班、上课等恶劣环境下安全隐蔽地背单词(利用摸鱼时间背单词的软件):ToastFish。 操作系统要求 目前该软件只支持Windows10及以上系统&…...

速拿offer,超全自动化测试面试题+答案汇总,背完还怕拿不到offer?

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、你会封装自动化…...

LeetCode----1415. 长度为 n 的开心字符串中字典序第 k 小的字符串

题目 一个 「开心字符串」定义为: 仅包含小写字母 [‘a’, ‘b’, ‘c’].对所有在 1 到 s.length - 1 之间的 i ,满足 s[i] != s[i + 1] (字符串的下标从 1 开始)。比方说,字符串 “abc”,“ac”,“b” 和 “abcbabcbcb” 都是开心字符串,但是 “aa”,“baa” 和 “a…...

2310C++协程超传服务器

原文 告别异步回调模型,写代码更简单.同样也是跨平台,仅头文件的,包含头文件即可用,来看看它的用法. 基本用法 提供getpost服务 coro_http_server server(1, 9001);server.set_http_handler<GET, POST>("/", [](coro_http_request &req, coro_http_respo…...

【排序算法】 计数排序(非比较排序)详解!了解哈希思想!

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; 算法—排序篇 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言&#x1f324;️计数排序的概念☁️什么是计数排序&#xff1f;☁️计数排序思想⭐绝对…...