Flink Checkpoint 中的Aligned Checkpoint 和 Unaligned Checkpoint

news2024/10/1 9:45:43

文章目录

      • 知识点
        • 反压
        • Checkpoint
        • Barrier
      • Aligned Checkpoint
      • Unaligned Checkpoint
        • 核心思想
        • 实现原理
          • UC同步阶段
          • UC异步阶段

知识点

反压

反压是流式系统中关于处理能力的动态反馈机制,并且是从下游到上游的反馈,一般是在实时数据处理的过程中,上游节点的生产速度大于下游节点的消费速度。在Flink中,反压主要有两个部分:跨TaskManager的反压过程和TaskManager内的反压过程。

https://blog.csdn.net/Stray_Lambs/article/details/120578294

Checkpoint

Flink 借助Checkpoint机制来保证有状态的分布式计算

所谓Checkpoint,就是周期性的进行Snapshot的过程

当算子Failover的时候,通过快照恢复算子的状态,

Flink的Checkpoint是基于Chandy-Lamport(CL)算法改进的

ps:
Spark中Shuffle是划分Stage的边界,每个Shuffle阶段数据会进行分区、排序、聚合、写入磁盘等操作,自然的进行了状态的保存。所以Spark中无复杂的Checkpoint机制。

Barrier

先说明一下barrier这个概念
以一定的间隔被插入到Source节点,经过若干个算子,不断的向下游传递。

当barrier到达算子的时候,触发Snapshot,当前算子的状态保存完毕后,传递到下一个算子。

当一个算子对应多个输入时,也就意味着这个算子会接收到多个barrier,此时为了保证全局一致性,那么就需要对齐多个输入的barrier,这个就是Aligned Checkpoint

Aligned Checkpoint

存在的问题:

  1. 对齐时间长,反压时被完全阻塞。
    原因:每条链路的处理速度是不一样的,barrier对齐需要时间,如果某一条链路有反压,会因为需要对齐这个过程,使得整个链路被阻塞,因为barrier没有对齐,为了保障数据一致性,checkpoint也无法进行,接下来Checkpoint超时失败,重新进行Checkpoint,但是由于反压仍然存在,最终陷入失败–重启–失败的循环

Unaligned Checkpoint

为了解决Aligned Checkpoint中存在的反压严重时Checkpoint失败的问题

提出了Unaligned Checkpoint

核心思想

允许Barrier超越ongoing data(正在进行的数据,在buffer中,还没有进入task的数据,比如下图中蓝色的2、3、4、5),barrier超越了这些数据,那如果算子Failover的话,这些数据不就丢失了,解决的方法是,将这些数据也进行快照,在Failover时重放这部分数据。

barrier1顺利超越ongoing data,进入到task中,算子收到全部task后开始进行snapshot

在这里插入图片描述

实现原理

在这里插入图片描述
假设当前task的上游并行度为3,下游并行度为2,如上图所示,task有3个输入和两个输出,矩形表示buffer中的一条一条数据

Unaligned Checkpoint 这里简称UC

整个UC分为UC同步阶段、UC异步阶段两部分

UC同步阶段

UC开始后,task的3个input-buffer会陆续收到上游发送的barrier,如图所示input-buffer1收到了barrier1,其它的input-buffer还没有收到barrier,当某一个input-buffer接收到barrier时,task会直接开始UC的第一阶段,即UC同步阶段。

这个阶段只需要三个input-buffer中任意一个buffer的barrier进入到task的网络缓冲内存中,task就会直接开始UC,不用等其它的Input-buffer接收到barrier,也不需要处理完input-buffer1接收到barrier1之前的数据。

Flink 网络缓冲区
https://www.jianshu.com/p/cfbb0cf69ae3

UC同步阶段:barrier超越ongoing data
如下图,可以看到barrier超越了input-buffer和output-buffer中的所有数据,到达下游output-buffer的头部,被快速的传递给下游的task,这也解释了为什么在反压情况下UC可以成功
在这里插入图片描述
从task层面来看,barrier可以在task内部实现快速超车
从Job层面来看,如果每一个task内部,barrier都可以快速超车,那么barrier就可以从source task快速的超车到Sink task

为了保证数据一致性,UC同步阶段,task不能处理数据

UC同步阶段的四个主要流程

  1. barrier超车,当算子的某个input-buffer接收到barrier时,超越ongoing data,快速的将其传递到output-buffer的头部,保证其可以快速到达下游算子
  2. buffer引用,对buffer进行引用,这里不进行snapshot,真正的快照在UC异步阶段进行
  3. 调用task的SnapshotState方法
  4. StateBackend同步快照
UC异步阶段

UC同步阶段完成后,task继续处理数据,同时进行UC的第二个阶段,barrier对齐和UC异步阶段。

首先异步阶段要快照同步阶段所有引用的input-buffer和output-buffer以及同步阶段算子内部引用的State

在这里插入图片描述
UC异步阶段其实也有barrier对齐,当task开始UC的时候,很多input-buffer没有接收到barrier,这些input-buffer之前可能还有一些buffer需要快照,例如上图的绿色数据块,所以UC异步阶段要等到所有的input-buffer barrier都到达,且barrier之前的所有buffer都需要快照,这就是UC异步阶段的barrier对齐

这个对齐过程理论上会很快,因为链路中的每一个task,barrier都可以快速的超越所有input-buffer、output-buffer,优先传递barrier到下游task。

异步阶段需要写三部分数据到DFS,分别是UC同步阶段引用的算子内部的State、同步阶段引用的所有input-buffer和output-buffer、以及其它input-buffer barrier之前的buffer

这三部分数据写完之后,task会将结果汇报到TaskManager。

资料:
Flink Unaligned Checkpoint 在 Shopee 的优化和实践

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

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

相关文章

Java POI导出之数据验证

Java POI导出之数据验证 maven 依赖 这里用的是apache.poi, 没有使用EasyExcel <!-- poi依赖--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version></dependency&…

如何运维多集群数据库?58 同城 NebulaGraph Database 运维实践

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SktQW2qn-1676450580889)(https://www-cdn.nebula-graph.com.cn/nebula-website-5.0/images/blogs/58.%20Com%20Inc/58%E5%90%8C%E5%9F%8E_%E7%94%BB%E6%9D%BF%201.jpg)] 图计算业务背景介绍 我们为什…

jsp游戏门户网站系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 游戏门户网站系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql&#xff0c;使…

简单易用的图片缩略图处理库

哈喽&#xff0c;大家好&#xff0c;我是源小北。 最近在工作中&#xff0c;刚好有遇到对图片进行缩放处理的功能。于是&#xff0c;便拿起很久以前使用过的Java原生工具类处理图片&#xff0c;不过在开发过程中也发现了一些问题。 在Java中&#xff0c;原生的处理图片缩略图…

浅聊一下,可中断锁(ReentrantLock)

前言 今天早上上厕所&#xff0c;上的我痔疮犯了&#xff0c;屁股一坐下去就感觉一根针在刺我&#xff0c;得的是外痔&#xff0c;之前还坚持用痔疮膏来着&#xff0c;但是感觉涂药的那个姿势以及位置我实在无法忍受&#xff0c;就把它给断了&#xff0c;到头来还是屁股糟了罪&…

工程监测多通道振弦模拟信号采集仪VTN参数修改

工程监测多通道振弦模拟信号采集仪VTN参数修改 1 使用按键修改参数 使用按键修改某个参数的方法如下&#xff1a; &#xff08;1&#xff09;在系统参数查看页面&#xff08;PXX 页面&#xff09;&#xff0c;按【SWITCH】或【SETTING】按键切换到要修改的参数项。 &#xff08…

蓝库云|8项关键让你看透企业「数字转型」,零代码是惊喜

各行各业都要面对的多方竞争力及不断上涨的经营成本&#xff0c;以及随着时代的发展&#xff0c;有不少企业纷纷推动数字化转型&#xff0c;考虑藉着应用现代化的数据和科技工具的结合&#xff0c;协助企业创造新的营运模式及收入来源&#xff0c;以提升自动化效率、优化客户体…

用于非线性时间序列预测的稀疏局部线性和邻域嵌入(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

SpringBoot 文件上传后查看404的问题和解决404后需要访问两次才能查看的问题

文件上传、图片上传的实现见这个&#xff1a; SpringBootVue 实现头像上传功能_Teln_小凯的博客-CSDN博客 在实现上面的功能后&#xff0c;发现查看图片的时候提示404&#xff0c;解决这个方法如下&#xff1a; 1、配置资源静态文件映射 第一个参数是页面请求的地址&#x…

ChatGPT 整合到Laravel项目中使用

之前写的《ChatApI 本地如何调用》是直接下载ChatGPT SDK当做单独项目开发使用的&#xff0c;这次写的是整合到当前项目中使用ChatGPT 合并为一个项目去使用&#xff1b;具体操作方法也有一定区别。 目录 1.安装ChatGPT SDK 2.加载ChatGPT类库 3.安装guzzlehttp 4.代码实操…

【近似算法】—0-1背包问题的近似算法

【近似算法】—0-1背包问题的近似算法Approximation Schemes(近似方案)PTAS&#xff08;Polynomial time approximation scheme&#xff09;定义&#xff1a;FPTAS&#xff08;Fully polynomial time approximation scheme&#xff09;定义&#xff1a;PPTAS&#xff08;Pseudo…

浏览器F12功能详细介绍

哈喽&#xff0c;大家好&#xff0c;我是有勇气的牛排&#xff08;全网同名&#xff09;&#x1f42e; 有问题的小伙伴欢迎在文末评论&#xff0c;点赞、收藏是对我最大的支持&#xff01;&#xff01;&#xff01;。 掌握浏览器调试基本属于开发者必备的技能&#xff0c;熟悉…

Unity 2021 LTS中着色器构建时间和内存使用的改进

随着Unity的可脚本渲染管道(SRP)的可用特性集的不断增长&#xff0c;在构建时处理和编译的着色器变量的数量也在不断增加。除了对更多图形api的持续支持和不断增长的目标平台选择外&#xff0c;SRP的改进还在继续扩展。着色器在初始(“干净”)构建后被编译和缓存&#xff0c;从…

自动曝光在移动平台上的实现方案——以《使命召唤手游》为例

一. Intro在PBR渲染中&#xff0c;除了已被大家深入分析了很多遍的PBR材质属性&#xff08;Surface Appearance&#xff09;外&#xff0c;合理的光源强度和后处理也是不可或缺的部分。这里结合工作中的一些实践经验&#xff0c;讨论一下后处理中另一个关键环节——自动曝光在移…

Consul SpringCloudK8S

背景说起微服务&#xff0c;就需要用到SpringCloud&#xff0c;目前市面上主流的SpringCloud产品有这些&#xff1a;SpringCloudNeflix、Spring Cloud Alibaba、Spring Cloud for AWS、Spring Cloud Azure 和 Spring Cloud Kubernetes。其中SpringCloudNeflix已经不在更新&…

C#开发记录——C#开发的OPC客户端无法连接杰控软件的OPC服务器处理办法

1、某些OPC 客户端连接本地服务器失败 某些OPCDa 客户端,例如ABBDCS,.WinCC 等,本地连接服务器失败,需特殊设置; C#开发的就遇到此情况&#xff0c;排查原因&#xff0c;停滞了好几天&#xff0c;终于解决 1.1、打开DCOM 配置,64 位系统需执行: 1.2、从组件服务->计算机-&…

iOS UI自动化测试详解

前言&#xff1a; 小目标 关于UI自动化的定义&#xff0c;我想要的是自动地按照流程去点击页面、输入数据&#xff0c;不需要人去参与&#xff0c;节省人工时间。比如登录&#xff0c;能够自己去填写用户名&密码&#xff0c;然后点击按钮跳转到下一个页面等。在能够保证业…

pandas表格并表(累加合并)

今天需求是用pandas的两张表格合并起来&#xff0c;其中重复的部分将数据进行相加。 用到的是combine&#xff08;&#xff09;这个函数。 函数详细的使用可以看这个大佬的文章&#xff1a; https://www.cnblogs.com/traditional/p/12727997.html &#xff08;这个文章使用的测…

vue之为什么data属性是一个函数而不是一个对象?

为什么data属性是一个函数而不是一个对象为什么data属性是一个函数而不是一个对象&#xff1f;一、实例和组件定义data的区别二、组件data定义函数与对象的区别三、原理分析四、结论为什么data属性是一个函数而不是一个对象&#xff1f; 一、实例和组件定义data的区别 vue实例…

嵌入式物联网【数据处理篇】特殊字符处理(Postman 400 Bad Request)

目录 一、Postman 400 Bad Request 二、C语言特殊字符处理 三、QUrl toPercentEncoding 处理url中含有特殊字符转码 16进制ASCII码对照表 一、Postman 400 Bad Request http请求链接中的特殊字符处理 解决包括Postman 中的post、get等链接请求中的特殊字符&#xff08;如…