Google cloud dataflow Google数据流延迟数据

Google cloud dataflow Google数据流延迟数据,google-cloud-dataflow,Google Cloud Dataflow,我一直在阅读Dataflow SDK文档,试图找出在流作业中数据到达水印之后会发生什么 本页: 指示如果使用默认窗口/触发器策略,则将丢弃延迟数据: 注意:数据流的默认窗口和触发器策略会丢弃延迟数据。如果要确保管道处理延迟数据的实例,则需要在设置PCollection的窗口策略并相应地设置PCollection的触发器时显式设置.withAllowedLateness 然而,这一页: 指示延迟数据在延迟到达时将作为单个元素PCollection发出: PCollection的默认触发器是基于

我一直在阅读Dataflow SDK文档,试图找出在流作业中数据到达水印之后会发生什么

本页:

指示如果使用默认窗口/触发器策略,则将丢弃延迟数据:

注意:数据流的默认窗口和触发器策略会丢弃延迟数据。如果要确保管道处理延迟数据的实例,则需要在设置PCollection的窗口策略并相应地设置PCollection的触发器时显式设置.withAllowedLateness

然而,这一页:

指示延迟数据在延迟到达时将作为单个元素PCollection发出:

PCollection的默认触发器是基于事件时间的,当系统的水印(Dataflow关于何时“应该”拥有所有数据的概念)通过窗口末尾时,会发出窗口结果。默认触发器在重复的基础上发出,这意味着根据定义,任何延迟数据都将在水印之后到达并触发触发器,从而导致延迟元素在到达时发出

那么,是否会完全丢弃超过水印的延迟数据?或者,它是否只会与其他数据一起发出,如果它及时到达的话,它会被窗口化,而会自己发出?

默认的“窗口化和触发策略”会丢弃延迟的数据。
WindowingStrategy
是一个对象,它由窗口、触发和一些其他参数(如允许延迟)组成。默认允许的延迟为0,因此将丢弃所有延迟的数据元素


默认触发器处理延迟数据。如果您采用默认的
WindowingStrategy
并仅更改允许的迟到时间,则您将收到一个
PCollection
,其中包含一个用于所有准时数据的输出窗格,然后是一个用于几乎每个迟到元素的新输出窗格。

感谢您的快速回答@ben。因此,如果我对默认窗口策略的理解正确:*按时到达的数据将在一个输出窗格中发出。*延迟到达但在允许延迟范围内的数据点将在其自己的输出窗格中发出(大约)。*超过允许延迟到达的数据点将被丢弃。有哪些方法可以捕获迟于允许延迟的数据?我们数据流的一个用例是计费系统,在这个系统中,每个查询最终都需要计数,而不管它到达的时间有多晚,所有在允许延迟被丢弃之后到达的数据。如果要响应所有延迟数据,应相应地设置allowedLateness。在典型用例中,有一个点(天/周/月),在此点之后,将不再接受延迟数据。系统需要保留每个窗口的数据,直到它的允许延迟远远超过该窗口,不再考虑该窗口的更多数据。通常存在允许延迟的值,在该值之后,延迟的数据不太可能永远不会发生,或者如果发生了延迟,则数据太晚,无法采取行动。