PubsubIO.readStrings多久从订阅中获取

时间:2018-02-07 16:10:35

标签: google-cloud-dataflow apache-beam google-cloud-pubsub

我试图更好地理解Beam / Dataflow概念,所以假装我有以下流媒体管道:

pipeline
    .apply(PubsubIO.readStrings().fromSubscription("some-subscription"))
    .apply(ParDo.of(new DoFn<String, String>() {
      @ProcessElement
      public void processElement(ProcessContext c) {
        String message = c.element();

        LOGGER.debug("Got message: {}", message);

        c.output(message);
      }
}));
  1. 无限来源多久会从订阅中提取消息?这是否可配置(可能基于窗口/触发器)?

  2. 由于没有定义自定义窗口/触发器,并且没有接收器(只是一个ParDo记录并重新输出消息),我的ParDo是否会在收到消息时立即执行,并且是以任何方式设置有问题(没有定义任何窗口/触发器/接收器)?

1 个答案:

答案 0 :(得分:3)

它将连续从订阅中提取消息 - 一旦消息到达,它将立即处理(模数网络和RPC延迟)。

窗口化和触发器根本不会影响它 - 它们只会影响数据在分组操作(GroupByKey和Combine)中的分组方式。如果你的管道没有分组操作,那么窗口和触发器基本上都是无操作。

Beam模型没有接收器的概念 - 写入各种存储系统(例如写入文件,写入BigQuery等)是作为常规Beam复合变换实现的,由ParDo和{{1}组成像其他任何东西一样。例如。将每个元素写入自己的文件可以由GroupByKey实现,ParDo打开文件,将元素写入文件并关闭文件。