【Flink】检查点算法实现原理之检查点分界线

news2024/9/24 1:16:22

一 检查点的实现算法

  • 一种简单的想法(同步的思想)
    • 暂停应用
    • 保存状态到检查点
    • 再重新恢复应用(Spark Streaming)
  • Flink 的改进实现(异步的思想)
    • 基于 Chandy-Lamport 算法的分布式快照算法
    • 将检查点的保存和数据处理分离开,不暂停整个应用

1 检查点分界线

检查点分界线又称Checkpoint Barrier或检查点屏障。

Flink 的检查点算法用到了一种称为分界线(barrier)的特殊数据形式,用来把一条流上数据按照不同的检查点分开。

分界线之前到来的数据导致的状态更改,都会被包含在当前分界线所属的检查点中;而基于分界线之后的数据导致的所有更改,就会被包含在之后的检查点中,具体见如下例子。

现在是一个有两个输入流的应用程序,用并行度为2的 Source算子来读取,按照奇偶性进行keyBy分流、累加、输出:

在这里插入图片描述

针对这样一条数据流,如何实现检查点的保存操作:

  • JobManager 会向 Source 任务针对每一个并行任务,都发送一条带有新检查点ID 消息的检查点分界线(三角形,当前检查点分界线id=2,此处的2与数据无关),通过这种方式让检查点分界线跟随着数据向下游流动,达到来启动检查点的目的。

    之前编写的,间隔固定时间分配一个检查点的程序,就是间隔固定时间向数据源里面注入一个检查点分界线。

在这里插入图片描述

  • 当检查点分界线路过sorce算子时,也即当source算子接收到检查点分界线后,source算子会将它们刚消费完的偏移量(状态)快照下来,比如消费完3和4,会将它们保存到远程存储(HDFS)。

    保存完成之后,source会向 JobManager发送一条通知,告诉它,这两个souce任务检查点已经保存完成了。

    之后检查点分界线,会跟随数据向下游流动,数据源在keyBy时遵循复制,向下游广播的原则。

    在source算子做完检查点保存操作之后,才会将id=2的检查点分界线向下游广播。

    广播之后,分界线会跟随数据流来到下一个算子,这里就涉及到了检查点分界线对齐概念。

在这里插入图片描述

  • 分界线对齐:barrier 向下游传递,sum 任务会等待所有输入分区的 barrier 到达,如sum even会接受到上游传递过来的两条分界线,且两条检查点的分界线都是2,那么

    • 对于 barrier 已经到达的分区,继续到达的数据会被缓存
    • 而 barrier 尚未到达的分区,数据会被正常处理

    当sum even接收到上游所有并行任务传递过来的检查点id,才会进行检查点保存操作(保存8)。

    当接收到一个分界线2和数据4,数据4不能和数据8进行累加,分界线2之后的所有数据都不能进行累加,都需要缓存到sum even算子中,而橘色的检查点2之前的数据,都需要和数据8进行累加,这就是上面两句话的意思,同时也是检查点分界线名称的由来,其将数据流分隔开了。

    以上就是检查点分界线对齐的操作,只有当接收到上游发送过来的全部检查点分界线,才会保存自己的状态,并向JobManager发送一个保存成功的通知。

    这也启发我们,流中的每一个算子都需要高效的执行,这样才不会阻碍分界线和数据向下游传播,否则某一算子内部可能缓存着大量的数据,对整个程序的性能造成极大的影响,且可能会造成内存崩溃。

在这里插入图片描述

  • 当收到所有输入分区的 barrier 时,任务就将其状态保存到状态后端的检查点中,然后将 barrier 继续向下游转发。

    检查点分界线向下游传播的过程,不影响前面的聚合操作和source的消费操作。

    当检查点分界线来到sink以后,将sink的状态也保存下来,sink的并行任务会向JobManager发送通知,当JobManager接收到了所有6个并行任务发送过来的通知,其就可以真正将HDFS中的检查点标记为已完成,删除之前的检查点,只保留最近的一份。

    只要有一个并行任务保存失败,那么整个检查点的保存就是失败的。

在这里插入图片描述

  • 向下游转发检查点 barrier 后,任务继续正常的数据处理

在这里插入图片描述

  • Sink 任务向 JobManager 确认状态保存到 checkpoint 完毕,当所有任务都确认已成功将状态保存到检查点时,检查点就真正完成了。

在这里插入图片描述

综上可以看到,检查点分界线相当于一个巡视员,路过哪一个算子就对哪一个算子做快照,然后将快照发回JobManager。

分流时,将检查点分界线向下游复制,广播;合流时要进行检查点分界线的对齐,必须接收到上游所有并行任务发过来的检查点分界线,它才可以进行快照操作。所有并行任务都完成快照之后,本次检查点(id=2)才真正的完成。

检查点分界线实质上也是逻辑时钟的思想,逻辑时钟向下游传递,传到哪个算子,就对哪个算子做快照,当所有的算子都看到检查点分界线以后,检查点的保存才完成。

2 保存点

Flink 还提供了可以自定义的镜像保存功能,就是保存点(savepoints)。

检查点是自动保存,任务宕机之后,自动重启。

原则上,创建保存点使用的算法与检查点完全相同,只不过需要手动保存手动恢复,因此保存点可以认为就是具有一些额外元数据的检查点。

Flink 不会自动创建保存点,因此用户(或者外部调度程序)必须明确地触发创建操作,savepoint 是手动执行的。

那么为什么还需要使用保存点呢?当用户执行完保存点之后,可以在保存点处重新运行一份新的Flink程序,并不影响原程序的运行,这样,就可以对这两个程序进行比较,主要用于程序的升级、AB测试(面向数据决策)。

保存点是一个强大的功能。除了故障恢复外,保存点可以用于:有计划的手动备份,更新应用程序,版本迁移,暂停和重启应用,等等。

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

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

相关文章

20221203使用python3处理Google翻译英文SRT格式字幕

20221203使用python3处理Google翻译英文SRT格式字幕 1、暂时不处理UNICODE编码的TXT,本例以ANSI编码的TXT为准。 2、将来处理自动处理目录中的全部TXT文件。(甚至递归处理子目录中的TXT文件) 源码: #f_pathrC:\Users\Admin\Desk…

如何解hard算法题?

如何解困难题?前言一、案例二、困难题拆解1、自己的思路2、官方的思路3、源码Javagolang总结参考文献前言 上一篇文章写bitCount源码解析,对困难题有一些抽象的理解。 困难题就是一个个简单的知识点组成,加上其内在的逻辑联系。所以一个困难…

S2SH志愿者捐赠管理系统|捐助计算机毕业论文Java项目源码下载

💖💖更多项目资源,最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 《基于S2SH实现的志愿者捐赠管理系统》该项目采用技术jsp、strust2、Spring、hibernate、tomcat服务器、mysql数据库 ,项目含有源码、…

02、数据卷(Data Volumes)以及dockefile详解

目录 1、Docker 数据管理 2、数据卷(Data Volumes) 3、数据卷容器 4、dockerfile 5、dockerfile基本结构 6、docker使用Dockerfile创建jdk容器 启动虚拟机,进入CentOS 7、dockerfile实践经验 1、Docker 数据管理 在生产环境中使用 Docker ,往往需…

混合动力电动车优化调度与建模(发动机,电机,电池组等组件建模)(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 📝目前更新:🌟🌟🌟电力系统相关知识,期刊论文&…

6-4布线问题(分支限界)

6-4布线问题(分支限界) 一、问题描述 印刷电路板将布线区域划分成m*n个方格阵列,如图(1)所示。 精确的电路布线问题要求确定连接方格a的中点到方格b的中点的最短布线方案。 在布线时,电路只能沿直线或直角布线,如图(2)所示。 为了避免线路相交&#xf…

C语言第十二课(下):操作符详解【逗号表达式、下标引用、函数调用、结构成员操作符与操作符属性】

目录 前言: 一、逗号表达式(exp1,exp2,exp3,...,expN): 二、下标引用、函数调用和结构成员[ ]、( )、. 、->: 1.下标引用操作符[ ]: 2.函数调用操作符( …

Tomcat过时了?别多想,很多公司还是在用的。这份Tomcat架构详解,真的颠覆你的认知

Tomcat 不但没有过时,Spring Boot 还给 Tomcat 第二春了。 微服务的兴起,Tomcat 针对很多应用已经做成 embedded 模式了,Tomcat 本身是容器,Tomcat 的出现就是为了解决但是 EJB 和 Weblogic,JBoss 这种大而全的大象导致…

C++ OpenCV【视频合并:多个图像拼接在一张图像】

提示:本文中视频拼接指的是将多张图像按空间合并在一张图像上,而不是将多张图像按时间顺序拼接成一个多帧片段。 文章目录 前言 一、OpenCV知识点 1.OpenCV裁剪矩形区域赋值 2.OpenCV将Mat粘贴到指定位置 二、程序样例 1.程序源码 2.运行结果 前言 C版…

[附源码]Python计算机毕业设计Django姜太公渔具销售系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

看完这篇,还不懂JAVA内存模型(JMM)算我输

前言 开篇一个例子,我看看都有谁会?如果不会的,或者不知道原理的,还是老老实实看完这篇文章吧。 Slf4j(topic "c.VolatileTest") public class VolatileTest {static boolean run true;public static void main(Str…

一个简单的HTML网页 个人网站设计与实现 HTML+CSS+JavaScript自适应个人相册展示留言博客模板

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

Ubtunu排查磁盘空间是否已满—并清理的方式

项目场景: 最近使用nodejs开发的后端项目部署到Ubtunu服务器后接口无法访问了,接口也调用不通,NGINX报502错误。 问题描述 使用远程连接工具传文件也是无法上传,提示找不到文件,SCP命令也无法上传。 scp传文件报错&…

一文教会你如何在内网搭建一套属于自己小组的在线 API 文档?

Hello,大家好,我是阿粉,对接文档是每个开发人员不可避免都要写的,友好的文档可以大大的提升工作效率。 阿粉最近将项目的文档基于 Gitbook 和 Gitlab 的 Webhook 功能的在内网部署了一套实时的,使用起来特方便了。跟着…

第二证券|11月十大牛股出炉 特一药业163%涨幅问鼎榜首

到11月30日收盘,11月份十大牛股中7只个股涨幅超过100%,涨幅最小的也有87%,均匀涨幅较上个月有所扩大。 11月,A股出现震荡爬高态势,到11月30日收盘,上证指数月内涨8.91%,深证成指涨6.84%&#xf…

大学生HTML作业节日网页 HTML作业节日文化网页期末作业 html+css+js节日网页 HTML学生节日介绍 HTML学生作业网页视频

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

基于STM32单片机的温湿度检测报警器(数码管)(Proteus仿真+程序)

编号:27 基于STM32单片机的温湿度检测报警器(数码管) 功能描述: 本设计由STM32F103单片机最小系统DHT11温湿度传感器数码管显示模块声光报警模块独立按键组成。 1、主控制器是STM32F103单片机 2、DHT11传感器测量温度和湿度数据…

Android注解快速入门和实用解析

首先什么是注解?Override就是注解,它的作用是: 1、检查是否正确的重写了父类中的方法。2、标明代码,这是一个重写的方法。1、体现在于:检查子类重写的方法名与参数类型是否正确;检查方法private&#xff0f…

带你走进知识图谱的世界

知识图谱知识图谱的介绍01 什么是知识图谱02 知识图谱构建的关键技术03 知识图谱的存储04 知识图谱在金融领域的应用图数据库 Neo4j知识图谱的介绍 知识图谱最开始是Google为了优化搜索引擎提出来的,推出之后引起了业界轰动,随后其他搜索公司也纷纷推出…

[附源码]计算机毕业设计医疗器械公司公告管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…