我一直在阅读Dataflow SDK文档,试图找出当数据到达流式作业中的水印后会发生什么。Google Dataflow后期数据
本页面:
https://cloud.google.com/dataflow/model/windowing
表明,如果使用默认的窗口/触发策略,那么后期的数据将被丢弃:
注:数据流的默认窗口和触发策略丢弃后期数据。如果你想确保你的管道处理晚期数据的实例,当你设置你的PCollection的窗口策略并相应地为你的PCollections设置触发器时,你需要明确地设置.withAllowedLateness。
然而,这个页面:
https://cloud.google.com/dataflow/model/triggers
表明,当它到达很晚很晚的数据将被发射以一个单一的元素PCollection:
的PCollection的默认触发事件基于时间的,并且在系统的水印(Dataflow关于它何时“应该”具有所有数据的概念)通过窗口的末端时发出窗口的结果。默认触发器重复发射,意味着任何迟到的数据将按照定义到达水印并触发触发器,导致迟到的元素在到达时发射。
那么,过去的水印数据会被彻底丢弃吗?或者,它是否不会与其它数据一起散发,如果它及时到达,它会自动发射出去呢?
感谢您使用@ben快速回答。所以如果我用默认的窗口策略正确理解这一点: *按时到达的数据将在一个输出窗格中发出。 *迟到但在allowedLateness内的数据点将在其自己的输出窗格(大约)中发送。 *晚于allowedLateness的数据点将被丢弃。 有什么方法来捕获晚于allowedLateness的数据?我们的数据流使用案例之一是计费系统,每个查询都需要最终计数,无论其到达时间有多迟 – LeeW
allowedLateness之后到达的所有数据都将被丢弃。如果你想回应所有迟到的数据,你应该相应地设置allowedLateness。在典型用例中,有一点(日/周/月),之后的数据将不再被接受。系统需要为每个窗口保留数据,直到allowedLateness已经过去,因为该窗口不会再考虑更多数据。通常存在允许迟到的数值,之后迟到的数据不太可能发生,以致永远不会发生,或者如果数据太晚,则不可行。 –