Google cloud dataflow 数据流-固定窗口-后处理触发器

Google cloud dataflow 数据流-固定窗口-后处理触发器,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我使用60秒的固定窗口,触发时间为10秒。我面临着一些意想不到的结果。你能帮我理解它到底是如何工作的吗?我在下面提供了所有的细节 我对pubsub主题的输入是: *name* *score* publish timestamp(every 5 seconds I am publishing one element) Laia 30 2021-04-10 09:38:29.708000+0000 Victor 20 2021-04-10 09:38:34.695000+00

我使用60秒的固定窗口,触发时间为10秒。我面临着一些意想不到的结果。你能帮我理解它到底是如何工作的吗?我在下面提供了所有的细节

我对pubsub主题的输入是:

*name* *score*  publish timestamp(every 5 seconds I am publishing one element)
Laia    30  2021-04-10 09:38:29.708000+0000     
Victor  20  2021-04-10 09:38:34.695000+0000     
Victor  50  2021-04-10 09:38:39.703000+0000     
Laia    40  2021-04-10 09:38:44.701000+0000     
Victor  10  2021-04-10 09:38:49.711000+0000     
Victor  40  2021-04-10 09:38:54.721000+0000     
Laia    40  2021-04-10 09:38:59.715000+0000     
Laia    50  2021-04-10 09:39:04.741000+0000     
Laia    20  2021-04-10 09:39:09.867000+0000     
Laia    20  2021-04-10 09:39:14.749000+0000     
我的代码: 带触发器的窗口=(字)

                               | "window" >>     beam.WindowInto(beam.window.FixedWindows(60))
                               | "Group"         >> GroupByKey())
不带触发器的窗口=(字

                               | "window" >>     beam.WindowInto(beam.window.FixedWindows(60))
                               | "Group"         >> GroupByKey())
带触发器的窗口的O/p:

Laia    [30]    
Victor  [20, 50, 10, 40]    
Laia    [50, 20, 20]    
不带触发器的窗口的O/p:

Laia     [30, 40, 40]   
Victor  [20, 50, 10, 40]    
Laia    [50, 20, 20]    

不带触发器的输出我获得了发布到主题的所有10个元素,使用触发器我获得了8个元素。我注意到,如果关键项没有更改,则使用触发器不会在10秒内发出结果,即,仅当I/p名称从laila更改为victor时,它才会发出结果,并且一旦在窗口中发出一个键,它就会发出结果即使使用相同的键发布,也不会再次发出。

您可能正在删除元素,因为没有重复使用

这里有另一个解释。基本上,如果你不反复添加
,触发器只会触发一次


.

谢谢Iñigo!!这样一来,丢失的数据问题肯定会得到解决。请您帮助我理解以下问题:使用上面提供的输入数据:>触发器将被触发的时间和输出是什么<>根据我的说法,第一个元素在09:38:29被按下,所以触发器应该在09:38:39和输出应该是Laila:[30]和victor:[20,50]。但事实并非如此。通过阅读输入,我认为你是对的。你能提供一个发生这种情况的测试流吗?这样我就可以在本地测试自己了