开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink 中什么是 operator state

Flink 中什么是 operator state

展开
收起
一人吃饱,全家不饿 2021-01-05 23:10:36 1815 0
2 条回答
写回答
取消 提交回答
  • Android系统与应用研发7年,专注于系统性能问题处理、开发流程工具研发、SDK组件研发工作。 服务端研发2年,前后使用Golang, RoR搭建后端服务程序。

    Flink 有两种常见的 State类型:

    1. Keyed State (键控状态)
    2. Operator State(算子状态)

    Keyed State(键控状态)

    Keyed State:顾名思义就是基于 KeyedStream 上的状态,这个状态是跟特定的Key绑定的。KeyedStrean 流上的每一个Key,都对应一个 State。Flink针对Keyed State提供了以下可以保存 State 的数据结构:

    • ValueState :保存一个可以更新和检索的值(如上所述,每个值都对应到当前的输入数据的 Key,因此算子接收到的每个Key都可能对应一个值)。这个值可以通过 update(T)进行更新,通过 T value() 进行检索。

    • ListState :保存一个元素的列表。可以往这个列表中追加数据,并在当前的列表上进行检索。可以通过 add(T) 或者 addAll(List ) 进行添加元素,通过 Iterable get() 获取整个列表。还可以通过 update(List ) 覆盖当前的列表。

    • ReducingState :保存一个单值,表示添加到状态的所有聚合。接口与ListState 类似,使用 add(T)增加元素,会使用提供的 ReduceFunction 进行聚合

    • AggregatingState<IN.OUT>:保留一个单值,表示添加到状态的所以值得聚合。和ReducingState 相反得是,聚合类型可能与添加到状态得元素得类型不同。接口与 ListState 类似,但使用 add(IN) 添加的元素会用指定的 AggregateFunction 进行聚合。

    • FoldingState<T,ACC>:保留一个单值,表示添加到状态的所有值的聚合。与 ReducingState 相反,聚合类型可能与添加到状态的元素类型不同。接口与ListState类型,但使用 add(T) 添加的元素会用指定的FoldFunction 折叠成聚合值。

    • MapState<UK,UV>:维护了一个添加映射列表。你可以添加键值对到状态中,也可以获得反映当前所有映射的迭代器。使用 put(UK,UV) 或者 putAll(Map<UK,UV>) 分别检索映射、键和值的可迭代视图。

    Operator State(算子状态)

    Operator State 与 Key 无关,而是与 Operator 绑定,整个 Operator 只对应一个 State。比如:Flink 中的 Kafka Connector 就使用了 Operator State,它会在每个 Connector 实例中,保存该实例消费 Topic 的所有(partition,offset)映射。

    2021-03-03 17:00:26
    赞同 展开评论 打赏
  • operator state 是和特定算子的一个实例绑定的,整个算子只对应一个State,常见的 operator state 是 source state,例如记录当前 source 的 offset

    2021-01-05 23:10:48
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

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