【问题标题】:flink broadcast stream and broadcast stateflink 广播流和广播状态
【发布时间】:2020-12-18 17:43:09
【问题描述】:

关于广播流和广泛的案例状态,我有以下两个问题,有人可以帮忙回答吗?谢谢!

  1. KeyedBroadcastProcessFunction#Context有如下方法(getBroadcastState),请问为什么广播状态要用map状态描述符?我认为广播状态应该使用 BroadcastStateDescriptor 之类的东西,而地图状态描述符用于 MapState?

public abstract BroadcastState getBroadcastState(final MapStateDescriptor stateDescriptor);

  1. DataStream#broadcast方法定义如下:
  def broadcast(broadcastStateDescriptors: MapStateDescriptor[_, _]*): BroadcastStream[T] = {
    if (broadcastStateDescriptors == null) {
      throw new NullPointerException("State Descriptors must not be null.")
    }
    javaStream.broadcast(broadcastStateDescriptors: _*)
  }

我会问broadcastStateDescriptors 的参数是做什么用的?为什么我必须在广播流时这么早提供它?我想我可以在需要时在 KeyedBroadcastProcessFunction#processBroadcastElement 中创建描述符并获取广播状态,其中操作员接收广播元素并更新广播状态。

【问题讨论】:

    标签: apache-flink


    【解决方案1】:
    1. MapState 是 Fl​​ink 支持广播的一种状态(也是唯一一种状态)。由于广播状态始终为MapState,因此使用MapStateDescriptor 来处理它。

    2. Flink 需要知道如何序列化正在广播的数据; broadcastStateDescriptorsDataStream#broadcast 用于此目的。

    【讨论】:

    • 感谢@david-anderson 的大力帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    相关资源
    最近更新 更多