我一直在阅读Dataflow SDK文档,试图找出数据在流媒体作业中通过水印到达时会发生什么。
此页:
https://cloud.google.com/dataflow/model/windowing
表示如果使用默认窗口/触发器策略,则将丢弃后期数据:
注意:Dataflow的默认窗口和触发策略会丢弃后期数据。如果要确保管道处理后期数据的实例,则在设置PCollection的窗口策略并相应地设置PCollections的触发器时,需要显式设置.withAllowedLateness。
然而这页:
https://cloud.google.com/dataflow/model/triggers
表示迟到的数据将在迟到时作为单个元素PCollection发出:
PCollection的默认触发器是基于事件时间的,当系统的水印(数据流的“应该”具有所有数据的概念)通过窗口的末尾时,会发出窗口的结果。默认触发器在重复的基础上发出,这意味着根据定义,任何后期数据都会在水印之后到达并触发触发器,从而导致后期元素在到达时发出。
那么,通过水印的后期数据会被完全丢弃吗?或者,它是否只会与其他数据一起发出,如果它及时到达它会被窗口化,而是自己发射?
答案 0 :(得分:1)
默认的“窗口和触发策略”会丢弃后期数据。 WindowingStrategy
是一个对象,包括窗口,触发和一些其他参数,例如允许延迟。默认允许延迟为0,因此任何后期数据元素都将被丢弃。
默认触发器处理延迟数据。如果您使用默认的WindowingStrategy
并仅更改允许的延迟,那么您将收到一个PCollection
,其中包含一个用于所有实时数据的输出窗格,然后是大约每个后期的新输出窗格元件。