关于广播流和广泛的caset状态,我有两个问题。
- KeyedBroadcastProcessFunction#Context有以下方法(getBroadcastState(,我想问一下为什么它使用映射状态描述符来进行广泛的强制转换状态?我认为广义强制转换状态应该使用类似BroadcastStateDescriptor的东西,映射状态描述符用于MapState
公共摘要<K、 V>BroadcastState<K、 V>getBroadcastState(最终MapStateDescriptor<K、 V>stateDescriptor(;
- DataStream#广播方法定义如下:
def broadcast(broadcastStateDescriptors: MapStateDescriptor[_, _]*): BroadcastStream[T] = { if (broadcastStateDescriptors == null) { throw new NullPointerException("State Descriptors must not be null.") } javaStream.broadcast(broadcastStateDescriptors: _*) }
我想问broadcastStateDescriptors
的参数用于什么?为什么我在播放流时必须这么早提供它?我想我可以在KeyedBroadcastProcessFunction#processBroadcastElement中创建描述符并在需要时获得广播状态,操作员在这里接收广播元素并更新广播状态。
-
MapState
是Flink支持广播的状态类型(也是唯一一种状态(。由于广播状态总是MapState
,因此使用MapStateDescriptor
来处理它 -
Flink需要知道如何序列化正在广播的数据;CCD_ 5被CCD_ 6用于此目的。