Google cloud dataflow 数据流-固定窗口-后处理触发器
我使用60秒的固定窗口,触发时间为10秒。我面临着一些意想不到的结果。你能帮我理解它到底是如何工作的吗?我在下面提供了所有的细节 我对pubsub主题的输入是: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
*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]。但事实并非如此。通过阅读输入,我认为你是对的。你能提供一个发生这种情况的测试流吗?这样我就可以在本地测试自己了