flink系列(10)-状态State和状态描述StateDescriptor

1. state的整个继承图以下spa

2.3d

InternalKVState 提供了只对 Flink 引擎暴露的接口好比 namespace set/get、val get、namespace merging,这些接口并不稳定,Flink 引擎但愿对上层应用屏蔽,而经过 State 接口暴露出来的方法普通用户是能够使用的。code

用户拿到 InternalKVState 的具体实现 HeapXXXState/RocksDBXXXState 后,即可以对背后的存储进行状态读写blog

2.1内部状态接口继承

2.2面向用户的接口接口

 

  • ValueState:即类型为T的单值状态。这个状态与对应的key绑定,是最简单的状态了。它能够经过update方法更新状态值,经过value()方法获取状态值。
  • ListState:即key上的状态值为一个列表。能够经过add方法往列表中附加值;也能够经过get()方法返回一个Iterable<T>来遍历状态值。
  • ReducingState:这种状态经过用户传入的reduceFunction,每次调用add方法添加值的时候,会调用reduceFunction,最后合并到一个单一的状态值。
  • FoldingState:跟ReducingState有点相似,不过它的状态值类型能够与add方法中传入的元素类型不一样(这种状态将会在Flink将来版本中被删除)。
  • MapState:即状态值为一个map。用户经过putputAll方法添加元素

4.StateDescriptorip

State 既然是暴露给用户的,那么就须要有一些属性须要指定:state 名称、val serializer、state type info。在对应的statebackend中,会去调用对应的create方法获取到stateDescriptor中的值。Flink经过StateDescriptor来定义一个状态。这是一个抽象类,内部定义了状态名称、类型、序列化器等基础信息。与上面的状态对应,从StateDescriptor派生了ValueStateDescriptorListStateDescriptor等descriptorci

  • ValueState getState(ValueStateDescriptor)
  • ReducingState getReducingState(ReducingStateDescriptor)
  • ListState getListState(ListStateDescriptor)
  • FoldingState getFoldingState(FoldingStateDescriptor)
  • MapState getMapState(MapStateDescriptor)

最后来一张较为全面的图get

相关文章
相关标签/搜索