[Flink] 容错机制与状态一致性机制

news2024/12/22 22:53:45

文章目录

      • 1.状态一致性
        • 1.1 状态一致性分类
      • 2.一致性检查点 checkpoint
      • 3.端到端(end-to-end)状态一致性
      • 4. 端到端的精确一次(exactly-once)保证
        • 4.1 幂等写入
        • 4.2 事务写入
      • 5.Flink+Kafka 端到端状态一致性的保证
        • 5.1 Exactly-once 两阶段提交
        • 5.2 Exactly-once 两阶段提交步骤总结
      • 6.保存点(save points)

1.状态一致性

有状态的流处理,内部每个算子任务都可以有自己的状态
对于流处理器来说, 状态一致性就是为了使得数据准确
数据不应该丢失也不允许重复使用
在遇到故障时, 可以恢复状态, 并重写计算

1.1 状态一致性分类

  • AT-MOST-ONCE(最多一次)
    当任务故障时,最简单的做法是什么都不干,既不恢复丢失的状态,也不重播丢失的数据。At-most-once 语义的含义是最多处理一次事件。

  • AT-LEAST-ONCE(至少一次)
    在大多数的真实应用场景,我们希望不丢失事件。这种类型的保障称为 at-least-once,意思是所有的事件都得到了处理,而一些事件还可能被处理多次。

  • EXACTLY-ONCE(精确一次)
    恰好处理一次是最严格的保证,也是最难实现的。恰好处理一次语义不仅仅意味着没有事件丢失,还意味着针对每一个数据,内部状态仅仅更新一次。

2.一致性检查点 checkpoint

Flink 使用了一种轻量级快照机制 —— 检查点(checkpoint)来保证 exactly-once 语义。
所有任务的状态,在某个时间点的一份拷贝(一份快照)。而这个时间点,应该是所有任务都恰好处理完一个相同的输入数据的时候。

3.端到端(end-to-end)状态一致性

在真实应用中,流处理应用除了流处理器以外还包含了数据源(例如 Kafka)和输出到持久化系统

端到端的一致性保证,意味着结果的正确性贯穿了整个流处理应用的始终;每一个组件都保证了它自己的一致性

整个端到端的一致性级别取决于所有组件中一致性最弱的组件

4. 端到端的精确一次(exactly-once)保证

  • 内部保证, checkpoint
  • source端, 可重写设置数据的读取位置
  • sink, 从故障恢复时,数据不会重复写入外部系统
  • 幂等写入
  • 事务写入

4.1 幂等写入

一个操作,可以重复执行很多次,但只导致一次结果更改,也就是说,后面再重复执行就不起作用了

在这里插入图片描述

4.2 事务写入

实现思想:构建的事务对应着 checkpoint,等到 checkpoint 真正完成的时候,才把所有对应的结果写入 sink 系统中
实现方式: 预写日志和两阶段提交

预写日志
把结果数据先当成状态保存,然后在收到 checkpoint 完成的通知时, 一次性写入 sink 系统
DataStream API 提供了一个模板类:GenericWriteAheadSink,来实现这种事务性 sink。

两阶段提交
每个checkpoint, sink任务会启动一个事务, 将数据写入到事务中, 将数据写入到sink系统, 但是不提交, 预提交状态, 收到checkpoint完成的通知后, 正式提交。
link 提供了 TwoPhaseCommitSinkFunction 接口。

2PC 对外部 sink 系统的要求

  1. 外部 sink 系统必须提供事务支持,或者 sink 任务必须能够模拟外部系统上的事务
  2. 在 checkpoint 的间隔期间里,必须能够开启一个事务并接受数据写入
  3. 在收到 checkpoint 完成的通知之前,事务必须是“等待提交”的状态。 在故障恢复的情况下,这可能需要一些时间。如果这个时候sink系统关闭事务(例如超时了),那么未提交的数据就会丢失
  4. sink 任务必须能够在进程失败后恢复事务
  5. 提交事务必须是幂等操作

不同 Source 和 Sink 的一致性保证

在这里插入图片描述

5.Flink+Kafka 端到端状态一致性的保证

  • 内部: 利用 checkpoint 机制,把状态存盘,发生故障的时候可以恢复,保证内部的状态一致性

  • source: kafka consumer 作为 source,可以将偏移量保存下来, 如果后续任务出现了故障,恢复的时候可以由连接器重置偏移量,重新消费数据,保证一致性

  • sink : kafka producer 作为sink,采用两阶段提交 sink,需要实现一个 TwoPhaseCommitSinkFunction

5.1 Exactly-once 两阶段提交

在这里插入图片描述

JobManager 协调各个 TaskManager 进行 checkpoint 存储

checkpoint保存在 StateBackend中,默认StateBackend是内存级的,也可以改为文件级的进行持久化保存

在这里插入图片描述

当 checkpoint 启动时,JobManager 会将检查点分界线(barrier)注入数据流, barrier会在算子间传递下去。

在这里插入图片描述

每个算子会对当前的状态做个快照,保存到状态后端
checkpoint 机制可以保证内部的状态一致性

在这里插入图片描述

每个内部的 transform 任务遇到 barrier 时,都会把状态存到 checkpoint 里
sink 任务首先把数据写入外部 kafka,这些数据都属于预提交的事务;遇到barrier 时,把状态保存到状态后端,并开启新的预提交事务

在这里插入图片描述

所有算子任务的快照完成,也就是这次的 checkpoint 完成时,JobManager 会向所有任务发通知,确认这次 checkpoint 完成
sink 任务收到确认通知,正式提交之前的事务,kafka 中未确认数据改为“已确认”

5.2 Exactly-once 两阶段提交步骤总结

  • 第一条数据来了之后,开启一个 kafka 的事务(transaction),正常写入 kafka 分 区日志但标记为未提交,这就是“预提交”

  • jobmanager 触发 checkpoint 操作,barrier 从 source 开始向下传递,遇到barrier 的算子将状态存入状态后端,并通知 jobmanager

  • sink 连接器收到 barrier,保存当前状态,存入 checkpoint,通知 jobmanager, 并开启下一阶段的事务,用于提交下个检查点的数据

  • jobmanager 收到所有任务的通知,发出确认信息,表示 checkpoint 完成

  • sink 任务收到 jobmanager 的确认信息,正式提交这段时间的数据

  • 外部kafka关闭事务,提交的数据可以正常消费了

6.保存点(save points)

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

2)原则上,创建保存点使用的算法与检查点完全相同,因此保存点可以认为就是具有一些额外元数据的检查点

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

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

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

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

相关文章

常见智力题汇总(建议收藏)

🚀write in front🚀 📜所属专栏: 智力题 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对我最…

Web 前端开发技术 —— JavaScript

Web 前端开发技术 —— JavaScript 总结 JavaScript 内容! 文章目录Web 前端开发技术 —— JavaScript一、js 的引用方式与执行顺序1、引用方式在标签中直接写 js 代码复用 js 代码通过 import 方式2、执行顺序3、html、css、js 三者之间的关系二、变量与运算符变量…

C++之函数重载

文章目录前言一、函数重载二、如何支持函数重载(C支持函数重载的原理--名字修饰(name Mangling))三、参数有什么区别才能构成函数重载1.参数个数不同2.参数类型不同3.参数顺序不同四、返回值类型不同是否可以构成函数重载总结前言 我们知道在使用C语言进…

jmh的一些作用

目录说明说明 jmh可以用来java基准测试,性能测试用这个测比较标准,可以设置预热、迭代次数,对某块代码精准测试,耗时时间单位有毫秒、纳秒等。 就先说到这\color{#008B8B}{ 就先说到这}就先说到这 在下Apollo\color{#008B8B}{在下…

AcWing 323. 战略游戏(树形DP + 状态机DP)

AcWing 323. 战略游戏(树形DP 状态机DP)一、问题二、分析1、思路分析2、状态表示3、状态转移4、循环设计5、初末状态三、代码一、问题 二、分析 1、思路分析 这道题最后问的其实就是,在一棵树中,每个边至少选择一个端点的条件下…

【FLASH存储器系列十五】NAND Flash究竟能不能随机读写到某个字节的数据?

网上有很多文章写道,nand flash的读写操作是以page为单位,还有文章说些nand flash时必须按page0、page1、page2…的顺序写,必须先写完前面的page才能写后面的page。难道nandflash就不能随机读到某个字节吗?只能一次性读一页&#…

区区几行代码,就能全面实现 Python 自动探索性数据分析

探索性数据分析是数据科学模型开发和数据集研究的重要组成部分之一。在拿到一个新数据集时首先就需要花费大量时间进行EDA来研究数据集中内在的信息。自动化的EDA Python包可以用几行Python代码执行EDA。 在本文中整理了10个可以自动执行EDA并生成有关数据的见解的Python包&am…

C语言——二分查找与猜数字游戏

文章目录二分查找二分查找的思想二分查找的条件二分查找的实现过程代码举例猜数字游戏游戏说明猜数字游戏思想代码实现打印菜单打印主函数打印游戏函数整体代码演示二分查找 题目: 在一个有序数组中查找具体的某个数字n。 首先我们先定义一个110的数组 ,…

immersive-translate(沉浸式双语网页翻译扩展),解决谷歌翻译无法使用问题

前言 谷歌停止了大陆的谷歌翻译服务,所以找到了immersive-translate 插件解决翻译问题。当然 最直接就是 换个浏览器比如 Edge\Firefox等等。 主要特性 智能识别网页主内容区,区别于同类插件翻译网页所有的区域,这可以极大增强译文的阅读…

【C++11】右值引用与移动构造、万能引用与完美转发

目录 一、右值引用 1.1 左值引用和右值引用 1.2 左值引用与右值引用比较 1.3 右值引用的使用场景和意义 二、移动构造 2.1 移动构造的实现 2.2 移动赋值 2.3 默认成员函数 2.4 default关键字 2.5 delete 关键字 2.6 STL中的移动构造 二、完美转发 2.1 模板中的万能…

利用剪枝降低bfs算法的时空复杂度(一道OJ题目)

作者:非妃是公主 专栏:《算法》《刷题笔记》 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 《算法》专栏系列文章 算法设计与分析复习01:主方法求递归算法时间复杂度 算法设计与分析…

我写了一个脚本,实现了图片分类问题的全自动化训练

众所周知,图片分类问题属于计算机视觉中比较容易解决的问题之一 但 这几天被数据集的问题搞得焦头烂额, 照理说分类问题的数据集应该比较好制作 但 如果之前没有现成的数据集 也会变得比较麻烦 直到我偶然发现了一个HuggingFace的图片搜索API 无限次调用 而且不需要身份验证 真…

【手撕面试题】HTML+CSS(高频知识点一)

目录 面试官:给定一个元素,如何实现水平垂直居中? 面试官:padding与margin有什么不同? 面试官:vw和百分比有什么区别? 面试官:行内元素与块级元素有什么区别? 面试官…

MapReduce实现TopN

目录 1、先导知识 2、案例 2.1 需求 2.2 代码实现 FlowBean类 Mapper类 Reducer类 Driver类 3、总结 1、先导知识 TreeMap底层是根据红黑树的数据结构构建的,默认是根据key的自然排序来组织(比如integer的大小,String的字典排序&…

一刷代码随想录——回溯算法

1.理论基础【1】本质回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。因为回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以…

线性DP与真题

目录 一、前言 二、最长公共子序列(lanqiaoOJ题号1189,类似于1054) 三、最长递增子序列 1、蓝桥骑士(lanqiaoOJ题号1188) 四、编辑距离 1、字符串转换(lanqiaoOJ题号1507) 五、网络图上的…

JavaScript两数之和

两数之和 两层for循环 // O(n^2) const twoNum function(nums,target){for(let i 0;i<nums.length;i){for(let ji1 ;j<nums.length;j){if(nums[i]nums[j]target){return[i,j]}}} }双指针 // 当数组为有序的时候O(n) const twoNum2 function(nums,target){let i 0 …

SpringCloud学习

由于Spring Cloud基于Spring Boot构建&#xff0c;而Spring Cloud Alibaba又基于Spring Cloud Common的规范实现&#xff0c;所以当我们使用Spring Cloud Alibaba来构建微服务应用的时候&#xff0c;需要知道这三者之间的版本关系。 目前Spring Cloud Alibaba的版本与Spring Bo…

1-1MySql复习

MySql复习 一 数据类型 数值 字符串 ​ char(5) 定长字符串 varchar(5) 可变长度字符串 日期 ​ timestamp 记录行数据的最后修改事件 二 基本查询 1 聚合函数 avg count sum max min 2 排序 order by ​ asc ​ desc 3 分组 group by … having … 分组通常跟…

Python语言的重要性(模式识别与图像处理课程作业)

Python语言的重要性&#xff08;模式识别与图像处理课程作业&#xff09;Python语言的重要性1 Python的优点主要有&#xff1a;1.1、简单1.2、易学1.3、速度快1.4、免费1.5、高层语言1.6、解释性1.7、面向对象1.8、可扩展性1.9、可嵌入性1.10、丰富的库1.11、规范的代码2 Pytho…