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面向用户的接口接口
update
方法更新状态值,经过value()
方法获取状态值。add
方法往列表中附加值;也能够经过get()
方法返回一个Iterable<T>
来遍历状态值。add
方法添加值的时候,会调用reduceFunction,最后合并到一个单一的状态值。add
方法中传入的元素类型不一样(这种状态将会在Flink将来版本中被删除)。put
或putAll
方法添加元素4.StateDescriptorip
State 既然是暴露给用户的,那么就须要有一些属性须要指定:state 名称、val serializer、state type info。在对应的statebackend中,会去调用对应的create方法获取到stateDescriptor中的值。Flink经过StateDescriptor
来定义一个状态。这是一个抽象类,内部定义了状态名称、类型、序列化器等基础信息。与上面的状态对应,从StateDescriptor
派生了ValueStateDescriptor
, ListStateDescriptor
等descriptorci
最后来一张较为全面的图get