我正在研究在Google Cloud Dataflow中运行的Java Java Beam Beam(2.13.0)流管道。我有一个运行时间很长的PTransform(对于一个输入,它会做很多工作,输出多个输出,可能要花费10分钟以上的时间。)
我想将处理的早期结果返回给用户。之后我有一个窗口并合并步骤。早期触发器似乎不适用于长时间运行的PTransform。在PTransform完成对元素的处理之后(而不是返回早期结果),Combine步骤将输出元素。
我已经尝试了许多不同的早期Window功能。例如。我尝试做永远元素计数触发器,并且它不起作用。永远保持同等处理基于时间的触发器(例如,每10个处理秒)。我已经尝试过GlobalWindows,Fixed Windows,Session Windows等。
这是我正在做的粗略的伪代码。
p.apply(PubsubIO.readStrings().fromSubscription(options.getInput()));
.apply(FlatMapElements.via(new LongRunningCalculation()))
.apply(<I've tried a variety of window functions>)
.apply(Combine.perKey(new SumMetrics()))
.apply(DatastoreIO.v1().write().withProjectId(options.getProject()));
对于Window函数,我尝试了许多不同的Window函数,以查看是否可以早日归还任何东西。我无法让它早日返回。
这是一个基本的。
Window.into(new GlobalWindows())
.triggering(Repeatedly.forever(AfterPane.elementCountAtLeast(10)))
.withAllowedLateness(Duration.ZERO)
.discardingFiredPanes());
即使对于这一步,即使Window已添加>> 10个元素,“合并”步骤中的GroupBy也不会输出任何行。
预期:如果我运行的PTransform长时间运行,我仍希望早期触发器仍会触发。
实际:我似乎无法尽早触发工作。
有什么建议吗?