知识卡片

Flink状态原语的选择

专业/工作 · 501.b.1

内容

Flink没有只提供一种”通用状态”,而是按数据结构和访问模式拆出五种状态原语:ValueState存单个值,适合累加器这类场景;ListState存同类型元素的列表,适合需要保留一段历史序列的场景;ReducingState在写入时就把新值和旧值用聚合函数合并成一个值(输入输出类型相同),适合”边写边聚合”且不需要看中间过程的场景;AggregatingState和ReducingState类似但允许输入类型和输出类型不同(比如输入订单、输出订单总数),更灵活;MapState维护键值对集合,适合需要按二级Key查找的场景。这种拆分的意义在于让状态后端可以针对不同访问模式做专门优化,而不是所有状态都退化成一个不透明的对象反复整体读写。

参考来源

《Flink入门与实战》第4章《状态管理及容错机制》