flink有状态计算中状态的分类

在 Apache Flink 的状态计算中,状态主要分为以下两类:

1. Keyed State

  • 定义:与特定键(Key)关联的状态,每个键独立维护其状态数据。
  • 特点 :
    • 作用域为当前键,不同键的状态互不影响。
    • 仅能在 KeyedStream 的函数(如 map()、flatMap())中访问。
  • 存储结构 :
    • ValueState<T>:存储单值,例如: \\text{计数器}
    • ListState<T>:存储列表,例如: \\text{窗口内事件列表}
    • MapState<K, V>:存储键值对,例如: \\text{用户行为映射表}
    • ReducingState<T>:聚合状态(已弃用,推荐用 AggregatingState)

2. Operator State

  • 定义:与算子实例(Operator Instance)绑定的状态,不依赖数据键。
  • 特点 :
    • 作用域为整个算子,所有输入数据共享同一状态。
    • 可在非 KeyedStream 的算子(如 Source、Sink)中使用。
  • 存储结构 :
    • ListState<T>:用于存储列表形式的状态(如 Kafka 偏移量)。
    • BroadcastState<K, V>:用于广播状态至下游所有并行实例。

核心区别

特性 Keyed State Operator State
作用域 按键分区 算子实例级
访问限制 仅限相同键的数据 所有输入数据均可访问
典型应用 窗口聚合、状态机(如 CEP) 全局配置、源/接收器状态

状态作用域示意图

\\begin{array}{c\|c} \\text{Keyed State} \& \\text{Operator State} \\ \\hline \\begin{array}{c} \\text{Key=1} \\ \\downarrow \\ \\text{State A} \\ \\end{array} \& \\begin{array}{c} \\text{Operator} \\ \\downarrow \\ \\text{Global State} \\ \\end{array} \\ \\begin{array}{c} \\text{Key=2} \\ \\downarrow \\ \\text{State B} \\ \\end{array} \& \\end{array}

最佳实践

  • Keyed State:适用于需要分区隔离的场景(如用户会话分析)。
  • Operator State:适用于全局状态管理(如动态规则更新)。

通过合理选择状态类型,可优化资源利用并保障计算一致性。

相关推荐
CarIise7 小时前
SpringMVC 异常处理与拦截器
大数据·spring
橙露9 小时前
git简明教程以及资源分享
大数据·git
数字新视界10 小时前
一体化机柜在数据中心运维中的创新应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
FinelyYang10 小时前
考试系统简答题 AI 阅卷:覆盖度驱动、异步评分与人机协同落地实践
java·大数据·人工智能
SelectDB10 小时前
从 StarRocks 走向 Apache Doris:如何实现引擎平滑替换与架构升级?
大数据·数据库·数据分析
大大大大晴天10 小时前
每天认识一个组件:JanusGraph
大数据
数字新视界12 小时前
信创机房动环监控技术在智能运维中的应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
清华kenny13 小时前
中医馆如何参考安徽亳州中医AI健康辨识仪品牌排名前十
大数据·人工智能·安徽晓得养
GlobalInfo14 小时前
全球及中国机器人现场部署服务行业研究报告(2026版):市场现状、行业前景与占有率分析
大数据·运维·人工智能
Elastic 中国社区官方博客15 小时前
5 分钟内将 56 页扫描文档转化为带引用的答案:面向搜索无法读取的文档的检索增强生成流水线
大数据·运维·人工智能·elasticsearch·搜索引擎·信息可视化·全文检索