一.简介
Flink认为Batch是Streaming的一个特例,所以Flink底层引擎是一个流式引擎,在上面实现了流处理和批处理。而窗口(window)就是从Streaming到Batch的一个桥梁,Flink提供了非常完善的窗口的机制,这是我认为的Flink最大亮点之一(其他的亮点包括消息乱序处理和checkpoint机制)。本文介绍流处理中窗口概念。
二.Window
在流处理应用中,数据是连续不断的,因此我们不可能等到所有数据到了才开始处理。当然我们可以每来一个消息就处理一次,但是有时我们需要做一些聚合类的处理,例如:在过去的1分钟内有多少用户点击了我们的网页。在这种情况下,我们必须定义一个窗口,用来收集最近一分钟内的数据,并对这个窗口内的数据进行计算。
窗口可以是时间驱动(Time Window,例如:每30秒钟),也可以是数据驱动(Count Window,例如:每一百个元素)。一种经典的窗口分类可以分成:翻滚窗口(Tumbing Window,无重叠),滚动窗口(Sliding Window,有重叠),会话窗口(Session Wi