广播状态基本概念:所有并行任务实例将状态数据作为持久化的内部状态来维护,而非通过广播方式发送给其他流处理器。这种设计使每个实例都能独立处理状态数据,同时与来自广播流的事件协同处理。

适用场景

  1. 低吞吐量数据流与高吞吐量数据流关联处理
  2. 动态调整处理逻辑的应用场景

典型案例:实时欺诈检测系统——交易数据流作为高吞吐量主数据流,规则更新流作为低吞吐量广播流,处理引擎可动态加载最新欺诈检测规则,无需停止或重启处理管道。

代码实现要点

  • 使用 MapStateDescriptor 定义广播状态
  • 通过 .broadcast() 方法将模式流广播到下游所有算子
  • 使用 KeyedBroadcastProcessFunction 处理键控流与广播流的连接

核心方法

  • processBroadcastElement():为广播流的每个记录调用,负责处理广播流中的更新数据(如最新模式规则)
  • processElement():为键控流的每个记录调用,只能读取广播状态,执行模式匹配检测

运行测试结果

匹配失败: 1003
匹配成功: 1001
匹配失败: 1002
3> (1001,icu.wzk.BroadCastDemo$MyPattern@6d1e6dc7)