00:00
那我们来讲一下flink里边另外非常重要的一部分API,就是所谓的window API窗口操作,那这一部分呢,主要内容是啊,首先我们介绍一下window的概念,然后呢,说一下在flink里边window有哪些哪些主要类型,最后呢,我们来讲一下window API到底怎么调啊,每一步操作到底是什么样的。首先我们来看window的概念,这个概念其实大家应该会很好理解,对吧?Window不就是窗口吗?啊,那大家想一下啊,在我们数据处理里边,窗口到底是什么概念呢?大家之前的印象啊,像在Spark里边,或者在其他的一些框架,或者说语言里边,对于这个窗口的理解,大家可能想就是诶数据来了对吧?数据都就是我们我们这里边数据一个一个啊都放在这儿了,然后我接下来是不是有这么一个框,然后去把这个数据做一个做做一个框起来就可以了,对吧?然后这个窗口是不是还可以移动了,对吧,我再我再往后移动一下,诶这个窗口窗口就往后移了啊,所以这是这可能是大家这个之前想到的啊,所谓这个窗口的概念,那这个flink里边的窗口又是什么概念呢?
01:15
大家要注意一下啊,跟我们之前理解的窗口是略有差别的,这里边在flink处理处理的过程当中,它对于窗口概念的提出,主要是因为要处理。就是要处理所谓的有界流,基于这样的一个概念提出的窗口,这样的,呃,一个思路和概念啊,啊大家想到,首先我们在弗林课里边要处理的是实时数据,是一个有头没尾,无休无止一直在来的数据流,那大家想一下,这样一个无限的数据流,我们怎么样去做操操作呢?最后我们的结果是不是就只有像之前大家看到的那样来一个处理一次就得到一个结果啊,永远都是这样的,对吧?那这里面就涉及到一个问题,假如说我们是一个实际的生产场景,我可能要想要统计一个一段时间内的一个一个统计报表,对吧?比方说我生成一个月度统计啊,一个一周的统计啊,或者季度统计,那你说这个它是不是对于时间是有一个限制的呀。
02:15
啊,对吧,因为你这种统计的话,你永远无休止的不停的更新,那相当于我这个就永远没做完嘛,那我什么时候才能把它拿出来,得到一张报表去,去说明一些事情,去调整我的营销策略呢?诶,所以这里边就必须把这个限的数据流进行一个切分,那大家想这是不是就相当于把无限无界流转换成了一个有界流啊,对吧,你在这个无界流上截取一段去处理,这不就是我们一段时间所有数据的一个统计结果吗?所以进行这个基本数据分析的时候,我们往往都要把它转换成有界流,那转换有界流应该用什么样的方式呢?这里面给大家提供一个基本的想法,就是我可以直接啊,大家想有限流,那不就是在数据流上去截取一段吗。
03:06
截取的这一段我们就叫做开了一个窗口,对大家看,这就是这个窗口的概念,对吧?所以在flink里边,它的这个窗口概念就是把无限流切割切分成有界流的一种方式,那它底层的实现呢,大家要区分,它其实不是像我们之前大家所理解的那样,数据都来了,诶,然后我开一个窗口把它框一下,大家想我能这么直接去框吗?你这样的话,这这是批处理的思路,是不是数据都到齐了,然后我拿个框去框他呀,那我们现在是数据连续不断的来,那我能直接就是数据已经有了,默认数据有了去框吗?那显然不行,所以现在的这个窗口,大家不能把它想象成一个,就是所谓的那个111个一个这个照片框一样,对吧,一个相框一样,而是要把它想象成一个。
04:00
一个桶,这就是我们所说这个bucket的概念。这个桶我们这里边啊,数据一个一个来,接下来的这个窗口是什么概念呢?就是比如说八点到九点有一个窗口的话。我把它相当于是有一个桶,这里边所有属于这个时间段范围内的数据全放到这个桶里来。八点到九点开一个窗口,那就是有这样一个桶,那一个数据来了之后,我判断哦,它属于这个时间窗口,就把它丢到这个桶里边。后边又来一个数据,哎,属于这个窗口,就丢到这个桶里面对吧?哎,那假如说大家想那个九点到十点,可能又有一个又有一个窗口,那是不是相当于就有另外的一个桶啊,所以接下来假如下一个数据属于这个时间窗口的话,就把它丢到后面这个桶里来。这样有一个好处,大家看这个好处是什么呢?当前这个窗口,它是不是就不依赖于,就不需要等到所有的数据都到齐,我才能去判断这个窗口啊,是不是相当于数据来了之后,我直接就能判断它属于哪个窗口,直接就是来一个直接去处理一个就可以了啊,所以首先这是它还拥有我们当前这个流式处理的特特点,流式处理啊,来一个处理一个,那另外还有一个特点就是。
05:24
大家想现在的话是不是相当于八点到九点的桶和九点到十点的桶,理论上来讲是不是可以同时存在啊?大家想想是不是这样,你要是之前我们的那个概念的话,八点到九点,九点到十点。这个窗口是不是应该只能有一个啊对吧,那你那之前我们那个数据不就是一个一个不停的来,来了之后它属于八点到九点,那我就是属于就框在框在这个框里,对吧?那那你如果要是刚才我们这个啊,就是把这个框一下,如果要是说已经到了下一个九点多的话,那是不是就应该属于下一个框了,应该是直接这么框对吧。
06:04
但现在就不一样了,现在是允许,是不是这两个同时存在啊,所以有可能出现什么情况,就是我当前本来我当前的时间是八点到九点,但是是不是有可能这个数据还都没没到齐啊,假如说有迟到的数据,或者说因为乱序啊,就是我们那个分布式处理啊,有些数数据姗姗来迟,它本来应该属于八点到九点,但是他从后面才来了。那大家想是不是我还可以?让它放到这个桶里来啊,只要这个桶当时我还没关,只要把它放在这儿了,是不是接下来继续可以处理,把这个数据丢进来就可以处理了,哎,所以大家发现本身的这个原理,这也是flink进行乱序处理进行就是把这个迟到数据啊进行处理的一个一个基本的就是数据数据结构上的一种支持啊,所以大家现在首先要树立这样一个概念啊,Flink里边的窗口就是用来把无限的数据流切分成有界有界流进行计算。
07:10
来来设计出来的,那么它底层结构呢,可以认为就是有限大小的一个桶,对吧啊。
我来说两句