键控状态是根据输入数据流中定义的键(key)来维护和访问的。Flink 为每个键值维护一个状态实例,并将具有相同键的所有数据,都分区到同一个算子任务中,这个任务会维护和处理这个 key 对应的状态。当任务处理一条数据时,它会自动将状态的访问范围限定为当前数据的 key。因此,具有相同 key 的所有数据都会访问相同的状态。Keyed State 很类似于一个分布式的 key-value map 数据结构,只能用于 KeyedStream(keyBy 算子处理之后)。 Flink 的 Keyed State 支持以下数据类型: ValueState[T]保存单个的值,值的类型为 T。 get 操作: ValueState.value() set 操作: ValueState.update(value: T) ListState[T]保存一个列表,列表里的元素的数据类型为 T基本操作如下: ListState.add(value: T) ListState.addAll(values: java.util.List[T]) ListState.get()返回 Iterable[T] ListState.update(values: java.util.List[T]) MapState[K, V]保存 Key-Value 对。 MapState.get(key: K) MapState.put(key: K, value: V) MapState.contains(key: K) MapState.remove(key: K) ReducingState[T] AggregatingState[I, O] State.clear()是清空操作。