00:00
Link在具体使用的时候呢,它还有一个特点,就是具有分层的API,我们可以用不同层级的API去编写flink的程序,实现各种各样的应用需求,整体来讲,它的API是分了四层。我们可以看到这四层啊,从上到下,越往下,越往底层就会越具体,它的表达能力就会越强,也就是说能做的事情就会越多,使用也会越灵活,而越往上呢,越来越小了,对吧?就像金字塔一样,那么越往上它的使用就会越方便,因为它的语义就会特别的明确了,他能做的事情就已经指定了,对吧?你直接调这个函数,调这个功能,就实现对应的这个需求就可以了。啊,它使用会越方便,那么他能做的事情呢,可能就会受一些局限,所以在不同的场景下,我们可能就会用到不同的API。
01:02
这里边给大家重点要说一下是。配草。这个叫做核心API,就是所谓的data stream或者data set API在flink里边呢,它基本的这个数据类型啊,它其实就包装成了一个Java类,这个类就叫做data stream。啊,那当然data stream,一看这个名我们就知道是数据流嘛,它是基于这个流处理而言的,那针对批处理呢,在link里边还给了另外一个类型叫data set,其实后面我们会讲到啊,Data set现在用的已经很少了,因为在后续的弗link版本里边啊,特别是这个01:12之后,已经弗link完全实现了所谓的批流统一,我们统一都用data stream API就可以做流处理和批处理,所以data set API基本上已经是处于这个弃用的边缘了,我们可以做一点了解,但是这个并不是重点,所以我们关键就是看data stream API。
02:01
那么在处理的过程当中呢,当然就是把数据,我们要处理的这个数据看成一条流,然后基于这一个流就可以调用各种各样的方法进行转换操作,比方说我们可以做map啊,可以做一个转换,可以做reduce啊,可以做这个规约,做做聚合,另外呢,还可以做开窗,还可以做两条数据流的连接啊,就相当于类似于我们的join啊,这些操作都是基于data stream,可以去调用它的这个语义啊,其实已经非常非常多了。然后如果说我们想要做的这个操作更加的复杂的话,比方说我不光是想要基于这个数据流,基于数据去做一些操作,我还想干什么呢?我还想知道当前当前的这个时间,到底之前我们不是说了有事件时间语义吗?我想知道当前的时间到底到什么程度了,另外你不是说他是有状态的流处理吗?我还想自己去控制各种各样的状态。
03:03
我想自己知道当前的这个状态和时间到底是什么样的,那这个怎么办呢?那就。要使用。底层的API是所谓的process function。一般翻译成处理函数。哎,所以对于这个处理函数而言,它就是flink最底层的API,它能够获取到的呢,就是最底层的有状态的流啊,所以在这里我们就可以真正意义上的去实现所有的有状态流处理的那些操作啊,这个其实是一个可以说是一个大招啊,就如果说我们遇到了当前的API里边没有办法直接实现的复杂的需求,那怎么办呢?啊,最后一招就是直接使用底层API,理论上他什么都能做。因为我们能够拿到的信息,在这里都能够去获取到。
04:02
那当然了,在实际应用场景下。更多情况可能就是一个简单的聚合,简单的计算啊,就是像我们平常这个大数据处理,不也都是直接写CQ就搞定了吗?啊,那所以对于很多常见的需求,我们也可以用更加上层,更加抽象化的这些API去做调用,去做处理,那就是所谓的table API和CQ。那首先是table API table API啊,它是弗link为我们提供的一个声明式的领域专用语言,就所谓的DSL啊,它本身其实就是基于表。来定义的一套API,也就是说之前我们处理的不是流吗,数据流吗?现在要处理的就变成table了,变成表了,看起来就好像把我们之前的这个流变成了大家比较熟悉的啊,能够用CQ查询的那些表一样。
05:00
啊,那只不过这个table API呢,它不还不能直接去用CQ,它是提供了一套API,就是相当于你基于这个table可以去调用一些Java里边的方法去做一些操作,类似于CQ的一些操作,所以这一套就叫做table API。啊,那所以还是嵌在Java语言里边的一套表操作的API,那更常见的操作当然就是你既然都有表了嘛,那我直接基于他去写CQ不就完了吗?哎,所以最上层的就是CQ。当然这个CQ跟table API是密不可分的,你首先得能够把它转换成表,然后再写CQ去做查询就非常容易了吧?啊,所以这两部分往往是结合在一起去说的啊。啊,那现在目前来讲呢,Table API和CQ。基本上已经是可用了,但是呢也还不够完善,因为CQ里边啊,能够在实际项目当中使用的那些操作,那可能都要去自定义一些函数啊,这些目前系统已经提供的函数还是有限的,有一些特定的功能还不能直接去做啊,所以说呃,这部分呢,还在快速发展的过程当中,而且这一部分即使是它底层的一些结构,一些这个API的使用方法也在不停的变啊,就比方说像之前我们说到1.9。
06:21
把它内部的blink版本合并进来了,那个时候啊,整个这个table API和CQ的用法就就发生了一个大的改变,然后到后面一点11:11 12到现在的13,几乎每一个版本都会有一些调整啊,所以这一部分呢,我们只要知道它是什么东西,然后知道它怎么用就可以了,关键是把它的这个核心的概念理解清楚,以后如果版本发生变化的话,大家还是要随时更新,随时关注官网,看看又有哪些新的用法。这就是关于这个福印API的分层。
我来说两句