数据流.elementCountAtLeast(1)与.pastEndOfWindow()保证

时间:2016-03-10 13:07:08

标签: google-cloud-dataflow

如果我有这样的窗口:

.apply(Window
    .<String>into(Sessions
        .withGapDuration(Duration.standardSeconds(10)))
    .triggering(AfterWatermark
        .pastEndOfWindow()
        .withEarlyFirings(AfterPane.elementCountAtLeast(1))
        .withLateFirings(AfterPane.elementCountAtLeast(1))));

它从Pub / Sub接收3个元素。

是否保证窗口会恰好触发4次?

是否保证会有:

  • 恰好一个ON_TIME窗格(由水印传递窗口结束触发)?
  • 正好3个其他窗格(EARLY或LATE),每个元素正好1个?

我正在查看Timing,并说:

  

ON_TIME窗格可能包含本地延迟元素。它甚至可能只包含本地后期元素。如果本地延迟元素进入ON_TIME窗格,则其迟到变得不可观察。

好的,ON_TIME窗格可以包含LATE元素,但是另一个窗格会被.withLateFirings(AfterPane.elementCountAtLeast(1))为ON_TIME窗格中的每个LATE元素触发,或者这些元素不会触发因为它们是ON_TIME窗格的一部分吗?

1 个答案:

答案 0 :(得分:1)

元素在单个窗格中仅为“新”。假设没有空窗格,那么3个输入元素应该最多导致3个输出窗格。使用该触发器,可能会有一个空的ON_TIME窗格。您还可以通过指定ClosingBehavior

来请求空白的最终窗格

如果后期元素进入ON_TIME窗格,则不会将它们作为未来窗格的一部分重新触发(尽管如果要累积已触发的窗格,它们将继续合并到结果中)。 / p>