码迷,mamicode.com
首页 > 其他好文 > 详细

Flink 状态

时间:2021-06-02 20:06:01      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:一个   输出   ken   nio   相同   tor   支持   组件   point   

Flink 状态

Flink状态:

  • 状态可以是历史结果,也可以是存储的数据,归根揭底是保存的内容就是状态。

  • 流式计算分为有状态的和无状态的:

    无状态的流处理:观察每个独立的事件,并根据最后一个事件的结果进行输出。
    有状态的流处理:基于多个事件输出结果。流与流之间的关联操作、流与静态表或动态表之间的关联操作都是有状态的。

Manage State:

  1. Operator State 算子状态: 可用于多种算子,通常用于Source,流入到该算子的数据可以访问和更新对应的状态。每个算子的子任务对应一个状态,且每个子任务间的状态不能互相访问。

    算子状态的基本数据结构:

    • ListState 列表状态: 将状态表示为一组数据的列表,将所有状态均匀分配给每个实例。
    • UnionlistState 联合列表状态: 也将状态表示为一组数据的列表,将所有状态合并为全量状态在发送给每个实例,与常规列表状态区别在于故障时从保存点启动应用程序如何恢复。
    • BroadCastList 广播状态:某个算子有多项任务且每个任务状态又相同时使用广播状态,可以用来对运行中的任务进行模式切换。
  2. Keyed State 键控状态:只适用于KeyedStream上的算子,每个Key对应一个状态,具有相同key的所有数据都会访问相同的状态。

    键控状态的基本数据结构:

    • ValueState: 保存单个值,每个Key都有一个状态,设置:‘update(T)‘,获取:‘get(T)‘。

    • ListState: 保存元素列表,每个列表有一个状态。添加:‘add(T)‘,获取:‘get(T)‘。

    • MapState:存储键值对列表,每个Map对应一个状态。与Map的使用相同。

    • ReduceState:存储单个值, 表示把所有元素的聚合结果添加到状态中,使用add时需要指定ReduceFunction进行聚合。

    • AggregatingState:存储单个值,与ReducingState类似,都是进行聚合.但是AggregatingState的聚合的结果和元素类型可以不一样.

      注意:所有类型的clear()方法都只能清空当前key的状态。

状态后端:

  • 状态后端主要负责两件事:本地状态管理(TaskManager)、将检查点状态写入远程存储。

  • 状态的存储、访问和维护由可插入的组件状态后端决定。

  • 为什么要维护本地状态?

    输入的每条数据都会触发带状态的算子读取和更新状态,有效的状态访问对于处理数据的低延时非常重要,所以要维护本地状态以确保快速访问状态。

  • 状态后端分类:

    1. MemoryStateBackend>

      存储方式:本地状态存储在TaskManager的内存,Checkpoint存储在JobManager的内存,都是内存。

      特点:速度最快,但是不安全,故障时会数据丢失。

    2. FsStateBackend>

      存储方式:本地状态存储在TaskManager的内存,Checkpoint存储在外部文件系统,如HDFS。
      特点:拥有内存级别的本地访问速度,和更好的容错保证,但是由于内存有限,数据量特别大时可能会OOM。

    3. RocksDBStateBackend>

      存储方式:本地状态存储在TaskManager的RocksDB数据库中,采用内存+磁盘,Checkpoint存储在外部文件系统。特点:所有状态序列化之后存储在本地KV形式的RocksDB数据库中,支持超大状态作业,要求作业读写性能不高。

      说明:RocksDBStateBackend单机,Flink内置无需安装,且唯一支持增量检查点。

    注:Flink多并行度下是不支持使用变量的,因为每个并行度都共享一份变量,而每个并行度中的不同分组同时拥有这份变量数据,这就会导致分组间的数据无法隔离,即使分了组不同的组之间使用的都是这份变量。因此凡是用到变量的地方都需要用状态替换。

Flink 状态

标签:一个   输出   ken   nio   相同   tor   支持   组件   point   

原文地址:https://www.cnblogs.com/yuexiuping/p/14837681.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!