Spark Streaming是一种构建在Spark上的实时计算框架,它扩展了Spark处理大规模流式数据的能力。对应在伯克利数据分析协议栈中的位置如图4.1所示。
Spark Streaming是Spark核心API的一个扩展,可以实现高吞吐量的、具备容错机制的实时流数据的处理。支持从多种数据源获取数 据,包 括Kafka、Flume、Twitter、Ze-roMQ、Kinesis以及TCP sockets,从数据源获取数据之后,可以使用诸如map、reduce、join和window等高级函数进行复杂算法的处理。最后还可以将处理结果存储到文件系统,数据库和现场仪表盘上。在“One Stack rule them all”的基础上,还可以使用Spark的其他子框架,如集群学习、图计算等,对流数据进行处理。
图4.1 伯克利数据分析协议栈
官网提供的Spark Streaming处理的数据流如图4.2所示。
图4.2 Spark Streaming的数据流图
Spark的各个子框架,都是基于核心Spark的,Spark Streaming在内部的处理机制是,接收实时流的数据,并根据一定的时间间隔拆分成一批批的数据,然后通过Spark Engine处理这些批数据,最终得到处理后的一批批结果数据。
对应的批数据,在Spark内核对应一个RDD实例,因此,对应流数据的DStream可以看成是一组RDD,即RDD的一个序列。通俗点理解的话,在流数据分成一批一批后,通过一个先进先出的队列,然后Spark Engine从该队列中依次取出一个个批数据,把批数据封装成一个RDD,然后进行处理,这是一个典型的生产者-消费者模型,对应的就有生产者-消费者模型的问题,即如何协调生产速率和消费速率。(www.xing528.com)
官网上给出Spark Streaming的内部处理机制流程如图4.3所示。
图4.3 Spark Streaming的内部处理机制流程图
对DStream的操作会对应到DStream底层的RDD序列的操作,内部的处理机制可以用图4.4描述。
图4.4 DStream内部的处理机制
作用在DStream上的API,在内部,实际上是作用到这个RDD序列上。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。