如何使用批处理从DataFlow中的PubSub读取

时间:2017-11-29 16:10:57

标签: google-cloud-platform google-cloud-dataflow google-cloud-pubsub gcp

在Pubsub源代码的SDK 1.9.1中,有PubsubIO.Read.maxReadTimePubsubIO.Read.maxNumRecords方法可用。这些方法允许从pubsub消息创建有界集合,可以以批处理模式启动Dataflow管道。

如何使用Dataflow SDK 2.1实现类似功能?如何使用批处理模式从Dataflow管道中的Pubsub读取?

2 个答案:

答案 0 :(得分:1)

您不应尝试在批处理上下文中使用PubsubReader。相反,您应该使用提供的流式PubsubIO,并按照here所述设置窗口化策略。您可以使用“其他复合触发器”部分(如下所述)中所述的复合触发器来获取所需的行为。

Repeatedly.forever(AfterFirst.of(
      AfterPane.elementCountAtLeast(100),
      AfterProcessingTime.pastFirstElementInPane().plusDelayOf(Duration.standardMinutes(1))))

答案 1 :(得分:-1)

不幸的是,我在新版本的SDK中没有看到任何支持。我所做的是实现一个DoFn,从PubSub读取 maxReadTime maxNumRecords 并返回消息。

这就是他们在之前版本的SDK上所做的。您可以查看PubsubReader课程。

你必须这样称呼它:

 pipeline.begin()
            .apply(Create.of((Void) null)).setCoder(VoidCoder.of())
            .apply(ParDo. of(new MyPubsubReader(maxNumRecords, maxReadTime));
            .setCoder(coder);