实时处理是指从数据产生到根据该数据计算的结果产生之间的这段延迟可以满足业务的需求,假如业务需求是延迟不超过10ms,而你的处理延迟为15ms,就不能算实时处理,而假如业务要求处理数据的延迟为30min,而你的数据可以在20min内计算出来,这也算实时处理。
离线处理是指数据计算的时间与线上的业务系统无关,换句话说,对时效性没有要求,啥时候得到计算结果对业务系统没影响。
有界流有一个定义的开始和结束。在执行任何计算之前,可以通过摄取所有数据来处理有界流。处理有界流不需要有序摄取,因为有界数据集总是可以排序的。
无界流有一个开始,但没有定义的结束。它们不会在生成数据时终止并提供数据。必须连续处理无边界流,即,事件在被摄入后必须立即处理。等待所有输入数据到达是不可能的,因为输入是无界的,并且不会在任何时间点完成。处理无界数据通常需要以特定的顺序接收事件,例如事件发生的顺序,以便能够推断出结果的完整性。无界流是一种不断增长的,本质上无限的数据集。这些通常被称为“流数据”。
处理有界流的计算称之为批处理,处理无界流的结算称之为流处理。
不一定,假如流处理的延迟满足不了业务系统的需求,即使它一直在处理无界数据,它也不是实时计算,假如连续的批处理可以满足业务系统对时效性的需求,它就是实时计算,SparkStreaming是一个典型的可以做到使用批处理来完成实时计算的引擎。
最终总结: 离线和实时应该指的是:数据处理的延迟; 批量和流式指的是:数据处理的方式。
可以看出,计算引擎由批处理向流处理发展,由一个组件干一个事向一个组件可以干全部事的方向转变,一代代计算引擎的发展,它们追求的目标是:更通用,更高效,更优雅,更易用的一栈式(可以批处理,可以流处理)的计算引擎。
一个好的组件,一个可以满足开发者使用的组件,它的发展趋势一定是更易用,更高效,有更好的UI(可以使用页面操作代替手工写代码),而且一个重要的点,一定需要支持SQL。
MapReduce作为初代计算引擎,它最大的价值在于提供了一种分布式计算的核心思想,map和reduce,但随着业务中海量的无限数据集越来越普遍,使用为无限数据流处理而设计的系统处理数据的场景越来越多,MapReduce的局限性也突显出来。
于是Storm应运而生,但是作为第一代的流式计算引擎,Storm有以下缺点:
阿里试图用Java重写Storm并进行优化,取得了一些成果,但是没有坚持下去,因为期间Flink就产生了,阿里转向对Flink的改进以及优化。阿里巴巴为什么选择Apache Flink?
Spark集批处理,流处理,SQL功能,图计算,机器学习于一身,并且支持SparkR和PySpark来做科学计算,可以说是当下最完美的一套计算引擎,基于内存的计算大大提高了计算效率,目前社区活跃度很高,是目前最流行的计算引擎。
Flink与Spark类似,具有Spark拥有的全部功能,那么在有Spark的前提下,我们为什么还需要Flink?
Spark与Flink最大的不同在于核心理念的不同,Spark所有的组件都是基于它的核心模块SparkCore而开发,而SparkCore是用于批处理的,也就是说,Spark认为,批处理是数据处理的常态,把流处理作为批处理的一种特殊情况来看待,于是,SparkStreaming是利用连续的微批处理来模拟实时处理。
而Flink认为,流处理是常态,批处理是流处理的一种特殊情况,在无界流中去某段范围内的全量数据进行处理就是批处理,于是Flink把核心放在流处理上,实现了一些高级的也是必须的功能,例如数据状态、事件时间、分布式快照、watermark等。
那么这两种理念到底哪一种是正确的呢?事实上,应该是Flink的理念更符合自然状态,我们生活中的数据,其实都是流数据,淘宝从上线开始就一直产生数据,我们不知道什么时候可以拿到全量数据,某家超市从营业开始就一直会有交易,我们也不知道什么时候可以拿到全部数据,当然,超市倒闭后可以拿到全量数据,但你却不知道它什么时候倒闭.....
事实上,Spark也意识到自己在流处理这个模块中确实做得不够好,于是新增了Structured Streaming这个模块来实现比较完备的,具有一些高级功能的流处理引擎,但是,Structured Streaming的很多功能又与Flink的功能如出一辙...
于是乎,Flink来了,悄悄的来了,虽然目前Flink还是没有Spark火,但我们有理由相信,这个计算引擎终将会占据一个核心的位置。
Flink诞生于欧洲的一个大数据研究项目StratoSphere。该项目是柏林工业大学的一个研究性项目。早期,Flink是做批处理的,但是在2014年,StratoSphere里面的核心成员孵化出Flink,同年将Flink捐赠给Apache,并在后来成为Apache的顶级大数据项目,同时Flink将计算的主流方向定位为流处理,即用流式计算来做所有大数据的计算,这就是Flink技术诞生的背景。
Flink是什么?Stateful Computations over Data Streams,有状态的流式计算引擎。
不多提了,开始学习Flink!