Google cloud platform 默认窗口和默认触发器在apache beam中如何工作

Google cloud platform 默认窗口和默认触发器在apache beam中如何工作,google-cloud-platform,google-cloud-dataflow,apache-beam,windowing,Google Cloud Platform,Google Cloud Dataflow,Apache Beam,Windowing,我试图用默认触发器实现默认窗口来评估行为,但它没有发出任何结果 根据Apache Beam: PCollection的默认触发器基于事件时间,并且 当光束的水印通过窗口时,发射窗口的结果 窗口结束,然后在每次延迟数据到达时激发 如果同时使用默认窗口配置和 默认触发器,默认触发器只发出一次,并且延迟 数据被丢弃。这是因为默认的窗口配置 允许的延迟值为0 我的代码: Nb_items = lines | beam.CombineGlobally(beam.combiners.CountCombin

我试图用默认触发器实现默认窗口来评估行为,但它没有发出任何结果

根据Apache Beam:

PCollection的默认触发器基于事件时间,并且 当光束的水印通过窗口时,发射窗口的结果 窗口结束,然后在每次延迟数据到达时激发


如果同时使用默认窗口配置和 默认触发器,默认触发器只发出一次,并且延迟 数据被丢弃。这是因为默认的窗口配置 允许的延迟值为0

我的代码:

Nb_items = lines | beam.CombineGlobally(beam.combiners.CountCombineFn()).without_defaults() \
                 | 'print' >> beam.ParDo(PrintFn())
只有我设置了触发器,它才会发出数据

Nb_items = lines | 'window' >> beam.WindowInto(window.GlobalWindows(),
            trigger=trigger.AfterProcessingTime(10),
            accumulation_mode=trigger.AccumulationMode.DISCARDING) \
        | 'CountGlobally' >> beam.CombineGlobally(beam.combiners.CountCombineFn()).without_defaults() \
        | 'print' >> beam.ParDo(PrintFn())
如何在不设置触发器的情况下观察默认行为

联合变换中是否存在问题

如果您的输入PCollection 使用默认全局窗口,默认行为是返回 包含一个项目的PCollection。该项的值来自 应用时指定的联合收割机功能中的累加器 结合

见以下资料来源:

有关谷歌云数据流的更多信息


当前的问题是水印永远不会到达
全局窗口的末尾。要使用默认触发器,您可以使用水印可以到达终点的任何其他窗口,例如:
'window'>>beam.WindowInto(window.FixedWindows(10))


正如纪尧姆正确地问的那样,如果你在批处理上运行,触发器基本上被忽略。

你在流处理中吗?是的,但在某一时刻我得到了所有数据。另一种说法是,在批处理中,水印最终前进到+无穷大,全局窗口完成,但在流媒体中,水印通常与实时有一些相似之处,永远不会达到+无穷大。