Flink作为一个分布式流处理框架, 在流程处理上离不开时间窗口的概念, 这个概念在限流里也经常碰到。这个概念是发生在事件事件时间语意之后,比如基于事件时间的处理方式, 要收到水印后才会落入对应的窗口。

Flink的时间窗口分为滚动窗口,滑动窗口,session窗口和按处理数据数的窗口。
滚动窗口: 滚动窗口各窗口间不相交, 默认offset为0(正点)。
滑动窗口:包含窗口大小和滑动步长, 如果步长小于窗口大小则个窗口间会有交叉。一般限流使用的是滑动窗口
session窗口: 间隔一段时间未收到数据则关闭窗口。
基于数据量的窗口: 基于处理数据数的窗口。
窗口结束后的处理函数分为aggregate/reduce及process两种, process的方式会缓存窗口内所有数据, 使用起来最灵活但也容易产生内存问题。
针对基于事件时间语意的时间窗口, 还是会有事件在水印之后到达, Flink的默认行为是抛弃事件, 也可以将事件放到另外一个流中或重新计算窗口值。


还没有评论,来说两句吧...