表示和Key相干的一种State, 只能用于KeyedStream范例数据集对应的Function和Operator之上,KeyedState是OperatorState的特例,区别在于KeyedState事先按照Key对数据集进行了区分,每个KeyState仅对应一个Operator和Key的组合。
KeyedState可以通过KeyGroups进行管理,主要用于当算子并行度发生变革时,自动重新分布KeyedState数据。在系统运行过程中,一个Keyed算子实例大概运行一个大概多个KeyGroups的Keys。
Operator State
与 Keyed State 差别的是,Operator State 只和并行的算子实例绑定,和数据元素中的Key无关,每个算子实例中持有全部数据元素中的一部分状态数据。Operator State 支持算子实例并行度发生变革时自动重新分配状态数据。
同时在Flink中KeyedState和OperatorState均具有两种形式,此中一种为托管状态(Managed State)形式,由FlinkRuntime中控制和管理状态数据,并将状态数据转换为内存HashTables或RocksDB的对象存储,然后将这些状态数据通过内部的接口长期话到CheckPoints中,使命非常时可以通过这些状态数据恢复使命。另外一种是原生状态(Row State)形式,由算子本身管理数据布局,当触发CheckPoint中,当从CheckPoint恢复使命时,算子本身再返序列化出状态的数据布局。
DataStreamAPI支持使用ManagedState和RawState两种状态形式,在Flink中推荐用户使用ManagedState管理状态数据,主要缘故原由是ManagedState可以或许更好地支持状态数据的重平衡以及更加完善的内存管理。
状态描述