Flink状态管理
状态类型:KeyedState、OperatorState
一、KeyedState
KeyedState:基于KeyedStream上的状态。状态是跟key绑定的。每一个key对应一个state。所以用之前必须先分组。
1.ValueState
保存一个可以更新和检索的值。通过update(T)进行更新,通过T Value()进行检索。
2.ListState
保存一系列元素的列表。可以往这个列表中追加数据。
添加元素:add(T)或add(List)
获取整个列表:Iterable get()
更新:update(List),更新当前的列表
3.MapState
维护了一个映射列表。可以添加键值对到状态中,可以获得所有键值对放入迭代器。
更新状态中的元素:put(uk,uv)或putAll(Map<uv,uk>)
遗留问题:MapState添加值后需要更新,如何显性更新MapState。
4.ReducingState
保存一个单值,表示添加到状态的所有聚合。接口与ListState类似,使用add()增加元素,使用提供的ReducFunction进行聚合。
5.AggregatingState
保留一个单值,表示添加到状态的所有聚合。接口与ListState类似,使用add()增加元素,会使用AggregateFunction进行聚合。
6.FoldingState
保存一个单值,表示添加到状态的所有值的聚合。与ReducingState相反,聚合类型能与添加到状态的元素类型不同。与ListState类型相同,但使用add()添加元素会用指定的FoldFunction折叠整聚合值。