参考地址: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. Pytest单元测试框架之setup/teardown模块示例操作

    """模块级(setup_module/teardown_module)开始于模块始末,全局的函数级(setup_function/teardown_function)只 ...

  2. 微信小程序云开发-数据库-用户更新数据并提交

    一.wxml增加input输入框和[更新商品价格]按钮 在商品详情页新增[更新商品价格]按钮,wxml新增部分代码,input绑定事件,用于获取用户输入的内容.按钮绑定事件,用于更新商品价格.  二. ...

  3. FiddlerEverywhere 的配置和基本应用

    一.下载大家自行在官网下载即可,这个可以当做是fiddler的升级版本,里面加了postman的功能,个人感觉界面比较清晰简约,比较喜欢. 二.下载完成之后大家可以自行注册登录,主页面的基本使用如下: ...

  4. Jmeter入门 浏览器设置代理服务器和录制脚本

    第一步: 可以设置浏览器代理,本文章推荐使用火狐浏览器 在浏览器-首选项--网络设置里面设置代理服务器 注意:端口号可以自行设置,但是不可以与本机其他代理产生冲突 第二步: 打开jmeter工具,添加 ...

  5. erase

    erase详细解释及原理 我们先定义一个字符串string string.erase(iterator) iterator表示要删除元素的迭代器. string.erase(it_begin,it_e ...

  6. C++第三十四篇 -- 安装Windows Driver后,编译以前项目出现打不开lib文件

    VS2017默认是没有安装WDK的,但是我们写驱动文件的话需要用到WDK.不过安装了WDK后,发现以前一些正常的项目在Release模式下编译会报LINK1104,无法打开.lib的错误 针对这个错误 ...

  7. 01MATLAB导论

    MATLAB语言的主要功能 数值计算 符号计算 图形绘制 程序流程控制 工具箱 课程的学习目标 要求理解MATLAB功能实现的数学背景与算法原理 掌握利用MATLAB进行问题求解的基本规律 能够利用M ...

  8. js中判断数据类型的四种方法总结

    js中判断数据类型的四种方法 前言 在js中,我们经常需要判断数据的类型,那么哪些方法可以用来判断数据的类型呢?哪种方法判断数据类型最准确呢? 我们来一个个分析: 1.typeof typeof是一个 ...

  9. Python脚本文件中使用中文

    Python做图形用户界面(GUI)开发时经常要在界面上显示中文,需要做如下处理(详见[1]和[2]2.3节): 在py文件的首行写上:# -- coding:utf-8 -- 保存py文件时要存为u ...

  10. Package Repository for Ubuntu Offline Installation

    For example, we need install "unzip" command on a Ubuntu machine without Internet. On a on ...