flink状态管理
Flink状态管理是其实现有状态流处理的核心机制,主要分为托管状态(Managed State)和原始状态(Raw State)两类。托管状态由Flink框架统一管理,包括存储访问、故障恢复和重组等功能,而原始状态需用户自行管理数据结构及序列化。
状态分类
-
按键分区状态(Keyed State)
与特定键绑定,仅可通过KeyedStream
访问,支持以下数据结构:- ValueState:单值状态,通过
update()
和value()
方法操作。 - ListState:存储值的列表,支持
add()
和get()
遍历。 - MapState:键值对结构,类似Map接口。
- ReducingState/AggregatingState:通过聚合函数(如
reduceFunction
)合并状态。
- ValueState:单值状态,通过
-
算子状态(Operator State)
作用于算子任务实例,并行任务间不共享,常见类型包括:- 列表状态(ListState):存储一组数据列表。
- 广播状态(BroadcastState):全局只读状态,用于分发配置规则。
注:某个算子的并行度为2。则会生成两个状态实例。
状态生命周期与容错
- 状态TTL:通过配置生存时间(TTL)自动清理过期状态,适用于数据合规(如GDPR)或存储