【问题标题】:Apache Beam number of times a pane is fired with early triggersApache Beam 使用早期触发器触发窗格的次数
【发布时间】:2018-05-25 09:50:00
【问题描述】:

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

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,水印末尾会不会再触发一次?

【问题讨论】:

  • 释义 (1),当使用 accumulatingFiredPanes 时,Beam 会触发与水印后再次触发的完全相同的窗格吗?
  • 加一个3,如果指定.withOnTimeBehavior(Window.OnTimeBehavior.FIRE_IF_NON_EMPTY),前面问题的答案会改变吗?此 API 注释为 @Experimental。我不确定它是否有任何实际效果。

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


【解决方案1】:
  1. 是的。当水印通过窗口的末端时,应该总是有一个触发。提前触发的窗格将被标记为早,水印窗格将被标记为准时。

  2. 是的,目前我们始终保证 on_time 窗格,这意味着在水印结束时会触发。

【讨论】:

  • 对于第2点,即使触发窗格为空,也会发生火灾。对于一个空窗格,下游PCollection 会为这样一个空窗格得到什么(假设转换是一些CombinewithoutDefaults 配置的)?
【解决方案2】:

对于#2,您可以将Window.ClosingBehavior 作为第二个参数设置为withAllowedLateness。有两种变体:

  • FIRE_ALWAYS
  • FIRE_IF_NON_EMPTY

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

【讨论】:

    猜你喜欢
    • 2020-01-01
    • 1970-01-01
    • 2021-09-29
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2023-02-02
    相关资源
    最近更新 更多