欢迎光临散文网 会员登陆 & 注册

一篇文章带你彻底明白Flink中Window的2个类型

2023-07-26 10:52 作者:ingemar-  | 我要投稿

Window可以分成两类:

  • CountWindow:按照指定的数据条数生成一个Window,与时间无关。

滚动计数窗口,每隔N条数据,统计前N条数据

滑动计数窗口,每隔N条数据,统计前M条数据

  • TimeWindow:按照时间生成Window。

滚动时间窗口,每隔N时间,统计前N时间范围内的数据,窗口长度N,滑动距离N

滑动时间窗口,每隔N时间,统计前M时间范围内的数据,窗口长度M,滑动距离N

会话窗口,按照会话划定的窗口


滚动窗口 - TumblingWindow概念


流是连续的,无界的(有明确的开始,无明确的结束

假设有个红绿灯,提出个问题:计算一下通过这个路口的汽车数量

对于这个问题,肯定是无法回答的,为何?

因为,统计是一种对固定数据进行计算的动作。

因为流的数据是源源不断的,无法满足固定数据的要求(因为不知道何时结束)

那么,我们换个问题:统计1分钟内通过的汽车数量

那么,对于这个问题,我们就可以解答了。因为这个问题确定了数据的边界,从无界的流数据中,取出了一部分有边界的数据子集合进行计算。

那么,这个行为或者说这个统计的数据边界,就称之为窗口。

同时,我们的问题,是以时间来划分被处理的数据边界的,那么按照时间划分边界的就称之为:时间窗口

反之,如果换个问题,统计100辆通过的车里面有多少宝马品牌,那么这个边界的划分就是按照数量的,这样的称之为:计数窗口

同时,这样的窗口被称之为 滚动窗口,按照窗口划分依据分为:滚动时间窗口、滚动计数窗口


滑动窗口 – SlidingWindow概念


同样是需求,改为:

每隔1分钟,统计前面2分钟内通过的车辆数

对于这个需求我们可以看出,窗口长度是2分钟,每隔1分钟统计一次。

或者:每通过100辆车,统计前面通过的50辆车的品牌占比

对于这个需求可以看出,窗口长度是50辆车,但是每隔100辆车统计一次

对于这样的窗口,我们称之为滑动窗口

那么在这里面,统计多少数据是窗口长度(如统计2分钟内的数据,统计50辆车中的数据)

隔多久统计一次称之为滑动距离(如,每隔1分钟,每隔100辆车)

那么可以看出,滑动窗口,就是滑动距离 不等于 窗口长度的一种窗口

比如,每隔1分钟 统计先前5分钟的数据,窗口长度5分钟,滑动距离1分钟,不相等

比如,每隔100条数据,统计先前50条数据,窗口长度50条,滑动距离100条,不相等


那如果相等呢?相等就是比如:每隔1分钟统计前面1分钟的数据,窗口长度1分钟,滑动距离1分钟,相等。

对于这样的需求可以简化成:每隔1分钟统计一次数据,这就是前面说的滚动窗口咯

那么,我们可以看出:

滚动窗口:窗口长度 = 滑动距离

滑动窗口:窗口长度 != 滑动距离


其中可以发现,对于滑动窗口:

滑动距离 > 窗口长度, 会漏掉数据,比如:每隔5分钟,统计前面1分钟的数据(滑动距离5分钟,窗口长度1分钟,漏掉4分钟的数据)

滑动距离 < 窗口长度, 会重复处理数据,比如:每隔1分钟,统计前面5分钟的数据(滑动距离1分钟,窗口长度5分钟,重复处理4分钟的数据)

滑动距离 = 窗口长度, 不漏也不会重复,也就是滚动窗口


一篇文章带你彻底明白Flink中Window的2个类型的评论 (共 条)

分享到微博请遵守国家法律