本次只记录最近对于窗口的新认知
关于窗口的详细知识可以参考如下链接:
https://blog.csdn.net/mynameisgt/article/details/124223193
窗口的作用是为了在无限流上进行统计计算,数据到来时,则为此条数据开辟窗口。当 Flink 的时间大于等于窗口的结束时间时,触发这个窗口的计算,计算完毕之后,销毁此窗口。
在一个流上开窗口之前,可以做 keyBy ,也可以不做 keyBy。
两者的区别是,如果一个数据流先 keyBy 再做窗口计算,这样的窗口叫做 Keyed Windows。相同 key 的数据一定会被分到一个窗口中,换句话说,相同的 key 的数据,一定不会存在于两个窗口中。
这样做的意义是,每个窗口只分担整个数据流的一部分计算。
而如果窗口计算之前没有 keyBy,这样的窗口叫做 Non-Keyed Windows。整个数据流的数据都将会被一个窗口计算,如果数据量很大,必然承受不住。
除非非要把所有数据拉到一起计算,否则这样的使用场景很少。
上面这张图来自 Flink 官网,展示了窗口计算的所有 Api。
其中 trigger 是触发器,可以自定义窗口的触发规则,大部分情况下不需要定义,默认是随着数据的推动,水位线上升到了窗口的结束时间,则触发这个窗口的计算。
evictor 是剔除器,剔除器默认的实现是,在计算完一个窗口后,把这个窗口的前一个窗口的数据给