一、窗口(window)

Flink流式计算框架中的窗口函数

 

(1)一般真实的流都是无界的,怎样处理无界的数据?

(2)可以把无限的数据流进行切分,得到有限的数据集进行处理——也就是得到有界流;

(3)窗口(window)就是将无限流切割为有限流的一种方式,它会将流数据分发到有限大小的桶(bucket)中进行分析;

 

二、window类型

(1)时间窗口(Time Window):滚动时间窗口,滑动时间窗口,会话窗口;

(2)计数窗口(Count Window):滚动计数窗口,滑动计数窗口;

1、滚动窗口(Tumbling Windows)

Flink流式计算框架中的窗口函数

1)将数据依据固定的窗口长度对数据进行切分;

2)时间对齐,窗口长度固定,没有重叠;

2、滑动窗口(Sliding Windows)

Flink流式计算框架中的窗口函数

1)滑动窗口是固定窗口更广义的一种形式,滑动窗口由固定的窗口长度和滑动间隔组成;

2)窗口长度固定,可以重叠;

3、会话窗口(Session Windows)

Flink流式计算框架中的窗口函数

1)由一系列事件组合一个指定时间长度的timeout间隙组成,也就是一段时间没有接收到新数据就会生成新的窗口;

2)特点:时间无对齐

 

三、window  API

1、窗口分配器——window()方法

1)我们可以用.window()来定义一个窗口,然后基于这个window去做一些聚合或者其它处理操作。注意window()方法必须在keyBy之后才能用。

2)Flink提供了更加简单的.timeWindow和.countWindow方法,用于定义时间窗口和计数窗口。

Flink流式计算框架中的窗口函数

 

2、窗口分配器(window assigner)

1) window()方法接收的输入参数是一个WindowAssigner;

2)WindowAssigner负责将每条输入的数据分发到正确的window中;

3)Flink提供了通用的WindowAssigner:滚动窗口(tumbling  window)、滑动窗口(sliding window)、会话窗口(session window)、全局窗口(global  window);

 

3、创建不同类型的窗口

1)滚动时间窗口(tumbling time window):

                  .timeWindow(Time.seconds(15))

2)滑动时间窗口(sliding time window)

                   .timeWindow(Time.seconds(15),Time.seconds(5))

3)会话窗口(session window)

                    .window(EventTimeSessionWindows.withGap(Time.minutes(10)))

4)滚动计数窗口(tumbling count window)

                    .countWindow(5)

5)滑动计数窗口(sliding count window)

                     .countWindow(10,2)

 

4、窗口函数(window function)

(1)window function定义了要对窗口中收集的数据做的计算操作;

(2)可以分为两类:

              1)增量聚合函数(incremental  aggregation  functions)

                    *****每条数据到来就进行计算,保持一个简单的状态;

                    *****ReduceFunction,AggregateFunction

               2)全窗口函数(full  window  functions)

                    *****先把窗口所有数据收集起来,等到计算的时候会遍历所有数据;

                    *****ProcessWindowFunction

 

5、其它可选API

(1).trigger()——触发器

           *****定义window什么时候关闭,触发计算并输出结果;

(2).evictor()——移除器

           *****定义移除某些数据的逻辑

(3).allowedLateness()——允许处理迟到的数据

(4).slideOutputLateData()——将迟到的数据放入侧输出流

(5).getSideOutput()——获取侧输出流

 

window  API 总览

Flink流式计算框架中的窗口函数

 

 

 

 

相关文章: