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 在做快照存储时,采用异步方式

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion 模型下载:GhostMix(幽灵混合)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 GhostMix 是绝对让你惊艳的模型,也是自己认为现在最强的2.5D模型。我认为模型的更新应该是基于现有的画面整体不大变的前提下,提高模型的成…

win32编程系统BUG(Win32 API中的WM_SETTEXT消息)

由于频繁使用Win32 API中的WM_SETTEXT消息,导致内存占用直线上升。 暂未找到有效解决方案。

【C++】中的 inline 用法

1、引入 inline 关键字的原因 在 c/c 中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了 inline 修饰符,表示为内联函数。 栈空间就是指放置程序的局部数据(也就是函数内数据&a…

c入门第十篇——指针入门

一句话来说: 指针就是存储了内存地址值的变量。 在前面讨论传值和传址的时候,我们就已经开始使用了指针来传递地址。 在正式介绍指针之前,我们先来简单了解一下内存。内存可以简单的理解为一排连续的房子的街道,每个房子都有自己的地址&#…

QGIS介绍

一.基本概念 QGIS的官方网站为:https://www.qgis.org Github地址:https://github.com/qgis/QGIS QGIS采用开源证书GNU GPLv2 (GNU General Public License version 2)发布,主要采用C语言开发,用户界面依赖Qt平台。 二…

JMeter测试工具(性能篇)

自动化脚本 设置全局变量 断言 接口弱压力测试 模拟半小时之内1000个用户访问服务器资源,要求平均响应时间在3000ms内,且错误率为0 模拟100个用户同时访问服务器资源,要求平均响应时间在3000毫秒内,且错误率为0 高并发 模拟2个…

Kubernetes基础(十五)-k8s网络通信

1 k8s网络类型 2 Pod网络 2.1 同一pod内不同容器通信 Pod是Kubernetes中最小的可部署单元,它是一个或多个紧密关联的容器的组合,这些容器共享同一个网络命名空间和存储卷,因此Pod中的所有容器都共享相同的网络命名空间和IP地址——PodIP&a…

Web前端框架-Vue(初识)

文章目录 web前端三大主流框架**1.Angular****2.React****3.Vue**什么是Vue.js 为什么要学习流行框架框架和库和插件的区别一.简介指令v-cloakv-textv-htmlv-pre**v-once**v-onv-on事件函数中传入参数事件修饰符双向数据绑定v-model 按键修饰符自定义按键修饰符别名v-bind(属性…

寒假漫游记之CSS

一&#xff0c;CSS 1.CSS语法规范 CSS规则由两个主要的部分构成&#xff1a;选择器及一条或多条声明。 &#xff08;选择器是用于指定CSS样式的HTML标签&#xff09; 注&#xff1a;CSS是写在<style></style>里 (style在<head></head>),具体可以书写…

java面试题:MySQL中的各种JOIN的区别

表关联是频率非常高的一种数据库操作&#xff0c;在MySQL中&#xff0c;这种JOIN操作有很多类型&#xff0c;包括内联接、左外连接、右外连接等等&#xff0c;而每种连接的含义都不一样&#xff0c;如果死记硬背&#xff0c;不仅很难记住&#xff0c;而且也容易搞混淆&#xff…

Web课程学习笔记--JavaScript的性能优化-加载和执行

JavaScript 的性能优化&#xff1a;加载和执行 概述 无论当前 JavaScript 代码是内嵌还是在外链文件中&#xff0c;页面的下载和渲染都必须停下来等待脚本执行完成。JavaScript 执行过程耗时越久&#xff0c;浏览器等待响应用户输入的时间就越长。浏览器在下载和执行脚本时出…

幻兽帕鲁服务器部署与参数修改教程(WindowsLinux)

教程合集 【阿里云部署攻略】&#xff1a;【官方指南】阿里云搭建幻兽帕鲁服务器指南汇总 【腾讯云部署教程】&#xff1a;【官方指南】腾讯云搭建幻兽帕鲁服务器指南汇总 选服务器 阿里云新用户专享优惠&#xff1a;帕鲁官方推荐配置4核16G 以及 8核32G&#xff0c;新用户…

Optimism Collective 为 Covalent Network(CQT)提供价值 20 万美元的生态系统资助

Covalent Network&#xff08;CQT&#xff09; 是 Web3 生态系统中关键的“数据可用性”层&#xff0c;在与 Optimism Collective 多年的合作中取得了骄人的成果。Covalent Network&#xff08;CQT&#xff09;对于 Optimism 跨链数据的增长产生了直接的影响&#xff0c;而这一…

OJ刷题:求俩个数组的交集(没学哈希表?快排双指针轻松搞定!)

目录 ​编辑 1.题目描述 2.C语言中的内置排序函数&#xff08;qsort&#xff09; 3.解题思路 3.1 升序 3.2双指针的移动 3.3 保证加入元素的唯一性 4.leetcode上的完整代码 完结散花 悟已往之不谏&#xff0c;知来者犹可追 …

3.2 Verilog 时延

关键词&#xff1a;时延&#xff0c; 惯性时延 连续赋值延时语句中的延时&#xff0c;用于控制任意操作数发生变化到语句左端赋予新值之间的时间延时。 时延一般是不可综合的。 寄存器的时延也是可以控制的&#xff0c;这部分在时序控制里加以说明。 连续赋值时延一般可分为…

1898_野火FreeRTOS教程阅读笔记_链表操作

1898_野火FreeRTOS教程阅读笔记_链表操作 全部学习汇总&#xff1a; g_FreeRTOS: FreeRTOS学习笔记 (gitee.com) 新的节点的插入&#xff0c;影响到的是链表中最后一个元素的后继以及当前被插入元素的前驱、后继以及归属属性。具体的操作效果为&#xff1a;新的节点更新自己的前…

深度学习中常用激活函数介绍

深度学习中常用激活函数介绍 在深度学习中&#xff0c;激活函数的作用主要是引入非线性特性&#xff0c;提高模型的表达能力。具体如下&#xff1a; 解决线性不可分问题&#xff1a;激活函数可以将输入特征的复杂度提升&#xff0c;使得神经网络能够处理非线性问题&#xff0c…

分布式系统架构介绍

1、为什么需要分布式架构&#xff1f; 增大系统容量&#xff1a;单台系统的性能瓶颈&#xff0c;多台机器才能应对大规模的应用场景&#xff0c;所以就需要我们的应用支撑平台具备分布式架构。 加强系统的可用&#xff1a;为了满足业务的SLA要求&#xff0c;需要通过分布式架构…

第62讲商品搜索动态实现以及性能优化

商品搜索后端动态获取数据 后端动态获取数据&#xff1a; /*** 商品搜索* param q* return*/GetMapping("/search")public R search(String q){List<Product> productList productService.list(new QueryWrapper<Product>().like("name", q)…

Java学习笔记2024/2/8

面向对象 //面向对象介绍 //面向: 拿、找 //对象: 能干活的东西 //面向对象编程: 拿东西过来做对应的事情 //01-如何设计对象并使用 //1.类和对象 //2.类的几个不错注意事项 1. 类和对象 1.1 类和对象的理解 客观存在的事物皆为对象 &#xff0c;所以我们也常常说万物皆对…