2016-05-16 29 views
2

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

本页面:

https://cloud.google.com/dataflow/model/windowing

表明,如果使用默认的窗口/触发策略,那么后期的数据将被丢弃:

注:数据流的默认窗口和触发策略丢弃后期数据。如果你想确保你的管道处理晚期数据的实例,当你设置你的PCollection的窗口策略并相应地为你的PCollections设置触发器时,你需要明确地设置.withAllowedLateness。

然而,这个页面:

https://cloud.google.com/dataflow/model/triggers

表明,当它到达很晚很晚的数据将被发射以一个单一的元素PCollection:

的PCollection的默认触发事件基于时间的,并且在系统的水印(Dataflow关于它何时“应该”具有所有数据的概念)通过窗口的末端时发出窗口的结果。默认触发器重复发射,意味着任何迟到的数据将按照定义到达水印并触发触发器,导致迟到的元素在到达时发射。

那么,过去的水印数据会被彻底丢弃吗?或者,它是否不会与其它数据一起散发,如果它及时到达,它会自动发射出去呢?

回答

1

默认的“窗口和触发策略”放弃延迟数据。 WindowingStrategy是一个由开窗,触发和一些其他参数组成的对象,例如允许的迟到。默认允许延迟时间为0,因此任何后期数据元素都将被丢弃。

默认触发器处理晚期数据。如果采用缺省值WindowingStrategy并仅更改允许的迟到,则将收到一个PCollection,其中包含一个用于所有按时数据的输出窗格,然后是大致每个迟到元素的新输出窗格。

+0

感谢您使用@ben快速回答。所以如果我用默认的窗口策略正确理解这一点: *按时到达的数据将在一个输出窗格中发出。 *迟到但在allowedLateness内的数据点将在其自己的输出窗格(大约)中发送。 *晚于allowedLateness的数据点将被丢弃。 有什么方法来捕获晚于allowedLateness的数据?我们的数据流使用案例之一是计费系统,每个查询都需要最终计数,无论其到达时间有多迟 – LeeW

+1

allowedLateness之后到达的所有数据都将被丢弃。如果你想回应所有迟到的数据,你应该相应地设置allowedLateness。在典型用例中,有一点(日/周/月),之后的数据将不再被接受。系统需要为每个窗口保留数据,直到allowedLateness已经过去,因为该窗口不会再考虑更多数据。通常存在允许迟到的数值,之后迟到的数据不太可能发生,以致永远不会发生,或者如果数据太晚,则不可行。 –

相关问题