00:00
接下来我们开始一部分新的内容,这个可能大家就会相对觉得稍微轻松一点,因为这个window嘛,大家也不陌生,对不对啊,我们接下来给大家讲这个flink的window API。好,呃,主要内容其实就是呃,从window的概念先给大家说一下对吧,这个大家都很熟啊,然后是window类型,最后给大家讲一下API,首先大家先看一下我们现在处理的这个状态啊,就是为什么要flink里边要引入window呢?呃,大家其实会想到我们说flink的处理的是流数据,真实的流数据是一个什么样的呀?对正常来讲都是无界的,对不对?有始无终,持续的,连续不断的要来,那么大家就会想到我们怎么去处理这样一个无限的数据流的无界的数据流呢?你是不是总得截止到某个位置去,去做一下判断啊,你不能一直等他,我无限的来对不对,那那你这个等到什么时候才是个截止嘛,所以说大家会想到,如果要去处理无界的数据流,最直接的一个方式肯定就是要把无界流对变成有界的。
01:15
相当于就是要把它做一个切分,所以这里边我们最常用的一种方式就是对无限的数据流做切分,得到有限的数据集,把无限流转成了有有限流,对吧?呃,那最后那个我们其实能够产生出来的一种通用的方式是什么呢?就是这里边所谓的window啊,大家也很熟了啊,它可以把流数据里边。所有的数据分发到有限大小的桶里边去做分析啊,这个就是在Spark里面也有类似的概念,对吧,所以。大家看一下flink里边window有哪些类型吧,呃,在这个flink里边window的主要的类型啊,按照窗口截取的这个标准可以分成两大类,一类就是time熨斗,另外一类是抗熨斗啊,这个大家应该都都熟悉对吧?这个都没什么问题,探运就是按照那个时间嘛,对吧?呃,你这个时间内的数据,然后截一段,那抗运动呢,很简单,就是按照来了几个数截一个对不对,按照数量啊个数去截这个window,所以它其实都是截取有限数据集的一种方式而已。
02:33
那具体来分,再来细分,那大家会看到,根据这个窗口本身的实现的原理,就是窗口本身划分的原理,又能分成这么几类,比方说在这个时间窗口里边就有三类滚动时间窗口。滑动时间窗口还有一个绘画窗口对吧?啊,同样在技技术窗口,这个count window里边也有滚动的count窗,Count window技术窗口还有滑动的技术窗口啊,那么这里面就没有绘画窗口了啊啊,所以大家会看到就是这个。
03:10
呃,所有的这些定义其实大家应该都不陌生,我们接下来就还是分类的一个一个给大家说一下吧。首先是滚动窗口,这个名字大家也很熟了啊,Tumbling Windows那么直观,从这个图上来看,大家其实就能看到它的特点是什么呢?五成等于它的特点是不是就是等间隔的这样去划分窗口啊,就是把整条流里边就是诶一段一段一这按这样去划分了,对吧,它是按照一个固定的窗口长度,一段一段切分对不对,切出来的效果是有什么样的特点呢?诶,特点就是所有的窗口这个时间是不是都对齐的呀,前面一个窗口结束,紧接着是不是就是下一个窗口开始,哎,所以为什么把它叫滚动窗口呢?其实就是就像一个窗口在翻一样,对吧?翻跟头一样,哎大家大家想象一一根棍子这样来来回翻,是不是就是头接尾,尾接头对不对,就是这样一个状态,所以说它的时间都是对齐的,而且窗口的长度都是固定的,对吧?而且窗口之间是不是完全没有重叠啊,严丝合缝的衔接对吧?另外还有一个特点大家要注意,就是每个元素每个数据会被分到几个窗口里面去,是不是肯定就是划分到确定的一个窗口啊,对吧,只能划分到确定的一个窗口里面去啊,这就是滚动窗口的一个一个,呃,定义啊,所以大家会看到它一般会用在什么。
04:50
网景的一般可能会放在一些,就是所谓的这种,呃,就是商业智能分析,就是所谓那个BI分析对吧,BI统计这些时候,他关注的一些商业指标,可能往往就是某个时间段的一个指标,对不对啊,比方说那个啊,一天当中的销售额对吧,一个月的销售额,这个呃,一周的销售额,它往往就是一个时间段,一个时间段啊,就是完全是衔接的这样的,对吧?啊,所以这是。
05:19
滚动窗口的一个应用,然后接下来我们再看滑动窗口,滑动窗口大家也也就很熟悉了,那这个跟滚动窗口不同的就是这个这个窗口它能它能往后滑对不对,它不是整个就翻过去的,它能够按照一定的长度去滑动一小段距离对不对?哎,所以这里边它就相当于是有两个参数了,之前我们滚动窗口是不是只有一个参数啊,滚动窗口就只有一个size对吧,它那个大小一个参数,那滑动窗口是不是就可以有两个参数了啊对,它有一个是窗口大小,Size也是固定大小的啊,另外还有一个参数叫slide,就是滑动的不长对不对?哎,有这两个参数就可以定义一个滑窗,呃,所以大家看到其实滑动窗口它应该是更广义的一种。
06:11
定义的形式对不对,为什么说更广义呢?大家说滚动窗口是不是可以看成某一种特殊的滑动窗口,什么样的滑动窗口啊对,不长等于size,那是不是就是划这样的一个滚动窗口了,对吧,你一划划了整个划过去了,那跟整个翻过去是不是一样啊啊对,所以大家看到就是它其实是特滚动窗口,可以看成是特殊的一种滑动窗口啊呃,然后另外同样啊,它的对应的这个特征就是当然时间也是要要对齐的,对吧,呃,这个呃,这这个这个状态其实就是这样,它其实是应该是就是呃,应该怎么说呢?应该是。这个时间不能说是对齐对吧,这个我应该写错了啊,我看一下文档里边,文档是不是也写错了。
07:03
Time window。Window类型啊。对齐,诶这个好像也写错了啊,这个不应该说时间对齐对吧,这个这个其实我们不能说它是完全时间对齐的一个状态,呃,这样吧,我就把它删掉吧,这一行好大家会看到就是它的窗口长度是固定的,其实它不是严丝合缝的对齐的,对吧,它其实是哎有重叠可以有重叠,为什么说可以有重叠。嗯,对,大家会想到那跟滑动距离有关了,对不对,你要是一滑,滑了整个的那个窗口大小,那不就变滚动距那个滚动窗口了吧,那就没重叠了对不对,甚至还有可能,哎哎呀,一不小心这个步子迈大了对吧,一划划过了,那是不是都有可能有空隙出来啊对,所以大家发现就是它定义就更加灵活一些,所以这个滑动窗口其实在这个,呃,就是大家会看到啊,就是在这个实际应用当中,其实是应用最常见的一种情况,为什么呢?啊,它一方面是很灵活,这个就不像我们那个,呃,这个滚动窗口那么死板,就一定要是严格意义上的这么画对吧,呃,它它可以是这就是说的这个一波还未平息,一波又来清洗是吧,就是连续不断的这个波浪就滚过来了,对吧?啊,所以大家会看到在平常我们经常在什么应用场合用这种东西呢。
08:34
就比方说真的是很实时就要输出那种结果的时候,对吧,呃,你比方说我之前说那个VI分析,他可能是一个,呃,就是一个小时统计一个,对吧,这个这个小时统计一个,下个小时统计一个,是这样的,大家可能会想到有一些那种商业指标,或者说分析指标,像呃比方说那个,呃,这个股票交易所股票的那个涨跌,大家可能知道它有一个指标,可能是最近24小时的。
09:05
那个涨跌幅度对吧,它那个就不是按说是昨天那个自然日涨了多少,它是什么呢?它是随着时间变化对不对,就是从现在开始往前推,24小时到底涨了多少,那大家会想到这是不是就不能用滚动窗口啊,这应该用什么?对,这当然就是滑动窗口,这个24小时还是这么长的一个窗口,但是他得随时往后滑,随时往后滑随时算对吧,所以经常会用到这样的一个类型啊。好,另外还有一个就是绘画窗口,绘画窗口这个也比较简单,大家就是大概看一看也就知道了,它的特点其实就是什么呢?它其实就是说哦,就是它那个所有的这个窗口呢,它划分是按照按照就是时间间隔来划分的。就是说假如说我这一串这个数据啊,这个流数数据流里边两个数据之间的间隔超过一定时间的话,那我就直接认为诶,他们就应该是属于下一个窗口了,对吧?啊,上一个窗口就结束了,所以大家会看到他为什么叫这个绘画窗口session Windows啊,这是不是跟我们这个就是网络当中的这个会话session是一样的呀。
10:23
大家知道我们那个服务器跟客户端之间保持一个会话,保持一个session,是不是经常我们就得去设置一个太贸的时间啊,你比方说你你去那个登录一个电商网站,登录一个什么视频网站,登录完了之后一段时间没操作是不是啊,可能电商网站还那个不是特别的严格,对吧,你要是那个银行的话,银行的那个网上银行那个页面的话,他可能就特别严格,你上去之后一段时间不操作,那可能马上一刷新他就通知你,对吧?呃,太失效了,你重新那个重新再登吧,呃,所以大家会想到就是这个是代表什么,就是你一段时间如果没数据来的话,好,我认为这就是一个window,对吧,一个窗口当前的一个会话结束了,所以这个还是比较,呃,比较明显的啊,好,这里说的那个特点是时间无对齐,那那刚才那个我们这里也可以说是对齐的,就是说什么呢?就是说所有的这个不同组,或者说不同的这。
11:23
这个呃,流不同,不同子任务上这个数据啊,不同支流上的数据,它是不是所有的这个时间都是按照一个标准来算的呀。对吧,啊,这个从这个意义上确实它也是对齐的,对吧?啊,那如果你要跟这个绘画窗口相比的话,那是不是这个窗口它就更加灵活,更加没准了呀,你根本不知道它的那个起始和结束是什么样的,我们之前那个滑动窗口,它其实那个窗口起始结结束其实在不同的流上你是能知道,你定义了之后就能算出来这些窗口。一定是在哪,哪些时候开始,哪些时候结束,对吧,那现在你就根本就不可预测了,这是这个绘画窗口的一个特点啊,那当然就是大家会发现在这个我们讲的是按照那个时间窗口来做例子的,大家会想到如果要是那个count window的话,技术窗口的话是不是也一样啊。
12:20
比方说这个滚动窗口,那是不是我们这里边就是按照比方说有两个来了,我就我就给它滚动一个,对吧,那就相当于变成什么了,大家想一想。如果要是两个的这基数是二的,定定义好窗口大小是二的这个滚动窗口,那应该怎么划分,那是不是这是一个窗口?这又是一个窗口,是不是就是这样划分啊,对吧,其实就是两个两个划分嘛,就很简单啊啊这就是这样,那如如果要是说窗口是二,就是比方说这个大小窗口大小是二,不窗口不长是一的滑动窗口呢。
13:05
那滑动窗口怎么办?对,那大家有没有想到,那是不是就会有一个重叠啊,大家想对其实就是这样对吧,也很简单对不对啊,就是这样一个一个往后滑就可以了啊,所以大家其实会发现就是滑动窗口,还有另外一个特点就是什么呢?每一个数据,每一个元素有可能。是不是有可能属于不同的窗口啊,对吧,有可能属于多个窗口,这是完全有可能的。嗯,那大家说这个count window技术窗口有有这个绘画窗口吗?有绘画的技术窗口吗?当然没有,因为大家会想到我们这个要么就是一个时间间隔对不对,你你这个如果要是放在技术窗口里边,你总不不呃,就是你总不能定义一个说那个我间隔几个数之后再开一个窗口吧,那中间的那几个数就一定不可能被窗口包包括在内了,对不对啊,这个好像应用场景一般不会去,就你你居然就是中间一定要漏过几个几个数去去不把它做处理,这种场景好像很少见,所以大家看就是我们定义的时候就只有time,基于time的绘画窗口啊好,大家把这个先大概的先了解一下。
我来说两句