开发者社区> 问答> 正文

Flink State根据数据结果分为几种

已解决

Flink State根据数据结果分为几种

展开
收起
提个问题 2024-06-09 12:05:29 7 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
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Flink CDC Meetup PPT - 龚中强 立即下载
Flink CDC Meetup PPT - 王赫 立即下载
Flink CDC Meetup PPT - 覃立辉 立即下载