在Pubsub源代码的SDK 1.9.1中,有PubsubIO.Read.maxReadTime和PubsubIO.Read.maxNumRecords方法可用。这些方法允许从pubsub消息创建有界集合,可以以批处理模式启动Dataflow管道。
如何使用Dataflow SDK 2.1实现类似功能?如何使用批处理模式从Dataflow管道中的Pubsub读取?
答案 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);