00:00
啊,我们已经知道link里边window是什么了,那接下来我们看一看flink中的window有哪些基本的类型啊,大家看这个基本类型划分的话。可以划分成两大类,根据窗口本身截取的原则,基于的这个属性啊,那我们可以划分成时间窗口和技术窗口,时间窗口非常好理解,Time window嘛,那是不是就是按照时间来开窗对吧?比方说前面我们说的啊,八点到9.1个窗口,九点到10.1个窗口很好理解,那技术窗口又是什么呢?Count window它指的就是不是按照时间来截取,而是按照哎数据的个数来截取,对吧?啊这就不是说八点到九点,那我们是比方说十个数,诶,这是一个窗口下十个数又是一个窗口,对吧,按照个数。这个技术窗口是不是就有点儿像之前我们在那个skyla语言里边,大家当时学过有一个那个滑动窗口的那个那个方法,对吧?呃,集合里边有这样一个方法,它其实就比较像是一个。
01:02
里边在那个方法里边,大家回忆一下,有时间的概念吗?没有,那那那个是不是就属于一个技术窗口啊啊,所以这个其实之前大家也类似的都接触过啊呃,那么在这两大类窗口里边,如果我们再详细来划分的话,根据它窗口移动的规则。又有具体不同的划分啊,那接下来首先就是有这样的两大类,就是一类是滚动窗口,另外一类是滑动窗口啊,那在时间窗口里边还有另外一个比较特殊的窗口,叫做会话窗口啊,那所以呃,就整体的细分来讲的话,技术窗口里边没有绘画窗口啊,绘画就只跟时间有关系,所以我们详细划分有这么五类,滚动时间窗口,滑动时间窗口,绘画窗口以及滚动技术窗口和滑动技术窗口。接下来我们就分别给大家说一说啊,这这这些窗口到底是长什么样。好,首先我们来看一下滚动窗口啊,所谓的滚动窗口这里边没有没有区分是时间窗口还是技术窗口啊,这个大家就知道,只是按时间来结,还是按照个数来截就可以了,对吧?啊,我们现在的这个截取方式,大家看到这不是按照个数来截的,看起来像时间来截的,对吧?啊,所以这这是以时间窗口为例啊,讲一下这个滚动窗口,滚动窗口的英文名字叫tumbling Windows,这个英文名大家还要记记忆一下,因为在源码里面有些地方可能要要涉及到这个单词啊,滚动窗口啊,那这个滚动窗口什么意思呢?简单来讲的话,诶,大家看其实就是按照这个,比方说我们现在是按照时间来截取,那是不是就是固定的时间间隔诶,隔一个截一个窗口,隔一个截一个窗口,所以按照窗口的这个截取规则,就可以认为这个窗口是不是头连尾,尾连头,一个挨着一个,把这个整个时间段做了一个唯一的划分啊,哎,这就是这个滚动窗口的这个特点,所以它基本。
02:59
的概念,就是把数据根据固定的窗口长度,然后进行一个切分就可以了啊,这就把这个无限的数据流切分成了有界的啊,那么它的特点如果是滚动时间窗口的话,就是时间是对齐的,什么叫时间对齐呢?
03:18
诶,大家看这里边这个这个,呃,首先啊,我们这里边的这个概念里边USER1USER2USER3,这相当于是不是我们当前这个数据是按照user做了一个分组啊,那么现在我们如果开窗的话。那是应那是就是USER1USER2他们的那个时间会不一样吗。大家想一想,如果我开这个滚动,滚动窗口可以怎么开呢?是不是我直接设一个当前的这个时间,滚动时间,呃,滚动窗口的长度,比方说是一个小时,那自然我们就想到了这个长窗口就应该是八点到九点,一个,下一个是不是就紧接着九点到十点啊,十点到11点对吧?就是就是这样的一个窗口的设置,那当前这个USER1USER2 user1统计的是八点到九点,那USER2统计的就不是了吗?不会对吧,他们的时间是不是完全都一样啊啊,这个首先都是时间完全对齐的啊。
04:15
然后另外还有一个就是是不是它的这个特点是头连尾,尾连头无缝对接啊,完全是衔接在一起的,而且数据是不是完全没有重叠。诶,大家看到这里面有一个问题,就是说每一个数据都应该属于一个窗口,而且只属于一个窗口,那这里面有一个问题,假如说我正好在这个分界线上呢。比方说这个是九点到十点的一个窗口,现在是九点整这个数据,它到底属于前面八点到九点的窗口呢,还是属于九点到十点的窗口呢?哦,这个大家注意,这就是看我们规定了,对吧,它是不是只属于一个就可以了,我们现在规定是窗口设置的时候时间线是。
05:01
左闭右开,或者叫前闭后开,就是包括当前窗口里边的数据,包括它的起始点时间,不包括它的结束点时间,也就是说九点到十点这个窗口是不是就包含九点这个数据啊,不包含十点的数据对吧?所以当前这个数据应该属于后边的这个窗口对吧?啊,这样的话就是唯一的一个切分了。然后另外还有一个特点,就是大家看这里边这个窗口定义的时候,是不是就只有一个参数啊。就是当前窗口的size,窗口大小长度啊,所以所有的窗口我我定义出来之后,大家会发现头帘尾尾连头,而且这个长度还一样,那是不是我只要定一个后面紧接着就全知道了,所以这个窗口其实就是固定的,对吧?只要你设设定了它就是一个小时的时间窗口,那其实我们就自然就知道了,八点到九点,九点到十点,十点到11点,每一个窗口其实都可以以此类推,直接把它定好。
06:01
这就是滚动窗口的一个特性。这个比较简单啊,然后我们继续往后看,进一步就有了另外一种窗口,叫做滑动窗口,滑动窗口的英文名叫sliding Windows。那滑动窗口大家大家看它这个特点又是什么呢。同样还是这个例子,哎,大家看现在是不是就不是头连尾尾联头了,而是诶我当前第一个窗口是红色的这个窗口啊,然后第二个蓝色的窗口呢,它不是直接从它结束的时间才开始下一个窗口,而是它还没结束从中间就开始下一个窗口了,对吧?然后下一个这个WINDOW3也是这个第二个窗口还没结束就开始下一个窗口了,所以直观上来看的话,是不是有点像这个窗口是。往前滑动了一段距离啊,一步一步在往前滑,对吧,所以与之对应,前面那个为什么叫滚动窗口呢?就有点像它是一个跟头都翻过去了,对吧,头头和尾嘛,一个跟头完整的翻过去,哎,所以这就是这个滑动窗口和滚动窗口的一个区别,那大家想一下,滑动窗口和滚动窗口有什么联系呢?
07:12
这里面我们提出一个概念,其实滑动窗口是可以认为是一个广义的。广义的窗口定义形式,也就是说滚动窗口也可以看成一个特殊的滑动窗口,大家想一下是什么?哎,是不是就是滑动不长等于滑这个窗口长度的滑动窗口啊,啊,就是我现在这个往前滑,哎,一不小心这个步子迈的有点大,一步一滑,把整个这个伸位都划过去了,那不就变成滚动了吗?哎,所以这其实是一回事啊,本质上是一样的,那当然这个滑动窗口它更广义,所以它定义的时候要多一个参数。除了Windows当前的这个窗口长大小之外,另外还有一个滑动步长,那么它的特点也是窗口长度应该是固定的。
08:02
那每一个数据是不是可以同时属于对不同的窗口啊,对吧?呃,窗口之间是可以有重叠的,那问一下大家,一个数据可以同时属于几个窗口呢?这个图上看的话,大家发现好像是同时属于两个窗口对吧?比方说中间这个数据,诶,我看这里边就是同时属于红色的WINDOW1和蓝色的WINDOW2WINDOW3就已经划出去了,对吧?然后这里边的这个数据的话,呃,这这个数据的话,那它同时属于的是蓝色的WINDOW2和这个绿色的WINDOW3对吧?啊也是同时属于两个窗口,那大家想这个是一定是只属于两个窗口吗?这就没准了对吧?这关键在哪里?对,关键在于你这个布长迈多大对吧?大家想如果说我这个布长迈的很大的话,那是不是窗口之间的重叠就小啊,那是不是同时所有的窗口重叠起来的部分也就也就会小。
09:03
那大家会想,现在我这个是这个,这个一下滑的很大,这看起来滑了滑了多长啊,是不是滑了这个一半的距离啊,所以可以认为这是这这算什么呢?这是八点到9.1个窗口,然后八点半。到九点半一个窗口对不对,然后这个就是九点到十点又一个窗口,那大家看既然是这样的话,那中间我取一个数,比方说这个数是08:35,那当然它只属于八点到九点和八点半到九点半两个窗口,对吧?这个很容易想到,但是如果说我现在窗窗口这个很密呢。比方说你现在是半个小时滑一次,假如说啊,我现在的这个状态是。对,五分钟就滑一次,大家想。假如说五分钟又滑一次,那是不是这个就距离很近啊,很近就滑了一次,然后后面是不是又隔五分钟又滑一次,又隔五分钟又滑一次。
10:02
大家想一下,现在同一个数据应该同时属于多少个窗口?这里边啊,大家大家想到就是我中间如果取这个数据的话,它是不是同时当时当前应该同时,至少我能看到的就应该同时属于这第二个窗口,第三个窗口,第四个窗口应该都属于对吧。那大家想一下,如果一个小时的窗口长度五分钟滑动一次,一个数据应该同时属于几个窗口呢?大家觉得同时属于11个窗口是吧?那我们还是举一个例子啊,前面我们不是给大家讲那个08:35啊,08:35的话,这个还涉及到一个整点数,对吧,我换一下吧,08:36吧。08:36的这个数据,它同时属于哪些窗口?首先大家能想到八点到九点肯定属于对吧,这个是最简单的啊,八点到九点诶对,然后大家会想到8.05~9.05是不是也属于啊,对吧,零五分啊,然后010分,因为五分钟一个嘛,但看这个滑动不长,是五分钟的话,是不是下一个窗口应该8.05~9.05啊对吧?然后接下来八点十分到09:10是不是还有15~09:15还有对吧,20还有25是不是还有啊。
11:24
30是不是还有,35是不是还有啊,40还有吗?哎,40就没有了,因为08:40~09:40超出去了,对吧?哎,这这个肯定就不属于了,那当前大家看这里边是。这是八个窗口,只有这些吗?诶对,大家想你这是往后看往前看是不是也可以啊,谁说我必须要以八点开始的第一个窗口啊,对吧,你这个五分钟隔一个嘛,那前面是不是07:55~08:55也是一个窗口啊。08:36属于不属于属于啊,没毛病对吧,那再往前推的话,07:50~08:50。
12:09
07:45~08:45对吧,然后07:40~08:40是不是也也属于啊,最后一个07:35~08:35属于不属于哦,35这个就不属于了,对吧,这个就不属于了。所以大家看它是从07:40~08:40的窗口,一直到08:35~09:35的窗口,一共多少个,其实大家知道这不就是在一,你看最初开始是07:40对吧,最后结束其实08:40,然后不包括08:40那个对不对。那总共这不就是一小时的时间范围内,然后五分钟一个窗口吗?一共多少个?对大家想,那其实是不是这跟窗口长度和窗口滑动不长的这个他们的这个除法的关系有关系啊,如果我是60分钟一个小时的窗口,隔五分钟划一次的话,是不是一个数据就应该同时属于12个窗口对吧?啊,所以这就是这个滑动窗口的一个设置啊,它可以有重叠啊,同时可以有就是你当前如果要是五分钟划一次的话,一小时的窗口,那可以有12个窗口都重叠在一起,那所以一个数据就同时可以属于12个窗口。
13:30
这就是关于这个滑动窗口的一个定义,然后另外还有一个特殊的形式是叫做会话窗口,那绘画窗口session window啊,它就比较特别了,大家看一下现在的这个窗口,它还是那个时间是对齐的吗?这就没准了,大家看这个USER1USER2,不同的这个user看起来这就这个窗口就完全没准了,对吧?那所谓的这个会话窗口到底是按照什么时间来截取的呢?绘画窗口既然是session嘛,大家想一下什么叫绘画,那绘画的话意思就是说,你像我们这个简单的绘画,你像我们打电话,这就是绘画,对吧?那你想是不是假如说我们两个人打电话的话,这个只要是连接起来的,这个状态是不是两个人应该是不停的都在发送数据,都在说话呀,一旦要是说你有一段时间,哎,大家会想到,那你一段时间大家都不说话了,那是不是就相当于哦已经说完了,接下来是不是就挂了,挂断了,对吧?所以这里边我们截取绘画窗口的原则,它是什么呢?它就是如果隔一段时间我没有收到数据的话,就表示会话结束,前边的那个窗口就可以关掉了,就是一个会话窗口。
14:45
啊,就接下来如果再来数据的话,那就是下一个会话窗口了,对吧,下一次会画了就相当于是啊,所以大家看这里边比较重要的一个一个特点要求要指定一个什么呢?要指定的是一个,这不能指定窗口长度,因为你根本不知道这个会话有多长,对吧?啊有可能这个就是大家这个包电话粥是吧,一聊聊一个小时,也有可能这个说完事儿一分钟说完就挂断了啊所以这里面它关键是要指定一个session GAP会画的时间间隔。
15:15
这个时间间隔一定就是我们这个两个会话窗口之间的这个距离吗。不是大家看,有可能我中间就隔了好久都没没有数据来,那是不是就相当于这个绘画就一直没有啊,那所以它其实这个session GAP是一个对中间窗口之间距离的最小时间间隔,只要超过这个范围,那是不是就相当于开前面的窗口关闭,接下来开启下一个窗口啊,所以它的这个绘画窗口的概念是这样啊,它的特点就是时间无对齐。啊,那自然大家也就能想到这个绘画窗口可以有技术窗口吗?技术的绘画窗口可以有吗?那前面你像那个滚动窗口,滑动窗口,如果技术窗口的话,很好理解,就是按照个数来对吧,个数截一个窗口,哎,你比方说十个截一个,或者说你还可以划嘛,每隔两个再截十个的一个窗口,对吧,这个都可以好理解,那这个会画窗口的话,你说难道我可以。
16:13
隔几个数据没来的话,我再再截一个,开一个会话窗口吗?什么叫隔几个数据没来,这中间这几个数据难道就不是数了吗?啊,所以说没有这回事儿对吧?绘画窗口就必须要基于时间来开窗。啊,这就是关于在flink里边不同的窗口的定义啊,不同的类型。
我来说两句