00:00
最后我们再来对比一下,并和Spark在大数据的处理领域,其实Spark可以说应该是霸主级的一个框架,一度有些人就认为这个Spark几乎要一统天下了,就是你如果说自己做这个大数据的话,你不懂Spark是不可能的啊,或者说你如果一个企业如果要是想要做这个,想要上大数据项目的话,那基本上就是首选就是Spark。它主要的贡献其实就是提出了这个内存计算啊,它跟这个哈杜普是一脉相承的,它有了这个内存计算概念之后,那相当于我们就不必再沉浸在哈杜普那个繁重的we reduce的那个程序里边了啊,而且它开发出了这个spaq之后,大家的这个易用性也会更好啊,这是一个可以说是一个划时代的大数据处理框架。啊,它除了处理计算速度快,可扩展性强,为这个P处理提供了Spark CQ,它还提供了这个流处理器啊,Spark STEM,它是可以专门进行这个实时的流处理的,另外它还有这个机器学习啊,Spark ML lab,另外还有这个图计算大,这都知道它的主要的这个四大组件啊,Spark CQ Spark streaming Spark Spark graph X啊那所以它是提供了这样一个统一的分布式的大数据处理平台啊,所以整个这个生态啊,经过这么多年的发展,可以说已经非常的完善了。
01:25
啊,但是呢,很多人都已经认为Spark这个如日中天啊,一统天下了。Flink可以说是异军突起,当前可以说这个很多人就是会认为之后一统天下的未必是Spark啊,甚至很多人认为弗link有可能会一统天下。好,那这到底是为什么呢?Flink到底跟Spark相比有什么区别?他们各自的这个优势和缺点劣势到底在哪里呢?接下来我们还是给大家再梳理总结一下,其实整体上来讲啊。弗,Link和Spark就是我们之前说的,他们本身处理数据的基本方式就不一样。
02:05
或者说他们俩就三观不合啊,他们基本的世界观就不一样。所以导致他们的数据处理架构、基本的架构就截然不同。啊,那它们的区别就在于Spark,它的底层就是P处理,它就是基于P的。而flink呢,哎,Flink是基于流的,从这个图上我们可以看到看的非常的明显啊,Spark即使是去做。做流处理,我们看到SPA stream里面做流处理,怎么做呢?输入流来了之后,它是要先把流处理截成一小段一小段的V批次数据。然后再去放到Spark的引擎上,对于这个VP4的数据分别去做一个处理计算,所以本质上Spark streaming还是一个批处理,对吧?啊,那那大家会想到你这样的一个V批次数据,所谓的这个micro batch啊,最后还是P嘛,只不过是这个P足够小的话,看起来它的这个延迟,它的实时性就会比较好了,看起来延迟的时间就不不那么多了,看起来就像实时一样了。
03:17
啊,所以有人就是就是诟病这个Spark streaming说他是。伪实时啊,说它其实真正意义上来讲还是一个批次,它是微批次。啊,这就是Spark啊,它底层本身就是批处理架构,所以要做流处理的时候,必然就会有一个别扭的地方。而对于弗link而言呢,它的本质,它本身处理数据的时候就认为它是零。它就是数据来了一个就处理一个,来了一个就处理一个啊,那所以这里边就没有攒批的这个过程对吧?哎,所以这里边我们就直接把这个数据来了之后,让不同的任务去做分发,去做计算就可以了。那大家可能会想到,那flink能不能做批处理呢?
04:02
其实也是可以的。你像Spark,它可以做流处理,他就认为把这个流数据切的足够小,切成足够小的P,那就变成流了,所以他认为硫是一个特殊的P,那对于弗Li克而言呢,他是认为一切都是流。他认为批数据是一个特殊的流,是什么?什么样的流呢?它是一个有界的数据流,这就是之前我们提到的所谓的邦底的data和这个on邦ED的data,看这个数据到底是有界还是无借,所谓的有借,那就是数据是一个一个来,哎,但是呢,我知道它有结束的时候,等到某一个数据来的时候,我一截止好之前这部分要处理的数据没有后续了,所有的数据就都到齐了,这样的一段数据处理的话,这就是一个有借的数据。那如果说要是所有的数据不停的来,不停的来,根本就没有结束的时间,这是什么呢?哎,那这就是无界的数据流了,有头没尾,这就是无界数据。
05:12
所以这其实就是。本身对于数据处理的基本方式不同,他们的世界观不一样,那么他们本身导致啊构建起来,设计出来的数据处理架构就有所不同。那从这个架构上看,那自然就是Spark更加适合处理。批量的数据,它更加适合应用在海量数据的这个批处理上面,而对于弗林而言呢,它本身就是基于流的设计,更加适合处理流数据。这是基本的数据处理架构。然后另外。还有就是数据的处理模型和所谓的运营式架构了,那在底层实现的时候,我们就知道了它的基本架构不一样,到底体现在哪儿呢?那就是Spark采用的是RDD模型,分布式弹性数据集,呃,所谓的r DD Spark streaming。
06:05
底层我们在做处理的时候,Streamam它本身是什么呢?实际上也就是一组一组一组的小批量VP的数据的RDD的集合,对吧?哎,所以你在里边可以直接就是for r DD,直接去处理RDD计算。本质还是不变,都是RDD分布式弹性数据集啊,所以它还是一个数据集。那另外flink呢?Flink基于的是数据流,它的数据模型就是数据流,就是所谓的。Data strip。那我们也说了他的这个API。本身调用的时候就叫做data stream API,那另外呢,它还基于的就是事件序列,它是基于事件触发,事件驱动的这样一套机制。这跟皮书理就完全不同了。还有一点就是运行时的架构,那其实也是它这个数据模型啊,和这个数据处理本身底层的方式不同,导致它的运行时架构就不一样,Spark的运行架构它是一个P计算,P计算的话就是我们根据数据处理的这个每一步操作画出这个dag有效环图啊,把这个任务串起来的这个dag,那是要先划分成不同的stage啊,一步一步操作,这个是划分stage的。
07:22
每一步操作做完了之后,那接下来有可能要做沙Le,然后进行到下一个stage里边再去做这个计算啊,它是一个阶段一个阶段去完成的,这是批处理一个典型的特点,就是数据都到齐了之后,然后每一阶段的计算我先去做,做完了之后呢,所有数据都完成了,对于下一个阶段来讲,这就相当于数据又到齐了嘛,然后我杀后之后到下一个阶段再去做。那流处理link是怎么样的一个执行的模式呢?给大家看一下流处理的执行模式啊,这个比较有趣。流处理的执行的时候。
08:00
同样,还是前后有不同的任务。数据处理场景下是分布式的,会有多个这一个病情的节点,这是同一个任务,这是同一个任务,那对于这个弗link而言,他需要向。那那样空间划分阶段,每一步任务做完了之后,统一收集数据,然后再去做沙Le给到下一步吗?不需要,因为flink流处理里边标准流处理是来一个数据就处理一个。哎,那所以这里来了一个数据之后,我就在这里处理啊,处理完成之后,比方说变成了一个三角,那这怎么办呢?我需要等其他的数据都处理完,然后再一起杀佛吗?不用我直接处理成一个三角,直接朝下游传递不就行了吗?哎,或者说在下游的这一步,假如说啊,在这一步它可能有了这个类似于沙父,它可能根据不同的K要分配到不同的节点上去,哎,那我就直接把它传到下一个节点不就完了吗?他根本不用等其他的数据,也不用等其他当前这一步啊,其他节点操作的执行结果就只跟当前数据,当前操作有关,来一个处理一个,处理完了之后直接传递到下一个去。
09:11
什么叫数据流?这就是数据流,所有的任务都放在这儿了,然后我们的数据就相当于直接在里边做了流动。如果跟Spark要做一个对比的话,就有点儿像什么呢?Spark有人说数据不动代码动啊,就相当于是我们数据先放在这儿,然后代码传来传去,然后让不同的数据去执行不同的操作,执行不同的这个任务,然后如果说数据需要做这个分区调整的时候,这个代价就非常大,杀斧的这一步是非常麻烦的。而对于这个flink而言呢,它就有点像是代码不动数据动,铁打的营盘流水的兵。我的代码要做的操作啊,任务都已经放在这儿了,数据来了之后呢,就不停的流动就完了嘛,这就是数据流嘛,因为我是来一个处理一个,我有充分的时间让你去做这件事情。
10:01
啊,这就是弗link跟Spark最大的一个区别。
我来说两句