参考地址: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的状态管理与恢复机制的更多相关文章

  1. 总结Flink状态管理和容错机制

    本文来自8月11日在北京举行的 Flink Meetup会议,分享来自于施晓罡,目前在阿里大数据团队部从事Blink方面的研发,现在主要负责Blink状态管理和容错相关技术的研发.   本文主要内容如 ...

  2. Flink状态管理和容错机制介绍

    本文主要内容如下: 有状态的流数据处理: Flink中的状态接口: 状态管理和容错机制实现: 阿里相关工作介绍: 一.有状态的流数据处理# 1.1.什么是有状态的计算# 计算任务的结果不仅仅依赖于输入 ...

  3. 「Flink」Flink的状态管理与容错

    在Flink中的每个函数和运算符都是有状态的.在处理过程中可以用状态来存储数据,这样可以利用状态来构建复杂操作.为了让状态容错,Flink需要设置checkpoint状态.Flink程序是通过chec ...

  4. Flink的状态编程和容错机制(四)

    一.状态编程 Flink 内置的很多算子,数据源 source,数据存储 sink 都是有状态的,流中的数据都是 buffer records,会保存一定的元素或者元数据.例如 : ProcessWi ...

  5. Flink Streaming状态处理(Working with State)

    参考来源: https://www.jianshu.com/p/6ed0ef5e2b74 https://blog.csdn.net/Fenggms/article/details/102855159 ...

  6. Flink 从0到1学习 —— Flink 中如何管理配置?

    前言 如果你了解 Apache Flink 的话,那么你应该熟悉该如何像 Flink 发送数据或者如何从 Flink 获取数据.但是在某些情况下,我们需要将配置数据发送到 Flink 集群并从中接收一 ...

  7. Flink 源码解析 —— 深度解析 Flink 是如何管理好内存的?

    前言 如今,许多用于分析大型数据集的开源系统都是用 Java 或者是基于 JVM 的编程语言实现的.最着名的例子是 Apache Hadoop,还有较新的框架,如 Apache Spark.Apach ...

  8. Flutter 对状态管理的认知与思考

    前言 由 编程技术交流圣地[-Flutter群-] 发起的 状态管理研究小组,将就 状态管理 相关话题进行为期 两个月 的讨论. 目前只有内定的 5 个人参与讨论,如果你对 状态管理 有什么独特的见解 ...

  9. 大数据计算引擎之Flink Flink状态管理和容错

    这里将介绍Flink对有状态计算的支持,其中包括状态计算和无状态计算的区别,以及在Flink中支持的不同状态类型,分别有 Keyed State 和 Operator State .另外针对状态数据的 ...

随机推荐

  1. PO封装设计模式 -- Web页面端测试

    一.已登录页面 -->新建PO封装的包 -- 以下源码适用于python3以上的版本 代码优化新增 Image -->对操作步骤进行截图 二.basepage 包基础类的封装如下: fro ...

  2. 第二十五篇 -- C++宝典中的图书管理系统

    此篇文章是基于C++宝典写的图书管理系统,本人对其中的部分做了相应修改,并且以现有格式替代原有格式,使程序更加清晰明了.此程序运行在VS2017上. 系统设计 图书管理系统分为四个模块:图书管理模块. ...

  3. JAVA,IDEA下的包机制

    IDEA下的包机制 在实际开发中,大型系统往往需要多人合作完成,每个程序员都要命名多个类与接口等类型,难免会定义重复的类与接口.为了避免名字冲突,java提供了包机制只要包名不同,即使类名相同,也能相 ...

  4. CF877B Nikita and string TJ

    前言的前言 本 TJ 同步发布于洛谷,在线求赞(bushi 前言 蒟蒻第一篇题解,在线求审核大大给过 awa. 如果此题解有什么问题的话欢迎各位大巨佬提出. 题目链接:CF877B 题目类型:dp,一 ...

  5. 洛谷P3052题解

    题面 看起来非常简单,但是细节多的一批的状压DP入门题. 我设 \(f_i\) 为 \(i\) 状态时最小分组数, \(g_i\) 为 \(i\) 状态时最后一组剩余空间. 对于每一个 \(i\) , ...

  6. Linux从头学06:16张结构图,彻底理解【代码重定位】的底层原理

    作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...

  7. Top10 应用都在用的Android最新知识

    相信各位对Jetpack并不陌生,自从 Google 在 2018 年推出 Jetpack 之后,它就成为了 Android 未来发展的指向标. 作为一名安卓工程师,我们以前会经常吐槽Android碎 ...

  8. OpenStack中VNC协议实现多屏共享(多屏不踢访问)

    OpenStack中VNC协议实现多屏共享 by 无若   libvirt设置基本说明:   <devices> <graphics type='sdl' display=':0.0 ...

  9. Seaborn基础画图实例

    使用seaborn画图时,经常不知道该该用什么函数.忘记函数的参数还有就是画出来的图单调不好看. 所以,本人对seaborn的一些常用的画图函数,并结合实例写成了代码,方便以后查询和记忆. 若代码或注 ...

  10. K8s 部署 Gitlab CI Runner

    K8s 版本:1.20.6 GitLab CI 最大的作用是管理各个项目的构建状态.因此,运行构建任务这种浪费资源的事情交给一个独立的 Gitlab Runner 来做就会好很多,而且 Gitlab ...