spark streaming与spring batch批处理

时间:2022-07-31 16:03:23
之前很不理解什么是流计算。那么流计算中的流,如何去理解?因为把数据看作是源源不断的流,那么数据就没有起始与结尾,那么如何去处理它呢?
这几天看了 spark快速大数据分析 这本书受益颇丰,思考了一下得出如下结论:流计算中的”流“指的是把数据作为一种抽像流的方式。spark 

streaming 将源源不断的数据流以流的形式进行处理。但是我们常说的流计算,个人理解指的数据以流的形式输入到spark streaming,至于数据是否是源源不断的则并没有要求。之前一直误解”流计算” 指的是数据必须是源源不断的流。对于数据是源源不断的流,spark streaming有一个间隔时间视窗(比如1秒钟)的概念,比如将这1秒钟的时间内的接收到的所有数据,当作一个数据流,然后输入给spark 集群处理。也就是spark streaming 将数据以时间片断的形式进行截取,然后逐个进行批处量。所以spark streaming的流计算的本质还是批处理。



如果使用过spring batch 的同学,则很容易理解spring batch 中的数据读取(每次只能读一条,由于接口定义限制)、数据处理、数据写入,也是典型的批处理模式。那么对于spark streaming的狭义理解,个人认为就是类似spring batch这样的框架。当然spark streaming也是一个框架,但是它提供了更多处理大数据集的能力,况且在处理数据与程序的本质上是与spring batch是不同的。spring batch是代码加载数据处理的过程,即数据喂代码;而spark streaming则完全是相反,即代码喂数据。即写好的数据处理逻辑,要退送到spark集群去执行。


spark streaming作为流处理,那么它在集群的容错,负载均衡以及任务的调动上,都帮我们搞定了,并且围绕它的开源生态系统也有很多。所以我们没有必要在围绕类似spring batch这样的框架,再重新造*了。因为我之前已经这样作了。比如依赖于spring batch的日志处理简单的框架即是:

1.log4j 日志投递至activemq ;

2.spring batch jms itemReader从activemq 读取数据,并且将过期时间设置足够长(比如一年)以保证job不自动退出;

3.spring batch itemProcess业务逻辑处理;

4.spring batch itemWriter写入处理结果;

但是这个框架先天的缺陷是不能承受大并发,大数据量,以及快速计算,所以当数据大到一定程度,只能进行扩展,最终的结果就会走向spark streaming这样的流处理框架。