安阳网站关键词优化,雅虎搜索引擎首页,网站重新设计,顺企网宁波网站建设文章目录 一. 状态使用概览二. 状态的数据类型1. 算子层面2. 接口层面2.1. UML与所有状态类型介绍2.2. 内部状态#xff1a;InternalKvState 将知识与实际的应用场景、设计背景关联起来#xff0c;这是学以致用、刨根问底知识的一种直接方式。 本文介绍
状态数据管理#x… 文章目录 一. 状态使用概览二. 状态的数据类型1. 算子层面2. 接口层面2.1. UML与所有状态类型介绍2.2. 内部状态InternalKvState 将知识与实际的应用场景、设计背景关联起来这是学以致用、刨根问底知识的一种直接方式。 本文介绍
状态数据管理了解InternalKvState接口的设计以及KeyedState和OperatorState在实现上的区别状态数据初始化的流程了解有状态计算的底层实现原理。 一. 状态使用概览
flink中状态存在的意义是什么涉及到哪些场景。 实时聚合比如计算过去一小时内的平均销售额。这时你会需要使用到Flink的状态来存储过去一小时内的所有销售数据。窗口操作Flink SQL支持滚动窗口、滑动窗口、会话窗口等。这些窗口操作都需要Flink的状态来存储在窗口期限内的数据。状态的持久化与任务恢复实时任务挂掉之后为了快速从上一个点恢复任务可以使用savepoint和checkpoint。多流joinFlink至少存储一个流中的数据以便于在新的记录到来时进行匹配。 二. 状态的数据类型
从数据集与接口实现两个层面介绍状态分类与状态的全部类型
1. 算子层面
分类 根据DataStream数据集是否基于Key进行分组可将算子中的状态数据分为KeyedState和OperatorState两种类型。 应用位置 KeyedState用于经过DataStream.keyby()操作后形成的KeyedStream并按照Key对状态数据进行分区。OperatorState和并行的算子实例绑定与数据元素中的Key无关。每个算子实例中都持有一部分状态数据并支持在算子并行度发生变化时自动重新分配状态数据。 两者区别 2. 接口层面
状态数据通过统一的状态接口来表示并根据不同的状态数据类型和使用方式区分接口实现。如下 MapState用于存储分区的Key-Value类型状态数据此类型状态支持添加、更新和获取操作。ValueState用于单值类型的状态数据并支持获取和更新状态的方法ReadOnlyBroadcastState提供只读操作的BroadcastState仅提供get()、contains()等只读方法。 2.1. UML与所有状态类型介绍 BroadcastState用于存储BroadcastStream中的状态数据BroadcastState中的数据会被发送到指定算子的所有实例中并保证每个实例中的数据都相同。AppendingState支持累积操作的状态数据。写入的数据元素可以存储在类似List的Buffer数据结构中也可以聚合成单个Value进行存储。MergingState在AppendingState的基础上增加了合并状态的操作。两个MergingState实例可以合并成一个状态。AggregatingState用于支持基于AggregateFunction转换的状态数据通过状态中的AggregateFunction可以对接入的数据进行聚合计算产生聚合状态结果。ListState以数组结构类型存储状态数据用户可通过自定义函数访问和处理状态数据。ReducingState用于支持ReduceFunction操作状态给状态添加数据元素后通过ReduceFunction实现聚合。ReducingState只支持在KeyedStream中获取。 以上就是Flink支持的全部状态类型不管是用户还是Flink系统内部都基于这些状态接口实现状态数据的操作以满足有状态计算的需求。 2.2. 内部状态InternalKvState
InternalKvState接口中定义的方法不对用户开放在接口上会通过Internal进行标记专门用于系统内部访问状态数据的辅助操作方法。一方面是为了避免引起混淆另一方面是因为在各个发行版本中InternalKvState接口的方法是不稳定的。
在InternalKvState接口中提供了 获取和设定命名空间、获取Raw状态和合并状态的方法以及获取状态Key和Value等类型序列化器的方法。和状态接口作为所有状态数据的根节点相似InternalKvState也是所有内部状态的根节点。 不管是基于堆内存还是RocksDB实现的状态存储后端都同时继承和实现了InternalState接口和具体状态类型的接口。
例如 基于堆内存存储的状态类型有HeapAggregatingState、HeapListState及HeapReducingState等基于RocksDB存储的状态类型有RocksDBAggregatingState、RocksDBListState及RocksDBReducingState等。 参考《Flink设计与实现核心原理与源码解析》