00:00
概念之后,接下来我们看一看flink里边怎么样去划分窗口的类型啊,那有同学可能说了这个窗口的类型,这还不简单吗?那肯定就是按照时间,然后我们之前好像没听说窗口还划分什么类型,对吧?你就定义那个窗口,然后然后定义它的那个窗口长度啊,然后然后它还可以去滑动做做这样的一个操作不就完了吗?都是基于时间的嘛,Flink里边有不同类型的窗口啊,这里边首先我们根据窗口截取的标准可以分成两大类,一类就是大家比较熟悉的时间窗口,就是按照时间来截的,那另外还有一类呢,叫做计数窗口,抗图运动,哎,那为什么叫技术窗口呢?啊,这个其实也比较好理解,就是它不是按照当前是时间到了哪个点,然后去截这个窗口就关了对吧,然后去统计这个窗口里边多少个数,而是统计什么呢?就数数数个数来了几个数,我就认为这是一个窗口,然后就统计这几个数对吧,这就相当于是按照数。
01:00
句的个数依次去做统计了,比方说你要是做一个求和的话,呃,你定义了一个,呃,技术窗口是十对吧,窗口大小是十的话,那就相当于是什么?那就是统计每十个数萨一次,每十个数萨一次对吧,其实就相当于是这样的一个过程啊呃,那具体来实现呢?根据它底层的这种实现原理,就是窗口,我们说是桶桶啊对吧,就是数据分发到桶的这个规则不一样,又分成了这样的几种不同的窗口,整体来讲的话就是要分成滚动窗口和滑动窗口,另外还有一种比较特殊的叫绘画窗口啊,那时间窗口里边有滚动时间窗口,滑动时间窗口,还有绘画窗口,另外呢,技术窗口里边只有滚动技术窗口和滑动技术窗口,因为绘画啊,大家想这绘画这个东西显然是只跟时间有关,对吧?哎,因为这个绘画你隔一段时间之后,你这绘画关闭了啊,那那这样才叫一个绘画,你不能说是这个隔隔几。
02:00
这个数之后,这个叫叫关闭了啊,那那这种这就这就不能说说说成是绘画了吧,所以接下来我们来具体看一看这几种窗口类型到底是什么样子的啊,首先是所谓的这个滚动窗口,滚动窗口其实非常简单啊,它的英文名叫tbling Windows,那整体来看的话,那就是根据固定的窗口长度对数据进行切分啊,那它的特点其实就是说时间是对齐的,什么叫时间对齐呢?你像我们这里边大家看这个数据,USER1 user2 user3,所有的数据这其实已经分组了,相当于前面做过KBY,然后KBY之后呢,你如果再基于它去去设置窗口的话,那所有分组上面我们的窗口这个时间都是一样的,对吧,都是对齐的一个状态啊啊,那那这里边就是如果当然这个时间对齐的意思,前提是时间滚动窗口对吧,你如果是count窗口,那当然就是按照个数来来对齐了啊,那这里边就是时间窗口的。
03:00
把时间对齐,而且长度是固定的,大家看到一个窗口是不是后面紧跟着另一个呀,对吧,头连尾,尾连头,它们之间没有重叠,所以说我定义的时候,只要一个参数,就只要这个window size定了,它就定了啊,因为一个后面紧跟着另一个嘛,他们之间就相当于是整个一个跟头滚过去一样,对吧?啊,就是整整体滚过去一样,所以就管它叫做滚动窗口。然后与之对应的还有另外一个窗口,叫做滑动窗口啊sliding Windows,这个大家就更加熟悉一点,它的特点是什么呢?啊,它是其实是一个更广义的定义形式,它在window size,这是首先定义这个窗口长度啊长长度是固定大小的,然后呢,还要定义一个滑动步长,Slide这个滑动步长的含义就是说我构建这个窗口,这个桶,这个规则是什么呢?哎,是前面来了一个窗口,然后呢,朝后滑一段距离,不是说下一个窗口就是必须得紧跟着它的尾,对吧,头连尾,尾连头,而是呢,滑动一段距离,然后就开始下一个窗口的这个定义,然后呢,再滑动同样的距离,定义下一个窗口,所以就好像是一步一步往后滑,一步一步往后挪这样的一个状态,所以它的参数有两个,一个size,一个滑动的步长slide。
04:22
它的特点呢,同样也是时间对齐对吧?不同的这个分组之间时间对齐啊,然后窗口长度固定,但是它可以有重叠,所以大家要注意啊,在滚动窗口里边,一个数据不可能属于属于这个两个窗口对吧?不可能属于多个窗口,它一定属于一个窗口,而且只属于一个窗口啊,那有同学可能想,那这里边就在这个窗口分界线上的这个这个数属于哪个窗口呢?哎,这里我们要有要求定义的时候,它的这个头连位尾连头怎么定义呢?它的界限范围是前闭后开,也就是或者叫左闭右开对吧?八点到九点的这个窗口它表示什么呢?包括八点的数据,不包括九点的数据啊,所以你如果来一个九点的数据,它属于哪个窗口呢?它属于下一个,属于九点到十点这个窗口,对吧,哎,这就同样还是只属于一个窗口。
05:18
啊,这个大家只要知道它的这个规则就可以了啊,然后接下来那在这个滑动窗口里边,那它可能就一个数据可以属于不同的窗口了,对吧?啊同同时属于好几个窗口,这里边给大家提一个问题,大家可以先思考一下,如果说一个数据可以属于多个不同的窗口的话,那它到底属于几个窗口呢?啊,大家可以思考一下啊,下来之后可以把这个东西画一画,呃呃,然后这里边这个滑动窗口和滚动窗口大家就看到了,其实滚动窗口可以认为是一个特殊的滑动窗口,对吧?啊,为什么呢?因为这里面它参数少一个嘛,它就相当于是滑动不长,等于当前窗口长度size的这样的一个滑动窗口,就是你滑动朝后滑,我现在步子划的大一点,一下子把整个窗口长度都划过去了,那不就相当于头连尾尾联投了吗?啊所以在之前大家在Spark里边可能接触到的定义类似于就是一个滑动窗口的定义,对吧?啊就是滚动窗口,其实就是一种特殊的滑动窗口啊呃,那他们在具体定义的时候啊,其实是有不同的这个呃使用的场景的,比方说你像这个滚动窗口,它其实我们在做一些这个商业上的BI统计的时候,往往都是用滚动窗口,就统计一个周期内的,对吧,你像这个,呃,一天之内的日活啊,对吧,一个月的这个月。
06:39
的活啊,或者说诶,我们统计这个过去一周之内的,呃,某一个平均值,某一个总量啊,统计这样的数据,其实都是限定一定范围的,然后呢,也不需要重叠对吧,你统计完今天就统计明天,都是投连尾尾联投的,不需要重叠啊,那滑动窗口呢,使用的就会更加的,呃,就是比较这个宽泛一点啊,就可以有更多的应用场景,那有一个应用大家会想到你像这个在有些场景下啊,就是对这个呃统计的间隔的时间要求更短的这样的场景,比如说你像在金融领域里面,哎,像这个股票价格对吧,有时候股票价格它统计什么呢?过去24小时之内的,哎,什么那个最高价最低价,或者说什么样的那个,呃,画出来的那张图对吧,这个的话你就相当于是什么呢?啊,你如果更新频率是每分钟的话,那就是每分钟它都要算一次,然后过去24小时之内的所有数据,对吧,做一个统计。
07:40
计,所以这种场景它就不能是呃,隔24小时才统计一次了,你想我们那个日活月活,那相当于是隔这么长时间才会统计一次嘛,啊,那你如果对于那种要求输输出频率很高的那种场景的话,就就得用滑动窗口了啊,所以他们分别有不同的应用场景,然后另外还有一种是叫做绘画窗口,绘画窗口就更加特殊一点,大家看它的时间就不会对齐了,为什么呢?它的要求就是说是按照什么去划分窗口呢?按照这个时间间隔作为划分窗口的标准,就是说我这里边是定义一个胎帽的时间,你如果超过了这个胎帽的时间的话,我就认为,诶,当前你这个窗口关闭了,对吧?啊,所以大家看为什么叫绘画呢?这就有点像我们平常这个大家登录网站啊,做一些这个有有安全登录保证的这些网站,特别是像一些这个有账户的保安全的啊,一些这个网上银行,你登录进去之后,大家会发现一段时间不做操作诶。
08:40
它就直接提示你需要去重新登录了,对吧?这是为什么呢?就是他那边给我们保持了一个绘画ex sessionion,如果你一段时间没有操作,没有新的数据来,他就认为你当前的会话结束了,对吧?啊,那出于安全性考虑,我要把当前的这个连接关闭掉,你不能接下来你万一说你已经下你在网吧里边上机对吧,你登录了一下这个网银,忘记退出登录,那别人上来之后还可以操作你的网银啊,这显然是不安全的,所以说这种情况下,我认为你一段时间不操作,当前窗口就关了,当前的会话就关了,所以如果你要是按照这种方式来统计这个我们的数据的话,那这种就就叫做会话窗口,对吧?啊,那既然你是按照时间间隔来的,它当然就不能不能有时间对齐的限定了,对吧?啊,这就没准嘛,说不准啊,我我得一直等着啊,等到它那个一段时间没来,我才会把之前的那个窗口关闭,所以它是这样的特点,所以大家也就会想到为什么没有技。
09:40
住会话窗口了,你说这个时间会画窗口的话,那它的含义就是什么?拍out,隔一段时间没来数,我我就我就相当于就可以关闭窗口了,那你如果要计数的话,怎么会画呀?呃,你你你隔几个数之后,然后就没来数就就就关闭吗?这完全说不通嘛,对吧?呃,你如果隔几个数的话,这相当于有些数据你就直接丢掉了啊,所以当然是不可能出现这种情况的,这就是我们说的在flink里边的不同的窗口类型。
我来说两句