延迟数据是否保证在 Beam 中的 window 触发器之后处理?
Is late data guaranteed to processed after the window trigger in Beam?
如果我在 window 允许的迟到情况下按以下方式进行:
Window.<KV<Long, ParsedTransaction>>into(FixedWindows.of(Duration.standardMinutes(15)))
.triggering(
AfterWatermark.pastEndOfWindow()
.withLateFirings(AfterPane.elementCountAtLeast(1)))
.withAllowedLateness(Duration.standardMinutes(5))
然后将其输入组合函数,然后使用 SpannerIO 执行插入或更新突变将结果写入数据库。
如果新项目在window结束后立即到达,将导致延迟触发。我的理解是组合函数和数据库写入将是 运行 作为两个触发器的结果。是否保证window触发数据处理结束后处理迟到的数据?或者是否有可能在 window 触发输出结束时覆盖延迟触发的数据聚合。
我没有在文档中看到这一点,但这种保证只持续到窗口函数之后的后续步骤。这意味着 DB 写入必须在窗口函数之后直接发生。社区内有一些步骤可以在进一步的下游转换中传播这些保证,请参阅 here。
如果我在 window 允许的迟到情况下按以下方式进行:
Window.<KV<Long, ParsedTransaction>>into(FixedWindows.of(Duration.standardMinutes(15)))
.triggering(
AfterWatermark.pastEndOfWindow()
.withLateFirings(AfterPane.elementCountAtLeast(1)))
.withAllowedLateness(Duration.standardMinutes(5))
然后将其输入组合函数,然后使用 SpannerIO 执行插入或更新突变将结果写入数据库。
如果新项目在window结束后立即到达,将导致延迟触发。我的理解是组合函数和数据库写入将是 运行 作为两个触发器的结果。是否保证window触发数据处理结束后处理迟到的数据?或者是否有可能在 window 触发输出结束时覆盖延迟触发的数据聚合。
我没有在文档中看到这一点,但这种保证只持续到窗口函数之后的后续步骤。这意味着 DB 写入必须在窗口函数之后直接发生。社区内有一些步骤可以在进一步的下游转换中传播这些保证,请参阅 here。