Flink Checkpoint过程

Checkpoint

 使用了 Chandy-Lamport 算法

流程

1. 正常流式处理(尚未Checkpoint)

如下图,Topic 有两个分区,并行度也为 2,根据奇偶数

我们假设任务从 Kafka 的某个 Topic 中读取数据,该Topic 有 2 个 Partition,故任务的并行度为 2。根据读取到数据(下面的数据是 offset 的值,同时我们把它直接当成数据)的奇偶性,将数据分发到两个 task 进行 Sum

Source1 记录消费到了第 3 条数据,Source2 记录消费到了第 4 条数据并将其发送

同时还有 Source1 正在发送的 2 和 3,Source2 在发送的 4

已经处理的有 Source1 的 1 和 Source2 的 1、2、3,当前SourceOperator ( Sum) 算子已经sum的结果是 2 和 1+1+3=5

2. Flink 任务触发 Checkpoint

到了 Checkpoint 的设置的时间间隔,jobmanager 触发 checkpoint 操作

此时会给每个 Source 发送一个 barrier 消息,消息中的数值表示 Checkpoint 的序号,每次启动新的 Checkpoint 该值都会递增

2.2.3 Source启动Checkpoint

当Source接收到barrier消息,会将当前的状态(Partition、Offset)保存到 StateBackend,然后向 JobManager 报告Checkpoint 完成。之后Source会将barrier消息广播给下游的每一个 task:

2.2.4 task 接收 barrier,barrier 对数据的截断

当task接收到某个上游(如这里的Source1)发送来的 barrier,会将该上游barrier之前的数据继续进行处理,而barrier之后发送来的消息不会进行处理,会被缓存起来。

也就是说:

以 barrier 为节点对 barrier 前后的数据分开,barrier 之前的数据属于本次 Checkpoint,barrier 之后的数据属于下一次 Checkpoint,所以下次 Checkpoint 的数据是不应该在本次 Checkpoint 过程中被计算的,因此会将数据进行缓存

不同 Source 的barrier 发送时消费到的 offset 是不一样的,barrier 只是区分当前某个时刻已经消费的数据和 barrier 后才来的数据,不会去管你的 offset

2.2.5 barrier对齐

但是除了 Operator chains 这种一对一,还可能 reblance 算子(也就是某个 task 有多个上游输入的情况) 

sum_even 有两个 Source 源,当接收到其中一个 Source 的barrier后,会等待其他 Source 的 barrier 到来

在此期间,接收到 barrier 的 Source 发来的数据不会处理,只会缓存,而未接收到 barrier 的 Source 发来的数据依然会进行处理,直到接收到该Source 发来的 barrier,这个过程称为 barrier的对齐 

barrier 对齐主要是为了避免 Checkpoint 时有 barrier 后的数据,而 barrier 是否对齐决定了程序实现的是 Exactly Once 还是 At Least Once

  1. 如果是一对一的Operator,如map、flatMap 或 filter 等,则没有对齐这个概念,都会实现Exactly Once语义
  2. 如果是多对一的Operator(如 join)或者一对多的Operator(如 reparation/shuffle)时,可以通过配置Exactly Once语义时,必须进行barrier的对齐,而配置了 At Least Once语义时 barrier 可以不对齐

如果不进行barrier对齐,那么这里 sum_even 在接收 Source2 的 barrier 之前,对于接收到 Source1的数据4,不会进行缓存,而是直接进行计算,sum_even 的状态改为12,当接收到 Source2 的barrier,会将 sum_even 的状态 sum=12 进行持久化。如果本次Checkpoint成功,在进行下次 Checkpoint 前任务崩溃,会根据本次Checkpoint进行恢复。此时状态如下:

  • Source1的 offset 为3,从数据4开始读。

  • Source2 的 offset 为4,从数据5开始读。

  • sum_even 的状态为 12(Souce1的数据2,数据4;Source2的数据2,数据4),后续接收Source1的数据4,数据6...;接收Source2的数据6,数据8...

Source1的数据4被计算了两次

2.2.6 处理缓存数据

task接收到所有上游发送来的 barrier,也就代表收到了本次 Checkpoint 的所有数据

但是我们还有 barrier 后的属于下一次 Checkpoint 的,被缓存起来但没有处理的数据,task 会将 barrier 继续发送给下游(如下图 sum 以后的 sink),然后处理缓存的数据

2.2.7 上报Checkpoint完成 

当sink收到barrier后,会向JobManager上报本次Checkpoint完成。至此,本次Checkpoint结束,各阶段的状态均进行了持久化,可以用于后续的故障恢复

两阶段提交

如果开启了exact once 语义,sink 写入后采用了两阶段提交,比如mysql有事务的,就是写入事务,然后标记预提交,等到checkpoint,提交事务并改为标记提交完成

那我没事务怎么办,hive、iceberg、paimon这些不能实现exact once?当然可以,比如hive,就是写入临时文件(此时数据不可见),提交时修改文件名数据可见

他不是从 Source 到 Sink 完成后进行 Checkpoint,而是预提交的方式

两阶段提交2PC将分布式事务分成了两个阶段,两个阶段分别为提交请求(投票)和提交(执行),有兴趣的可以去搜下

异步:每次在把快照存储到我们的状态后端时,如果是同步进行就会阻塞正常任务,从而引入延迟。因此 Flink 在做快照存储时,采用异步方式

历史文章迁移,未完成,还需补充

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

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

相关文章

【Linux】gdb调试与make/makefile工具

目录 导读 1. make/Makefile 1.1 引入 1.2 概念 1.3 语法规则 1.4 示例 2. Linux调试器-gdb 2.1 引入 2.2 概念 2.3 使用 导读 我们在上次讲了Linux编辑器gcc\g的使用,今天我们就来进一步的学习如何调试,以及makefile这个强大的工具。 1. mak…

人工智能基础部分24-人工智能的数学基础,汇集了人工智能数学知识最全面的概况

、 大家好,我是微学AI,今天给大家介绍一下人工智能基础部分24-人工智能的数学基础,汇集了人工智能数学知识最全面的概况,深度学习是一种利用多层神经网络对数据进行特征学习和表示学习的机器学习方法。要全面了解深度学习的数学基…

FlinkSql通用调优策略

历史文章迁移,稍后整理 使用DataGenerator 提前进行压测,了解数据的处理瓶颈、性能测试和消费能力 开启minibatch:"table.exec.mini-batch.enabled", "true" 开启LocalGlobal 两阶段聚合:"table.exec.m…

Leetcode 2641. 二叉树的堂兄弟节点 II

本题为修改给定二叉树中结点的值,修改的规则为:将原来的值替换为该结点所有堂兄弟结点值的和。 其实我们可以延申一下题意,怎样去计算该结点所有堂兄弟结点值的和?其实只需要先计算每一层所有结点的和,再减掉其本身的…

《学成在线》微服务实战项目实操笔记系列(P1~P62)【上】

《学成在线》项目实操笔记系列【上】,跟视频的每一P对应,全系列12万字,涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳,参考这篇,相信会带给你极大启发。同时也欢迎大家提问与讨论,我会尽力帮大家解…

nginx登录用户验证配置

我们的nginx端口一般都是对外开放的,所以有一定程度上有被别人扫描的风险,所以为了减少被扫描的风险,我们可以配置一个nginx的用户登录验证; 用户验证登录需要nginx的一个模块:ngx_http_auth_basic_module 我们使用…

进程间通信(4):消息队列

先进先出,保证信息的有序性。 函数:msgget(搭配ftok)、msgsnd、msgrcv、msgctl 实现流程: 1、创建消息队列IPC对象 msgget 2、通信(内置函数:msgsnd、msgrcv) 3、删除消息队列IPC对象 msgctl write.c /* * 文件名称&…

PyTorch 2.2 中文官方教程(八)

训练一个玛丽奥玩游戏的 RL 代理 原文:pytorch.org/tutorials/intermediate/mario_rl_tutorial.html 译者:飞龙 协议:CC BY-NC-SA 4.0 注意 点击这里下载完整的示例代码 作者: 冯元松, Suraj Subramanian, 王浩, 郭宇章。 这个…

谈谈安全对抗的本质

前言 红队和蓝队的兄弟们都辛苦了,趁夜深人静的时候写了一点东西,算是一点心得与体会,谈谈安全对抗的本质,仅供大家参考。 今年的活动,笔者和去年一样,镇守公司,运筹帷幄之中,决胜千…

2/7 算法每日N题(二分+双指针)

第一题&#xff1a; class Solution { public:int search(vector<int>& nums, int target) {int left 0, right nums.size() - 1;while(left < right){int mid (right - left) / 2 left;int num nums[mid];if (num target) {return mid;} else if (num >…

Google DeepMind最新研究,将视觉语言大模型作为强化学习的全新奖励来源

论文题目&#xff1a;Vision-Language Models as a Source of Rewards 论文链接&#xff1a;https://arxiv.org/abs/2312.09187 在大型语言模型&#xff08;LLM&#xff09;不断发展的进程中&#xff0c;强化学习扮演了重要的角色&#xff0c;ChatGPT就是在GPT-3.5的基础上经过…

上海泗博HART转ModbusTCP网关HME-635应用案例之组态王和超声波液位计通信

如今工业现场的应用也逐渐把现场的不同应用协议转换成以太网&#xff0c;以此来提升现场的通信速度和质量。Modbus TCP是工业以太网协议的一种&#xff0c;也是现场应用中最常使用的。本应用案例是基于Modbus TCP的组态王和基于HART的超声波液位计之间数据通讯的具体应用。 应用…

c#cad 创建-点(六)

运行环境 vs2022 c# cad2016 调试成功 一、代码说明 创建一个点的命令方法。代码的主要功能是在当前活动文档中创建一个点&#xff0c;并将其添加到模型空间块表记录中。 代码的主要步骤如下&#xff1a; 获取当前活动文档、数据库和编辑器对象。使用事务开始创建点的过程…

【Git版本控制 05】多人协作

目录 一、邀请开发用户 二、新建远程分支 三、拉取远程分支 四、推送远程分支 五、合并远程分支 六、多分支协作 一、邀请开发用户 在windows环境下&#xff0c;再clone同⼀个项⽬仓库&#xff0c;来模拟⼀起协作开发的另⼀名⼩伙伴。 际开发中&#xff0c;每个⽤⼾都有…

vue的8大生命周期

第072个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使用&#xff0c;computed&a…

【Python】虚拟环境miniconda安装(python3.7, python3.x)

背景 使用Python开发项目时&#xff0c;我们一般都需要安装环境&#xff0c;可能是在物理机上直接安装&#xff0c;也可能是在虚拟环境上安装&#xff0c;当前是怎么按照conda环境的示例&#xff0c;可以指定安装Python3.x的所有版本。 安装 首先&#xff0c;需要登录当前的…

微信小程序(三十九)表单信息收集

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.表单收集的基本方法 2.picker的不足及解决方法 源码&#xff1a; index.wxml <!-- 用户信息 --> <view class"register"><!-- 绑定表单信息收集事件--><form bindsubmit"…

计算两个数相除后的余数返回值为浮点型math.fmod(x, y)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算两个数相除后的余数 返回值为浮点型 math.fmod(x, y) [太阳]选择题 请问以下代码执行math.fmod()后输出的结果是&#xff1f; import math print("【执行】math.fmod(10, 4)"…

高斯伪谱C++封装库开源!

Windows x64/86 C无依赖运行高斯伪谱法求解最优控制问题&#xff0c;你只需要ElegantGP! Author: Y. F. Zhang His Github: https://github.com/ZYunfeii 写在前面 这个库在你下载它的那一时刻起不再依赖任何其他代码&#xff0c;直接可用来构建C的最优控制问题并进行求解。…

springboot163美食推荐商城的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…