使 Beam 中的运算符独立于 Google 数据流

Make operator in Beam independent on Google Dataflow

我目前 运行在 Apache Beam 中为 Google Dataflow 使用 Nexmark 基准测试套件,我想根据需要对其进行一些自定义。

更具体地说,我正在根据我的自定义工作负载测试 Dataflow 的自动缩放功能,并且我希望工作负载生成器是独立的,以免它屈服于背压并减慢速度。

事件生成的当前代码如下所示:

  /** Return source of events from Pubsub. */
  private PCollection<Event> sourceEventsFromPubsub(Pipeline p) {
    NexmarkUtils.console("Reading events from Pubsub %s", pubsubSubscription);

    PubsubIO.Read<PubsubMessage> io =
        PubsubIO.readMessagesWithAttributes()
            .fromSubscription(pubsubSubscription)
            .withIdAttribute(NexmarkUtils.PUBSUB_ID);
    if (!configuration.usePubsubPublishTime) {
      io = io.withTimestampAttribute(NexmarkUtils.PUBSUB_TIMESTAMP);
    }

    return p.apply(queryName + ".ReadPubsubEvents", io)
        .apply(queryName + ".PubsubMessageToEvent", ParDo.of(new PubsubMessageEventDoFn()));
  }

是否有关于如何在其独占工作器上将其修改为 运行 的文档?有点像 Flink 的 slotSharingGroup 能力。

您可以将管道分成 2 个管道:一个读取 Pub/Sub -> 生成事件 -> 写入中间 Pub/Sub 主题,另一个通过中间 Pub/Sub 消耗事件主题。

除此之外,无法明确控制 Dataflow 如何为管道的不同阶段配置资源。