广播状态基本概念:所有并行任务实例将状态数据作为持久化的内部状态来维护,而非通过广播方式发送给其他流处理器。这种设计使每个实例都能独立处理状态数据,同时与来自广播流的事件协同处理。
适用场景:
- 低吞吐量数据流与高吞吐量数据流关联处理
- 动态调整处理逻辑的应用场景
典型案例:实时欺诈检测系统——交易数据流作为高吞吐量主数据流,规则更新流作为低吞吐量广播流,处理引擎可动态加载最新欺诈检测规则,无需停止或重启处理管道。
代码实现要点:
- 使用
MapStateDescriptor定义广播状态 - 通过
.broadcast()方法将模式流广播到下游所有算子 - 使用
KeyedBroadcastProcessFunction处理键控流与广播流的连接
核心方法:
processBroadcastElement():为广播流的每个记录调用,负责处理广播流中的更新数据(如最新模式规则)processElement():为键控流的每个记录调用,只能读取广播状态,执行模式匹配检测
运行测试结果:
匹配失败: 1003
匹配成功: 1001
匹配失败: 1002
3> (1001,icu.wzk.BroadCastDemo$MyPattern@6d1e6dc7)