参考地址: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. Spring 学习笔记(2) Spring Bean

    一.IoC 容器 IoC 容器是 Spring 的核心,Spring 通过 IoC 容器来管理对象的实例化和初始化(这些对象就是 Spring Bean),以及对象从创建到销毁的整个生命周期.也就是管 ...

  2. centos7 几种修改系统时区的方法

    1.  # cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # ln -sf /usr/share/zoneinfo/Asia/Shanghai ...

  3. 传统.NET 4.x应用容器化体验(5)

    前面几篇都是基于阿里云ECS直接玩的,有童鞋问直接用Windows Server 2019可以玩不,本篇就为你介绍一下如何给Windows Server 2019配置Docker环境. 1 准备工作 ...

  4. Guass消元总结

    Guass消元 约旦·高斯消元法 求线性方程组 我们用一个\(n*(n+1)\)的矩阵存储线性方程组各项系数和零次项系数. 每一次找到一个未知数系数最大的方程,交换当前行方程和该方程,并将其他行该未知 ...

  5. [SHOI2014]概率充电器 题解

    注意到本题的贡献是不带权的,所以期望其实就是每个点的概率之和. 本题正着做好像不是很好做,要考虑 \(P(A+B)=P(A)+P(B)-P(A)P(B)\) 的容斥(因为这是两个条件至少满足一个,所以 ...

  6. 搭建SAMBA服务

    说明:这里是Linux服务综合搭建文章的一部分,本文可以作为单独搭建SABMA服务的参考. 注意:这里所有的标题都是根据主要的文章(Linux基础服务搭建综合)的顺序来做的. 如果需要查看相关软件版本 ...

  7. Linux基础服务搭建综合

    Linux服务综合搭建的文章目录 =============================================== 1.foundation创建yum仓库 2.部署DNS 3.将YUM源 ...

  8. Web的工作原理(二)

    1.工作过程:如下图所示描述了Web的工作原理. (1) 用户打开计算机(客户机),启动浏览器程序,并在浏览器中指定一个URL(Uniform Resource Locator,统一资源定位器),浏览 ...

  9. 第七篇 -- 添加CSV Data Set Config

    参考链接:https://blog.csdn.net/vv19910825/article/details/82773220 先来看看我们开启的接口 @RequestMapping(value = & ...

  10. 深入刨析tomcat 之---第2篇,解决第3章bug 页面不显示内容http://localhost:8080/servlet/ModernServlet?userName=zhangyantao&password=1234

    writedby 张艳涛7月2日, 在学习第4张的过程中,发现了前一篇文章写的是关于1,2张的bug不用设置response响应头,需要在servlet的service()方法里面写是错误想 serv ...