Google cloud dataflow Dataflow.ElementCount至少(1)个,带有.pastEndOfWindow()保证

Google cloud dataflow Dataflow.ElementCount至少(1)个,带有.pastEndOfWindow()保证,google-cloud-dataflow,Google Cloud Dataflow,如果我有这样一个窗口: .apply(Window .<String>into(Sessions .withGapDuration(Duration.standardSeconds(10))) .triggering(AfterWatermark .pastEndOfWindow() .withEarlyFirings(AfterPane.elementCountAtLeast(1)) .withLate

如果我有这样一个窗口:

.apply(Window
    .<String>into(Sessions
        .withGapDuration(Duration.standardSeconds(10)))
    .triggering(AfterWatermark
        .pastEndOfWindow()
        .withEarlyFirings(AfterPane.elementCountAtLeast(1))
        .withLateFirings(AfterPane.elementCountAtLeast(1))));
.apply(窗口)
.进入(会议)
.withGapDuration(持续时间.标准秒(10)))
.触发(后水印)
.pastEndOfWindow()
.带早期点火(后窗格。元件计数至少(1))
.最晚点火(后窗格。元素计数至少(1));
它从Pub/Sub接收3个元素

是否保证该窗口将精确触发4次

是否保证将有:

  • 时间窗格上正好有一个(由通过窗口末尾的水印触发)
  • 正好3个其他窗格(早或晚),每个元素正好1个
我正在看,上面写着:

ON_时间窗格可能包含本地延迟元素。它甚至可能只包含本地延迟元素。如果本地延迟元素进入ON_时间窗格,其延迟将变得不可观察

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

元素在单个窗格中只是“新的”。假设没有空窗格,那么3个输入元素最多只能生成3个输出窗格。使用该触发器,可能会有一个空的ON_时间窗格。您还可以通过指定


如果延迟元素进入“按时”窗格中,它们将不会作为未来窗格的一部分重新激发(尽管如果累积激发的窗格,它们将继续被纳入结果中)。

只是一个澄清-什么是
ClosingBehavior
控制?在本例中,在延迟窗格或在
.withAllowedLateness()
之后生成的另一个窗格之前触发的ON_TIME窗格已从中通过,它似乎是针对
.withAllowedLateness()
的。如果是这种情况,即使没有新的数据,我也可以强制使用ON_时间窗格吗?
ClosingBehavior
控制最终窗格(
PaneInfo
中的
isFinal
)。当前的实现应该保证一个
ON_TIME
窗格,因为您有一个
AfterWatermark
触发器——它是否为空取决于元素如何划分为推测窗格和延迟窗格。