我有一个从无限来源读取的数据流管道。我的窗口大小是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(..)..
我做错了什么?同时运行相同的测试会产生不同的结果,这意味着从触发器返回不同的值。
答案 0 :(得分:2)
触发是非确定性的。在触发条件满足后,它会在一段时间内提前触发。在再次满足触发条件后,它会在一段时间内再次提前触发。
触发后发出的实际选择由跑步者决定。如果您使用批处理运行程序,它可能会等到所有数据都可用。您希望每个键/窗口输入多少输入?你在用哪个跑步者?