Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flink 为什么只使用一个GlobalWindow实例?_Apache Flink_Flink Streaming - Fatal编程技术网

Apache flink 为什么只使用一个GlobalWindow实例?

Apache flink 为什么只使用一个GlobalWindow实例?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,看看这个: //我们为每个id创建会话,最大超时时间为3个时间单位 数据流聚合=源 .keyBy(0) .window(GlobalWindows.create()) .触发器(新SessionTrigger(3L)) .总数(2); 有人能解释一下为什么在本例中使用一个GlobalWindow(在GlobalWindows\assignWindows中创建)的实例吗 似乎对于任何传入事件ID都应该创建自己的窗口,即a事件的window(a),b事件的窗口(b)等等。因为据我所知,Flink正

看看这个:

//我们为每个id创建会话,最大超时时间为3个时间单位
数据流聚合=源
.keyBy(0)
.window(GlobalWindows.create())
.触发器(新SessionTrigger(3L))
.总数(2);
有人能解释一下为什么在本例中使用一个
GlobalWindow
(在
GlobalWindows\assignWindows
中创建)的实例吗


似乎对于任何传入事件ID都应该创建自己的窗口,即
a
事件的
window(a)
b
事件的
窗口(b)
等等。因为据我所知,Flink正在使用window实例来关联对应的事件,即所有
a
事件都应该与
窗口(a)关联
例如。在这种情况下,只有与
Window(a)
相关的所有
a
事件将传递给Window函数并一起处理(在本例中,将计算按ID分组的事件计数,即按
a
b
等),但是,正如您可以看到的,这个示例使用了
全局窗口的一个实例,Flink使用
窗口
实例将属于同一窗口的元素分组在一起是正确的。但是,即使在之前,输入流也是根据指定的键进行分组的。因此,Flink在内部为每个键存储一个窗口及其相关元素的列表。这允许跨多个键使用同一窗口实例


更准确地说,您在内部有一个嵌套的
映射,它表示“全局窗口赋值器将具有相同键的所有元素分配给同一个全局窗口”。因此,如果有10个不同的键,它将生成10个不同的全局窗口?从语义上讲,每个键都有一个不同的窗口。在实现方面,所有键的窗口实例都是相同的。原因是窗口实例形成了一个复合键,该键具有唯一标识窗口元素的键值。这只适用于全局窗口,对吗?对于时间窗口,即使从实现的角度来看,10个不同的键也会有10个不同的时间窗口实例,对吗?如果我错了,请纠正我。直到,我还有一个难题,如果全局窗口的所有键的窗口实例都相同,但是,从实现角度来看,时间窗口的每个不同键都有一个单独的窗口实例,为什么时间窗口不使用与全局窗口相同的策略?因为时间窗口绑定到一个时间间隔(例如,如果有小时窗口,则从1:00到2:00)。