Flink的State

    有状态的计算是流式计算框架的一个重要功能,很多复杂的计算场景都需要记录一下相关的状态。Flink State一种为了满足算子计算时需要历史数据需求的,使用 checkpoint 机制进行容错,存储在 state backend 的数据结构。

1.State分类

    Flink State被分为keyedstate、operatorstate、BroadcastState三种;keyedstate主要应用在keystream上,它的特点是同一个子任务的同一个key共享同一个state;另一个operatorstate主要应用应用在source和sink,它的特点是同一个子任务共享同一个state。BroadcastState同一个算子的多个 sub task 共享一个 state。

 

2.state数据结构

    state的数据结构包含ValueState 、MapState 、ListState三种结构。

ValueState 存储单个值,访问接口可能有两种,get 和 set,在 State 上体现的是 update(T) / T value()。
MapState 的状态数据类型是 Map,在 State 上有 put、remove等。
ListState 状态数据类型是 List,访问接口如 add、update 等。

  

存储大的对象时要慎用ValueState 。

3.state存储介质

    state可以存储到内存、文件、RocksDB。

基于内存的 MemoryStateBackend,状态存储在内存中,cp存储到jobmanager的内存中。
基于 HDFS 或 OSS 的 FsStateBackend,状态存储在taskmanger的内存中,在做 cp(checkpoint)时存到文件系统,文件系统可以是HDFS。
基于 RocksDB 的 RocksDBStateBackend,将对象序列化成二进制存在内存和本地磁盘的 RocksDB 数据中,并在 cp 时存到文件系统,文件系统可以是HDFS。

 

 

 

posted @ 2024-05-16 14:54  人不疯狂枉一生  阅读(61)  评论(0编辑  收藏  举报