Flink Sliding窗口无法正常工作

时间:2017-04-13 07:05:53

标签: java apache-flink flink-streaming sliding-window

我有一个数据流 1,2,3,4,5,6 .....

我正在应用如下滑动countWindow

inputStream.keyBy(“id”)。countWindow(2,1);

预期输出

1,2

2,3

3,4 ..

实际输出

1

1,2

2,3

3,4

为什么在累积窗口大小之前先滑动

2 个答案:

答案 0 :(得分:2)

首先,您提供的预期输出是错误的。您指定窗口大小为2分钟。所以输出(假设它是窗口的开始和结束)应该是:

1:00:00, 1:01:00
1:01:00, 1:02:00

应将第一个带有时间戳1:00:00的事件分配给窗口(0:59:00, 1:01:00)(1:00:00, 1:02:00)。我相信这可以回答你的问题。

编辑后:

对于countWindow,应用相同的规则。第一个元素属于两个窗口。使用countWindow(4,2)更容易推理。 看看一个基本的例子:

val sEnv = StreamExecutionEnvironment.getExecutionEnvironment
sEnv.setParallelism(1)

sEnv.fromCollection((1 to 10)).countWindowAll(4, 2).apply(
  (window, numbers, collector: Collector[Seq[Int]]) =>
    collector.collect(numbers.toSeq)
).print()

sEnv.execute()

输出结果为:

List(1, 2)
List(1, 2, 3, 4)
List(3, 4, 5, 6)
List(5, 6, 7, 8)
List(7, 8, 9, 10)

看到第一个元素所属的第一个窗口在过去开始。

答案 1 :(得分:1)

我理解感谢Dawid Wysakowicz的回答。我只想添加一个数字,希望它有助于理解。

enter image description here

实际上,在滑动窗口中,每个元素必须包含在2个窗口中。也就是说,第一个元素也必须在2个窗口中。