Apache Beam使用早期触发器触发窗格的次数

时间:2017-12-11 19:47:17

标签: google-cloud-platform google-cloud-dataflow apache-beam

在流式光束流水线中,触发器设置为

Window.into(FixedWindows.of(Duration.standardHours(1)))
              .triggering(AfterWatermark
                            .pastEndOfWindow()
                            .withEarlyFirings(AfterProcessingTime
                                    .pastFirstElementInPane()
                                    .plusDelayOf(Duration.standardMinutes(15))))
              .withAllowedLateness(Duration.standardHours(1))
              .accumulatingFiredPanes())
  1. 如果在早期射击(当前窗口的第一个元素之后15分钟)和水印之间没有新数据,那么水印末尾是否会再发射一次?

  2. 如果是,在相同情况下,如果accumulatingFiredPanes更改为discardingFiredPanes,水印末尾是否会再次触发?

2 个答案:

答案 0 :(得分:1)

  1. 是。当水印通过窗口的末端时,应始终发射。早期的射击窗格将被标记为早期,水印窗格将按时标记。

  2. 是的,目前我们始终保证一个on_time窗格,这意味着水印末尾将会触发。

答案 1 :(得分:0)

对于#2,您可以将EMPTY MATRIX: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)] FINAL MATRIX: {(0, 0): 0, (0, 1): 2, (0, 2): 3, (1, 0): 4, (1, 1): 0, (1, 2): 6, (2, 0): 7, (2, 1): 8, (2, 2): 0} You've retrieved row 0 0,2,3, 设置为Window.ClosingBehavior的第二个参数。有两种变体:

  • FIRE_ALWAYS
  • FIRE_IF_NON_EMPTY

请参见https://beam.apache.org/releases/javadoc/2.6.0/org/apache/beam/sdk/transforms/windowing/Window.ClosingBehavior.html