1. 滑动窗口:适用场景:每隔多长时间计算最近多长时间内的统计结果
2. 滚动窗口:适用场景:每隔一小时,计算前一小时的统计结果
3. 会话窗口
水位线:forBoundedOutOfOrderness:乱序程度
还可分为keywidow和nokeywindow
keywidow(每一个窗口都有自己的key,key是一样的):调用widow函数进行聚合,aggregate算子和reduce算子和max等
nokeywindow:调用windowAll进行
aggregate算子和reduce算子的区别:
1)他们都是窗口函数,都是在划分窗口之后才会调用的函数,并且都是增量聚合函数,增量聚合函数就是窗口每来一条数据就进行聚合。全量聚合函数是,窗口的数据都到了之后才进行聚合
- reduce(reduceFunction)
- aggregate(aggregateFunction)
- sum() 底层是ruduce
- min()底层是ruduce
- max()底层是ruduce
reduce算子增量聚合实现方式都是,ruducefuction负责实时聚合,窗口触发后会使用prosseswindfunction使用ruducefuction的结果。
aggregate算子的增量聚合方式是:aggregateFunction和prosseswindfunction
2)他们的区别在于,aggregate的输入类型值,中间结果值,返回结果值可以是三种类型的数据,但是reduce只能是输入类型相同和输出是统一类型的数据
4. 窗口中如果设置的水位线无乱序程度,但是窗口设置有允许迟到时间,当数据超过允许迟到的时间后,再进行侧流输出,sideoutputlatebate
5. 伪代码模式
注册水位线:提取时间字段和乱序程度
调用key或者不调用keyby,去分开是那种窗口
再去调用滑动或者滚动窗口
再去窗口是否允许迟到时间
再去调用窗口的触发(设置自定义触发器需要自定义定时器)
再去调用窗口的清除
再去调用窗口的迟到数据是否侧流输出
再去调用具体的窗口计算逻辑,聚合算子或者apply或者poross方法