GroupByKey不会在带有窗口的很长的PTransform上更新

时间:2019-06-18 16:37:02

标签: apache-beam

我正在研究在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长时间运行,我仍希望早期触发器仍会触发。

实际:我似乎无法尽早触发工作。

有什么建议吗?

0 个答案:

没有答案