主页 > 新闻资讯 > 大数据学习:Flink State状态管理解析

大数据学习:Flink State状态管理解析

作者:张老师 浏览次数: 2021-03-11 17:51
作为大数据流处理框架的代表作,Flink的地位是值得肯定的。相较于早前的Spark Streaming,Flink在实时流计算场景上,性能更加强劲,而这与Flink的有状态的流计算思想是分不开的。今天的大数据学习分享,我们就主要来讲讲,Flink State状态管理。

Flink作为纯流式大数据实时计算引擎,较于Spark Streaming的微批处理引擎,不管是内存管理,多流合并,还是时间窗口,迭代处理上,Flink都值得称赞。而Flink的State状态管理,更是让Flink在实时计算领域,更胜一筹。

大数据学习:Flink State状态管理解析

一、State状态分类

具体来说,Flink将状态(State)分为Keyed State与Operator State。

1、算子状态

算子状态(Operator State):顾名思义,状态是和算子进行绑定的,一个算子的状态不能被其他算子所访问到。

2、键控状态

键控状态(Keyed State):是一种特殊的算子状态,即状态是根据key值进行区分的,Flink会为每类键值维护一个状态实例。

二、State状态编程

1、键控状态

Flink提供了以下数据格式来管理和存储键控状态(Keyed State):

•ValueState:存储单值类型的状态。可以使用update(T)进行更新,并通过T value()进行检索。

•ListState:存储列表类型的状态。可以使用add(T)或addAll(List)添加元素;并通过get()获得整个列表。

•ReducingState:用于存储经过ReduceFunction计算后的结果,使用add(T)增加元素。

•AggregatingState:用于存储经过AggregatingState计算后的结果,使用add(IN)添加元素。

•FoldingState:已被标识为废弃,会在未来版本中移除,官方推荐使用AggregatingState代替。

•MapState:维护Map类型的状态。

以上所有增删改查方法不必硬记,在使用时通过语法提示来调用即可。

2、状态有效期

以上任何类型的keyed state都支持配置有效期(TTL),示例如下:

StateTtlConfig ttlConfig=StateTtlConfig
//设置有效期为10秒
.newBuilder(Time.seconds(10))
//设置有效期更新规则,这里设置为当创建和写入时,都重置其有效期到规定的10秒
.setUpdateType(StateTtlConfig.UpdateType.OnCreateAndWrite)
/*设置只要值过期就不可见,另外一个可选值是ReturnExpiredIfNotCleanedUp,
代表即使值过期了,但如果还没有被物理删除,就是可见的*/
.setStateVisibility(StateTtlConfig.StateVisibility.NeverReturnExpired)
.build();
ListStateDescriptor<Long>descriptor=newListStateDescriptor<>("abnormalData",Long.class);
descriptor.enableTimeToLive(ttlConfig);

3、算子状态

相比于键控状态,算子状态目前支持的存储类型只有以下三种:

•ListState:存储列表类型的状态。

•UnionListState:存储列表类型的状态,与ListState的区别在于:如果并行度发生变化,ListState会将该算子的所有并发的状态实例进行汇总,然后均分给新的Task;而UnionListState只是将所有并发的状态实例汇总起来,具体的划分行为则由用户进行定义。

•BroadcastState:用于广播的算子状态。

三、State状态管理器

默认情况下,所有的状态都存储在 JVM 的堆内存中,在状态数据过多的情况下,这种方式很有可能导致内存溢出,因此 Flink 提供状态管理器来存储状态数据,主要有以下三种:

•MemoryStateBackend

默认的方式,即基于 JVM 的堆内存进行存储,主要适用于本地开发和调试。

•FsStateBackend

基于文件系统进行存储,可以是本地文件系统,也可以是 HDFS 等分布式文件系统。

•RocksDBStateBackend

RocksDBStateBackend 是 Flink 内置的第三方状态管理器,采用嵌入式的 key-value 型数据库 RocksDB 来存储正在进行的数据。

关于大数据学习,Flink State状态管理,以上就为大家做了一个初步的讲解了。Flink流计算,对于状态的管理是非常重要的一个部分,在学习期间,也要深入去理解透彻。成都加米谷大数据,专业大数据培训机构,大数据开发、数据分析与挖掘,零基础班本月正在招生中,课程大纲及学习视频,可联系客服获取!
热点排行
推荐文章
立即申请>>