云数据流:一旦触发不起作用

时间:2017-08-14 01:27:18

标签: triggers google-cloud-dataflow

我有一个从无限来源读取的数据流管道。我的窗口大小是10小时,我试图使用TestStream测试我的触发器。如果元素计数达到窗口内相同键的至少2,则我的触发器将发出早期结果。我有以下触发器来实现这一目标:

input.apply(Window.into(FixedWindows.of(Duration.standardHours(12)))              .triggering(AfterWatermark.pastEndOfWindow()
        .withEarlyFirings(AfterPane.elementCountAtLeast(2)))
        .apply(Count.perElement())

我们也尝试过:

Repeatedly.forever(AfterPane.elementCountAtLeast(2)).orFinally(AfterWatermark.pastEndOfWindow())

我希望在断言结果时提前解雇,但是我没有得到所有结果

 PAssert.that(pipeline).inWindow(..)..

我做错了什么?同时运行相同的测试会产生不同的结果,这意味着从触发器返回不同的值。

1 个答案:

答案 0 :(得分:2)

触发是非确定性的。在触发条件满足后,它会在一段时间内提前触发。在再次满足触发条件后,它会在一段时间内再次提前触发。

触发后发出的实际选择由跑步者决定。如果您使用批处理运行程序,它可能会等到所有数据都可用。您希望每个键/窗口输入多少输入?你在用哪个跑步者?