欢迎光临
我们一直在努力

【Flink 30天】Day8-10 State 状态管理:5种 KeyedState + State TTL + RocksDB 选型

Day 8-10:State 状态

目标:懂为什么任务跑久了会 OOM、变慢。


1. 为什么需要状态

无状态算子:每条数据独立处理,没有记忆(如 map、filter)

有状态算子:需要访问历史数据才能计算出正确结果:

  • 窗口聚合(需要累积一段时间的数据)
  • 去重(需要记住之前见过哪些 key)
  • Join(需要缓存一侧数据等待关联)
  • 机器学习(在线更新模型参数)

2. Keyed State(最常用)

只能在 KeyedStream 中使用,每个 key 独立维护自己的状态。

2.1 ValueState(单值)

public class CountFunction extends KeyedProcessFunction<String, Event, Result> {


// 声明状态描述符(状态名 + 类型)
private ValueState<Long> countState;

@Override
public void open(Configuration parameters) {


ValueStateDescriptor<Long> desc =
new ValueStateDescriptor<>(\”count\”, Long.class);
countState = getRuntimeContext().getState(desc);
}

@Override
public void processElement(Event event, Context ctx, Collector<Result> out) throws Exception {


Long count = countState.value(); // 读取当前 key 的状态
if (count == null) count = 0L;
count++;
countState.update(count); // 更新状态

if (count >= 100)

赞(0)
未经允许不得转载:171主机测评 » 【Flink 30天】Day8-10 State 状态管理:5种 KeyedState + State TTL + RocksDB 选型
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址