Flink的状态管理与恢复机制
参考地址:https://www.cnblogs.com/airnew/p/9544683.html
问题一、什么是状态?
问题二、Flink状态类型有哪几种?
问题三、状态有什么作用?
问题四、如何使用状态,实现什么样的API?
问题五、什么是checkpoint与savepoint?
问题六、如何使用checkpoint与savepoint?
问题七、checkpoint原理是什么?
问题八、什么是有状态的计算?
问题九、使用checkpoint的作用?
一、状态
定义:
一般指一个具体的 task/operator 某一时刻在内存中的状态(一个中间结果)
快照(snapshot)
作用:
state可以被记录,在失败的情况下可以恢复。
基本类型:
Operator state
Keyed state
Flink提供一套状态保存的方法,无需在借助第三方存储系统来解决状态存储问题。
二、Flink状态类型有哪几种?
按照数据的划分和扩张方式,Flink中大致分为2类:
(1)Operator State
1、可以用于所有算子(常用于source,例如 FlinkKafkaConsumer)
2、一个Operator 实例对应一个State (与 key 无关,唯一绑定到特定 operator)
3、并发改变时有多种重新分配方式可选
(1)均匀分配
(2)合并后每个得到全量
4、实现 CheckpintedFunction 或 ListCheckpointed 接口
5、支持的数据结构
ListState (只支持这一种数据结构)
(2)Keyed State
1、只能用在KeyedStream 上的算子中,基于 keyedStream 之上的状态,dataStream.keyBy(),只能在作用于 keyedStream 上的 function/Operator 里使用。
keyBy 之后的 Operator State,可理解为分区过的 Operator State。
每个 并行 keyed Operator 的每个实例的每个 key有一个 keyed state, 即 <paralled-operator-instance,key> 就是一个唯一的状态,由于每个 key 属于一个 keyed operator的
并行实例,因此我们可以将其简单的理解为 <operator,key>
2、每个key 对应一个State。(一个Operator 实例处理多个key,访问相应的多个State)
3、并发改变,State随着Key 在实例间迁移
4、通过 RuntimeContext 访问 RichFunction
5、支持的数据结构
ValueState
ListState
ReducingState
AggregatingState
FoldingState(不推荐使用,过期了)
MapState
注意:状态不一定存储在内部,可能驻留在磁盘或者其他地方
状态是使用RuntimeContext访问的,因此只能在Rich函数中访问。
三、状态的表现形式
Keyed State 和 Operator State ,可以有两种形式存在:原始状态和托管状态。
managed(托管状态):
托管状态是由Flink 框架管理的状态,如 ValueState、ListState、MapState等。
通过框架提供的接口来更新和管理状态的值。
不需要序列化
raw(原始状态)
原始状态是由用户自行管理的具体的数据结构,Flink 在做 checkpoint的时候,使用 byte[] 来读写状态内容,对其内部数据结构一无所知。
需要序列化
通常在DataStream 上的状态推荐使用托管的状态,当用户自定义operator时,会使用到原始状态。
问题八、什么是有状态的计算?
计算任务的结果不仅仅依赖于输入,还依赖于它的当前状态,其实大多数的计算都是有状态的计算。比如wordcount,给一些word,
其计算它的count,这是一个很常见的业务场景。count作为输出,在计算的过程中要不断的把输入累加到count上去,
那么count就是一个state。
什么是checkpoint?
checkpoint 则表示了一个 Flink Job ,在一个特定时刻的一份全局状态状态快照,即包含了一个 job 下 所有
task/operator 某时刻的状态。
问题九、使用checkpoint(检查点)的作用?
使用Checkpoint提高程序的可靠性
用户可以根据程序里面的配置将checkpoint打开,给定一个时间间隔后,框架会按照时间间隔给程序的状态进行备份。
当发生故障时,Flink会将所有Task的状态一起恢复到Checkpoint的状态。从那个位置开始重新执行。
Flink也提供了多种正确性的保障,包括:
AT LEAST ONCE
Exactly once
备份为保存在State中的程序状态数据
Flink也提供了一套机制,允许把这些状态放到内存当中。做Checkpoint 的时候,由Flink去完成恢复。
从已停止作业的运行状态中恢复
当组件升级的时候,需要停止当前作业。这个时候需要从之前停止的作业当中恢复,Flink提供了2种机制恢复作业:
Savepoint(保存点):是一种特殊的checkpoint,只不过不像checkpoint定期的从系统中去触发的,它是用户通过命令触发,存储格式和checkpoint也是不相同的,
会将数据按照一个标准的格式存储,不管配置什么样,Flink都会从这个checkpoint 恢复,是用来做版本升级一个非常好的工具。
External Checkpoint:对已有checkpoint的一种扩展,就是说做完一次内部的一次Checkpoint后,还会在用户给定的一个目录中,多
存储一份checkpoint的数据。
Flink的状态管理与恢复机制的更多相关文章
- 总结Flink状态管理和容错机制
本文来自8月11日在北京举行的 Flink Meetup会议,分享来自于施晓罡,目前在阿里大数据团队部从事Blink方面的研发,现在主要负责Blink状态管理和容错相关技术的研发. 本文主要内容如 ...
- Flink状态管理和容错机制介绍
本文主要内容如下: 有状态的流数据处理: Flink中的状态接口: 状态管理和容错机制实现: 阿里相关工作介绍: 一.有状态的流数据处理# 1.1.什么是有状态的计算# 计算任务的结果不仅仅依赖于输入 ...
- 「Flink」Flink的状态管理与容错
在Flink中的每个函数和运算符都是有状态的.在处理过程中可以用状态来存储数据,这样可以利用状态来构建复杂操作.为了让状态容错,Flink需要设置checkpoint状态.Flink程序是通过chec ...
- Flink的状态编程和容错机制(四)
一.状态编程 Flink 内置的很多算子,数据源 source,数据存储 sink 都是有状态的,流中的数据都是 buffer records,会保存一定的元素或者元数据.例如 : ProcessWi ...
- Flink Streaming状态处理(Working with State)
参考来源: https://www.jianshu.com/p/6ed0ef5e2b74 https://blog.csdn.net/Fenggms/article/details/102855159 ...
- Flink 从0到1学习 —— Flink 中如何管理配置?
前言 如果你了解 Apache Flink 的话,那么你应该熟悉该如何像 Flink 发送数据或者如何从 Flink 获取数据.但是在某些情况下,我们需要将配置数据发送到 Flink 集群并从中接收一 ...
- Flink 源码解析 —— 深度解析 Flink 是如何管理好内存的?
前言 如今,许多用于分析大型数据集的开源系统都是用 Java 或者是基于 JVM 的编程语言实现的.最着名的例子是 Apache Hadoop,还有较新的框架,如 Apache Spark.Apach ...
- Flutter 对状态管理的认知与思考
前言 由 编程技术交流圣地[-Flutter群-] 发起的 状态管理研究小组,将就 状态管理 相关话题进行为期 两个月 的讨论. 目前只有内定的 5 个人参与讨论,如果你对 状态管理 有什么独特的见解 ...
- 大数据计算引擎之Flink Flink状态管理和容错
这里将介绍Flink对有状态计算的支持,其中包括状态计算和无状态计算的区别,以及在Flink中支持的不同状态类型,分别有 Keyed State 和 Operator State .另外针对状态数据的 ...
随机推荐
- PO封装设计模式 -- Web页面端测试
一.已登录页面 -->新建PO封装的包 -- 以下源码适用于python3以上的版本 代码优化新增 Image -->对操作步骤进行截图 二.basepage 包基础类的封装如下: fro ...
- 第二十五篇 -- C++宝典中的图书管理系统
此篇文章是基于C++宝典写的图书管理系统,本人对其中的部分做了相应修改,并且以现有格式替代原有格式,使程序更加清晰明了.此程序运行在VS2017上. 系统设计 图书管理系统分为四个模块:图书管理模块. ...
- JAVA,IDEA下的包机制
IDEA下的包机制 在实际开发中,大型系统往往需要多人合作完成,每个程序员都要命名多个类与接口等类型,难免会定义重复的类与接口.为了避免名字冲突,java提供了包机制只要包名不同,即使类名相同,也能相 ...
- CF877B Nikita and string TJ
前言的前言 本 TJ 同步发布于洛谷,在线求赞(bushi 前言 蒟蒻第一篇题解,在线求审核大大给过 awa. 如果此题解有什么问题的话欢迎各位大巨佬提出. 题目链接:CF877B 题目类型:dp,一 ...
- 洛谷P3052题解
题面 看起来非常简单,但是细节多的一批的状压DP入门题. 我设 \(f_i\) 为 \(i\) 状态时最小分组数, \(g_i\) 为 \(i\) 状态时最后一组剩余空间. 对于每一个 \(i\) , ...
- Linux从头学06:16张结构图,彻底理解【代码重定位】的底层原理
作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...
- Top10 应用都在用的Android最新知识
相信各位对Jetpack并不陌生,自从 Google 在 2018 年推出 Jetpack 之后,它就成为了 Android 未来发展的指向标. 作为一名安卓工程师,我们以前会经常吐槽Android碎 ...
- OpenStack中VNC协议实现多屏共享(多屏不踢访问)
OpenStack中VNC协议实现多屏共享 by 无若 libvirt设置基本说明: <devices> <graphics type='sdl' display=':0.0 ...
- Seaborn基础画图实例
使用seaborn画图时,经常不知道该该用什么函数.忘记函数的参数还有就是画出来的图单调不好看. 所以,本人对seaborn的一些常用的画图函数,并结合实例写成了代码,方便以后查询和记忆. 若代码或注 ...
- K8s 部署 Gitlab CI Runner
K8s 版本:1.20.6 GitLab CI 最大的作用是管理各个项目的构建状态.因此,运行构建任务这种浪费资源的事情交给一个独立的 Gitlab Runner 来做就会好很多,而且 Gitlab ...