00:00
那接下来呢,我们再来总结一下,当前这个data stream API里边到底支持哪些数据类型啊,那这个支持的数据类型其实大家会发现啊,就是flink流处理程序里边内部其实就是,哎,我们是一个数据流对吧?事件流,然后这个流里边呢,是不是还应该每一个事件有它对应的那个数据类型啊啊,所以它其实就是以数据对象表示的一个事件流。所以在这个flink内部,我们是不是必须得知道你每一步操作之后得到那个数据类型是什么呀,而且很麻烦的是还涉及到一个我们前后每一步操作是不是会分配在不同的slot甚至不同的task manager上面啊,那你是不是传输的过程当中涉及到网络传输,那就必须得做序列化版反序列化对吧?啊,所以对于这个类型系统的要求其实很高的啊啊那呃,就包括后面我们如果要是假如说你还要存盘,因为我们不是要考虑到容错吗?如果发生故障的时候要恢复,那是不是也会涉及到你要存盘落盘,那就必须也得序列化反序列化对吧?啊,所以这一点是必须要去要去做到的啊,那那flink本身它其实有一整套这个类型管理机制的啊,就是大家可能也知道,它底层是有一个叫做type information的这样一个类型,呃结构啊,所以整整体我们做转换的过程当中,最最终它是会以这个type information。
01:27
来表示当前的这个数据类型,那么对应的也会为不同的数据类型生成这个序列化器,反序列化器对吧?啊比较器,接下来我们就可以做,你像这个max m对吧,Some这些它都是怎么去做的呢?因为底层都有对应的这些东西。这就是关于这个弗林里边它的数据类型这样的一个特点啊,它是有一个类型提取系统的啊,那所以这里边既然它是有这个类型提取系统,对这个类型的要求这么高,那自然就是我们得考虑它到底支持哪些类型,不支持哪些类型呢。
02:04
那这里边支持的类型大家看啊,首先flink支持所有的Java和SKY的基础数据类型啊,这就是我们说的这个,呃,基本简简单的这个Java里边八大类型对吧?啊,这些肯定都是支持的,然后他们这个包装起来的那个包装类也都是支持的,对吧?啊,但是这里边int这写的是scla里边的int类型了,如果是Java的话,In t对吧,这些都支持。然后除了基础类型之外,还支持Java和SKY的元组类型啊,这里大家需要注意的是Java元组类型的话,这是弗link里边自己定义的,对吧?啊,这个元组类型我们要稍微的说一下啊,关于这个Java元组类型,大家看它本身是一个抽象类,然后在这个本身源码里边具体的实现,诶,就是它它的这个继承这个抽象类的这些具体的实实际的类啊,大家看是从TEMPLE0到一共到多少个元组呢?到TEMPLE25,所以在flink里边我们定义这个元组类型最大是。
03:09
25个数据对吧,这个跟SKY里边那个元组类型范围不一样,对不对啊啊,那所以这里边这只是一个定义而已啊,大家如果想扩展的话,你自己去声明去扩展甚至都可以啊啊所以我们在这里边其实就是如果要是TEMPLE0的话,里边就相当于没有任何的元素对吧?啊大家看就是直接去你有一个TEMP0就完事了,那如果是TEMP1的话,一元组里边就会有一个属性,有一个字段叫做F0对吧?啊,然后这个TEMP1也会有一个泛型是T0啊,那你像这个TEMP0的话,这里是不是就没有泛型啊啊,那对应的TEMP2是不是就是T0T12个泛型啊啊里边就是F0F1分别表示它的第一个字段和第二个字段啊,以此类推啊,你要看后面这个25元组的话,是不是就是这样啊。大家看是不是就是这样,是不是有25个泛型啊,T0到T24对吧,然后里边这个属性是不是也是这样啊,F0到F24啊,所以整体来讲就是这样的一个,就是这样的一个定义啊呃,那对于skyla而言的话,这个元组类型就简单很多了,大家知道skyla本身原生就支持元素类型对吧?啊,所以你用小括号括起来就可以使用了,这是关于这个啊,另外还有就是啊,我们的这个本身定义声明出来这个类的,呃,对应的这个类型啊,那skyla里面样例类这是完全支持的啊,就是你随便写一个啊,比方说case class什么,然后后面直接用就完事了,对吧,你直接在这个代码里面就可以使用。
04:42
那与之对应的Java的类可不可以用呢?哎,这就是所谓的Java pole啊,Java简单对象,但是大家要注意这个Java pole简单对象啊,是要有一些特别的要求的。就是它必须要有一个空参的一个public的构造方法,另外呢,呃,它的属性字段必须是public的,或者是呃,私有private的话,我们要去声明public的一些get sector,对吧,必须要符合这样的一个规定,所以它是类似于Java并要求的一些pole,对吧,符合这个要求,这才能被这个flink类型管理系统正常的解析处理,我们才能,呃,就是你像有些地方我们做那个,呃,就是序列化,反序列化对吧,或者说做这个呃,拉姆达表达式里边,我们要提取它类型的时候才能正确的提取出来啊,所以这都是跟这个类型系统的支持有关的。
05:39
所以大家看对于这个应用而言,是不是就是skyla的这种样例类会更加方便啊,对吧,你这里面我一行代码,你看这个case class一行就搞定了,我这儿是不是得写一堆啊啊对吧?啊,所以整体来讲确实是还是scla的支持会更加的方便啊,那另外还有一些类型,就是啊,一些特殊目的的数据类型,比方说集合类型啊,像这个a list对吧?啊,像这个哈奇map啊,还有像这个枚举类型,这些都是通通支持的啊,所以整体来讲,Flink对于Java和s skyla的支持还是非常的全面,也非常的到位的啊呃,基本上常用的数据类型都支持。
我来说两句