Apache Flink 中的状态(State)是其流处理能力的核心,用于记忆过去的数据以影响未来的处理结果。Flink 将状态主要分为两大类:Keyed State(键控状态) 和 Operator State(算子状态)。 这两者的核心区别在于状态的作用域(Scope)以及在并行度发生变化(扩缩容)时状态如何重新分配。 以下是详细的对比和解析: --- 1. Keyed State (键控状态) 这是 Flink 中最常用的状态类型。 适用场景:只能用在 上,即在调用 算子之后。 作用域: 状态是根据 Key 来隔离的。 对于每一个 Key,都有一个独立的状态实例。 例如:如果你在统计每个用户的点击量,Key 是 ,那么 的计数器和 的计数器是完全隔离的。 数据结构:Flink 提供了丰富的接口来操作 Keyed State: : 保存单个值(如计数器)。 : 保存一个列表。 : 保存键值对映射。 : 保存聚合后的结果(通过 reduce 函数更新)。 : 保存聚合结果(比 Reducing 更通用)。 扩缩容(Rescaling)机制: Flink 使用 Key Group...