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 的算子(如 SourceSink)中使用。
  • 存储结构
    • 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:适用于全局状态管理(如动态规则更新)。

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

相关推荐
Dxy123931021622 分钟前
Elasticsearch 8如何做好标题搜索
大数据·elasticsearch
飞Link43 分钟前
【Hive】Linux(CentOS7)下安装Hive教程
大数据·linux·数据仓库·hive·hadoop
景联文科技1 小时前
景联文 × 麦迪:归一医疗数据枢纽,构建AI医疗新底座
大数据·人工智能·数据标注
斯普信云原生组1 小时前
Elasticsearch(ES) 内存 CPU 过高问题排查报告
大数据·elasticsearch·搜索引擎
hqyjzsb1 小时前
2026年AI证书选择攻略:当“平台绑定”与“能力通用”冲突,如何破局?
大数据·c语言·人工智能·信息可视化·职场和发展·excel·学习方法
xinyaokeji2 小时前
认准高精度:基恩士 VL 扫描仪为三维测量优选之选
大数据·人工智能
小白学大数据2 小时前
海量小说数据采集:Spark 爬虫系统设计
大数据·开发语言·爬虫·spark
弘毅 失败的 mian2 小时前
Git 分支管理
大数据·经验分享·笔记·git·elasticsearch
彬匠科技BinJiang_tech2 小时前
对账太耗时?跨境ERP实现物流商/供应商自动化对账
大数据·运维·自动化
weilaikeqi11112 小时前
宠物护理技术革命:“微米银”正在改写传统抗菌方式?
大数据·人工智能·宠物