首页 > 解决方案 > Apache Beam 中无界 pcollections 的全局窗口的默认行为是什么?

问题描述

我最近看了很多文章,包括官方文档,试图了解 Global Window 在 Apache Beam 中是如何工作的。我已经在 Stackoverflow 中阅读了类似的问题,但我无法理解。

根据官方文档:

如果您正在处理无界数据集(例如来自流数据源),则可以使用单个全局窗口,但在应用诸如 GroupByKey 和 Combine 之类的聚合转换时要小心。具有默认触发器的单个全局窗口通常需要整个数据集在处理之前可用,这在不断更新数据的情况下是不可能的。

所以 Global Window 没有结局,它是有道理的,因为它是全球性的。文档建议在进行聚合时使用非默认触发器,因为默认触发器是在窗口关闭时触发窗格:

设置非默认触发器。这允许全局窗口在其他条件下发出结果,因为默认的窗口行为(等待所有数据到达)永远不会发生。

我对此感到困惑。这里的逻辑是全局窗口无法将事件触发到管道的下一步,因为它永远不会结束,因此默认触发器永远不会发生。

有人可以向我澄清这个问题吗?具有默认触发器的默认全局窗口如何在 Apache Beam 中用于无界 pcollections?我假设它根本不聚合结果,只是在事件到达时一一处理。我想确定是不是这样。

标签: google-cloud-platformapache-beamdataflow

解决方案


默认触发器是在水印到达Window基于事件时间的末尾时触发。这永远不会发生在 aGlobalWindow所以如果你使用GlobalWindow默认触发器将永远不会被触发。

但是,如果您设置了一个非默认触发器,例如在处理了一定数量的元素后触发(使用AfterCount触发器),您的元素甚至可以为GlobalWindow. 有关 Beam 触发器的更多信息,请参见此处


推荐阅读