Apache flink 滑动处理时间窗口计算不一致的结果

Apache flink 滑动处理时间窗口计算不一致的结果,apache-flink,flink-streaming,Apache Flink,Flink Streaming,在Flink中,我正在使用readTextFile读取一个文件,并应用SlidingProcessingTimeWindows.of(Time.millides(60),Time.millides(60))60毫秒,上面有60毫秒的幻灯片。在加窗流上,我正在计算元组第二个字段的平均值。我的文本文件包含1100行,每行是元组(字符串,整数)。我已将并行度设置为1,并在元组的第一个字段上键入消息 当我运行代码时,每次我都会得到不同的答案。我的意思是,它看起来像,有时它读取整个文件,有时它读取文件的前

在Flink中,我正在使用
readTextFile
读取一个文件,并应用
SlidingProcessingTimeWindows.of(Time.millides(60),Time.millides(60))
60毫秒,上面有60毫秒的幻灯片。在加窗流上,我正在计算元组第二个字段的平均值。我的文本文件包含1100行,每行是元组(字符串,整数)。我已将并行度设置为1,并在元组的第一个字段上键入消息


当我运行代码时,每次我都会得到不同的答案。我的意思是,它看起来像,有时它读取整个文件,有时它读取文件的前几行。它是否与滑动量的窗口大小有关?如何找出这种关系,以便我可以决定窗口的大小和滑动量

AlpineGizmo评论中的答案是正确的。我将在这里添加更多细节

Flink将时间窗口与纪元的开始对齐(
1970-01-01-00:00:00
)。这意味着具有1小时窗口的窗口操作员每新小时(即在
00:00
01:00
02:00
,…)启动一个新窗口,而不是第一个到达的记录

处理时间窗口基于系统的当前时间进行评估。 如上所述,这意味着可以处理的数据量取决于操作员运行的机器的处理资源(硬件、CPU/IO负载等)。因此,处理时间窗口不能产生可靠和一致的结果

在您的案例中,所描述的两种影响可能会导致不同作业的结果不一致。根据启动作业的时间,数据将被分配到不同的窗口(如果第一条记录刚好在第一个60毫秒窗口关闭之前到达,则窗口中只有此元素)。根据机器的IO负载,访问和读取文件可能需要更多或更少的时间


如果希望得到一致的结果,则需要使用事件时间。在这种情况下,记录的处理基于数据中编码的时间,即结果仅取决于数据,而不取决于外部影响,如作业的开始时间或处理机器的负载。

处理处理时间时,不能期望一致的、可重复的结果。在您的情况下,这仅仅是一个60毫秒内可以处理多少文件的问题,这取决于系统负载等。有时它能够处理整个文件,有时它不能;这很正常。查看更多信息。