Flink中的窗口
一、窗口的概念
为了对无界数据流进行处理,Flink可以将数据流切分为数据块,每一个数据块就是所谓的窗口。窗口中两个重要的点:窗口的类型和窗口的处理函数
二、窗口的分类
按照驱动类型分类可以分为:时间驱动窗口和数量驱动窗口,简称为时间窗口和计数窗口。
(1)、时间窗口
时间窗口以时间点定义窗口的开始和结束。通俗来说就是“定点发车”。
(2)、计数窗口
计算窗口以窗口中的数据的数量为依据,当数据达到指定数量之后窗口截止。通俗来说就是“人齐发车”。
按照窗口分配数据的规则划分分为:滚动窗口、滑动窗口、会话窗口、全局窗口。
(1)、滚动窗口
滚动窗口中的数据是“首尾相连”的,每个窗口中的数据不会重复,且不会缺失。滚动窗口既可以基于时间来定,也可以基于数量来定。
(2)、滑动窗口
滑动窗口要看窗口的大小,但是更重要的是看窗口的步长。如果窗口的步长刚好等于窗口的大小的话就和滚动窗口一样;如果窗口的步长大于窗口的大小就会导致数据的丢失;如果窗口的步长小于窗口的大小时就会导致数据处理时的重复。
(3)、会话窗口
会话窗口就是会话双方建立起来的通道,这种窗口只能基于时间创立,不能基于数据数量来创立。会话窗口没有固定的结束时间,当相邻两个数据发送时间的间隔大于规定的会话间隔时会认为这不是同一个会话。
(4)、全局窗口
全局的窗口没有窗口的技术时间,需要靠触发器来对窗口中收集到的数据进行处理。
三、窗口操作
在实际的写代码的过程中,需要注意两个内容,一个就是窗口分配器(实际使用时的窗口的类型);一个是窗口函数。窗口分配器用于指定我用的是时间窗口还是计数窗口;是滚动窗口还是滑动窗口亦或是会话窗口。窗口函数就是对应的对窗口进行的处理操作。
(1)、窗口分配器
(2)、窗口函数
窗口函数也是分为两类:增量聚合函数和全窗口函数。增量聚合函数是每次来一条数据就计算一个,到窗口结束时输出执行结果。典型的增量聚合函数是ReduceFunction和AggregateFunction。全窗口函数就是对进入窗口的函数先不进行处理,在窗口结束时才进行处理。