Flink State根据数据结果分为几种
已解决
收起
提个问题
2024-06-09 12:05:29
29
0
1
条回答
写回答
取消
提交回答
-
Flink 有两种常见的 State类型:
Keyed State (键控状态)
Keyed State:顾名思义就是基于KeyedStream上的状态,这个状态是跟特定的Key绑定的。KeyedStrean流上的每一个Key,都对应一个State。Flink针对Keyed State提供了以下可以保存State的数据结构:
1:ValueState :保存一个可以更新和检索的值(如上所述,每个值都对应到当前的输入数据的Key,因此算子接收到的每个Key都可能对应一个值)。这个值可以通过update(T)进行更新,通过T value()进行检索。
2:ListState :保存一个元素的列表。可以往这个列表中追加数据,并在当前的列表上进行检索。可以通过add(T)或者addAll(List ) 进行添加元素,通过Iterable get()获取整个列表。还可以通过update(List )覆盖当前的列表。
3:ReducingState :保存一个单值,表示添加到状态的所有聚合。接口与ListState类似,使用add(T)增加元素,会使用提供的ReduceFunction进行聚合
4:AggregatingState:保留一个单值,表示添加到状态的所以值得聚合。和ReducingState相反得是,聚合类型可能与添加到状态得元素得类型不同。接口与ListState类似,但使用add(IN)添加的元素会用指定的。 AggregateFunction进行聚合。
5:FoldingState:保留一个单值,表示添加到状态的所有值的聚合。与 ReducingState相反,聚合类型可能与添加到状态的元素类型不同。接口与ListState类型,但使用add(T)添加的元素会用指定的FoldFunction折叠成聚合值。
6:MapState:维护了一个添加映射列表。可以添加键值对到状态中,也可以获得反映当前所有映射的迭代器。使用put(UK,UV)或者putAll(Map)分别检索映射、键和值的可迭代视图。
Operator State(算子状态)
Operator State与Key无关,而是与Operator绑定,整个Operator只对应一个State。比如:Flink中的Kafka Connector就使用了Operator State,它会在每个Connector实例中,保存该实例消费Topic的所有(partition,offset)映射。
2024-06-09 12:05:31