1. SparkStreaming简介
SparkStreaming是流式处理框架,是Spark API的扩展,支持可扩展、高吞吐量、容错的准实时数据流处理,实时数据的来源可以是:Kafka, Flume, Twitter, ZeroMQ或者TCP sockets,并且可以使用高级功能的复杂算子来处理流数据。例如:map,reduce,join,window 。最终,处理后的数据可以存放在文件系统,数据库等,方便实时展现。
2. SparkStreaming&Storm的区别
1)Storm是纯实时的流式处理框架,SparkStreaming是准实时的处理框架(微批处理)。因为微批处理,SparkStreaming的吞吐量比Storm要高。
2)Storm 的事务机制要比SparkStreaming的要完善。
3)Storm支持动态资源调度。(spark1.2开始和之后也支持)
4)SparkStreaming擅长复杂的业务处理,Storm不擅长复杂的业务处理,擅长简单的汇总型计算。
3. SparkStreaming流程
*
一批一批的处理数据,每几秒会在每几分处理一批数据,
1)数据源Client发送数据到Socker Server服务器的某个端口
2)在Spark Streaming中的receiver task一直监听Socker Server端口的数据。
3)每隔一段时间将监听到的数据封装成一个batch。(这段时间是自己设置的)
4)batch被封装成一个RDD,然后又被封装成一个DStream。
5)然后通过转换算子进行逻辑处理,变成另外一个DStream。
6)再经过output Opoertor算子(类似触发算子),得到结果。
总结:
Spark Stream的receiver task 会7*24小时一直运行,将接收到的数据保存起来,每隔batchInterval的时间将数据封装成一个batch,再封装成RDD,最后封装成一个DStream。
问题:
假设计算一批数据需要6秒,每5秒接收一批数据,随着时间的增长,数据的堆积会越来越严重,如果数据保存在内存中