00:00
再来我们继续看处理函数,处理函数家族里边有八种不同的处理函数啊,当然就是说如果有一些扩展库的话,它可能这个形式跟这里的处理函数也非常的像,我们这里就是说flink核心的组件里边,核心代码部分主要就是这八个,那我们最常见的,最常用的是哪些呢?就是前三个啊,就是process function key process function,还有process window function。那前面我们已经讲过了,Process function key process function process function里边呢,最大的特点可以使用定时器,那这个定时器就必须要基于KBY之后,在K的process function里边才能够使用啊,如果你要是直接data上做了一个process操作啊,Process function里边它会报异常的。那一般化的这个process方程有啥用啊,啊,当然它还是有用的啊,首先就是别的API能能干的事它都能干,它能够获取当前的上下文信息,能够定义状态啊,这是负函数的特点嘛,另外还有一个别人干不了的,就是可以定义测输出流,关于这个我们后面再给大家说啊,那k process function呢,就又还可以定义定时器,那这个就更加的方便,那process window function呢,这是前面我们讲过的。
01:15
是开窗之后定义的一个全窗口函数啊,它主要呢是基于window stream去调process方法,那么要传入的就是这样的一个全窗口函数,所以大家会看到所谓的处理函数共同特点就是基于某种流,某种stream,然后统一都调点process方法。调了点process方法之后,里边要传的那个接口的实现或者抽象类的实现不一样了,对于data stream实现的是基本的process function,对于k stream的话,实现的是k process function,那别的同样有对应的这个名称,这就是所谓的处理函数家族里边不同处理函数的概念。那这里面的这个process window function呢,它其实有点特殊。
02:03
它跟后边还有一个这个draw function flink里边命名的时候跟别的命名不一样。别的都是什么什么有个前缀啊,什么什么process function,什么什么process function,这种命名一看就知道它本质是process function嘛。而这里的命名呢,它是process window function,所以这个看起来它本质其实是window function。它是不是全窗口函数,哎,那么前面process呢,表示它又有处理函数的特性啊,这个其实之前我们在用的时候也已经看的比较明显了,就是我们说process function里边一些通用的特点是可以获取当前的watermark有一个timer service有这样的一个时间服务,呃,然后当然还有这个负函数的那些应用,可以使用状态,可以做其他的一些事情啊,还可以做这个特殊输流,那process window function呢?大家会发现他没有那么多事情可干啊。回到源码里面,还是给大家再看一眼process function。
03:03
大家看到这里边啊,只有一个process方法,这里边我们能拿到的当前的key,一个上下文,然后一个呃,就是所有收集到的所有数据,一个interable类型的集合,最后是输出,这里边关键是这个contact,然后看一下里边所有的这个方法,就是就一个process,没别的了,所以关键是看这个contact。Context里边呢,能够获取到的是有窗口,当前的处理时间,当前的watermark水位线,这些是能获取到的,但是大家想一下的话,之前我们的那个pro方式好像不是这样用的呀。我们之前其实是contact里边有一个timer service timer service里边可以获取当前的事件时间和处理时间。啊,所以大家看到它其实是没有timer service的,所以我们也不能在这里去注册定时器,不能在process window function里面注册定时器,那你这么说的话,处理函数最宝贵最重要的特点都没有,那它这个有啥用啊?那大家回忆一下trigger里边是不是可以注册定时器啊,因为它是窗口相关操作嘛,Trigger里边可以注册定时器,然后这里边呢,又可以获取当前的时间,可以获取窗口的信息,另外还可以单独获取状态,那所以这个其实能干的事情也就都能做到了,对吧?另外还可以测出数流啊,所以本质上来讲,处理函数能干的事儿,只要用了process window function,在window里边也都能干,只不过定时器的话,当前的窗口本来就有一个结束时间,定时器,如果你还要另外定义的话,那你到trigger里面去定嘛,所以这其实就是process window function,不太一样的一点,它本质还是一个window function。
04:48
呃,那么这点我们就不再去做更多的测试了,前面都已经用的很熟悉啊,所以关键就在于要用这个process window function的时候呢,一般是希望包装窗口里边的一些信息啊,那至于这个current water和current processing time,这可能用的比较少啊,那这里边的这个状态也是有需求的时候我们再去用,一般情况下,前面我们有那个增量聚合可以结合起来用嘛,增量聚合的那个状态也就够了。
05:16
啊,这是关于process window function和前面我们这个窗口分类的一个总结。
我来说两句