MAPREDUCE服务 MRS-通过Spark Streaming作业消费Kafka数据:方案架构
方案架构
Spark Streaming是一种构建在Spark上的实时计算框架,扩展了Spark处理大规模流式数据的能力。当前Spark支持两种数据处理方式:Direct Streaming和Receiver。
Direct Streaming方式主要通过采用Direct API对数据进行处理。以Kafka Direct接口为例,与启动一个Receiver来连续不断地从Kafka中接收数据并写入到WAL中相比,Direct API简单地给出每个batch区间需要读取的偏移量位置。然后,每个batch的Job被运行,而对应偏移量的数据在Kafka中已准备好。这些偏移量信息也被可靠地存储在checkpoint文件中,应用失败重启时可以直接读取偏移量信息。
需要注意的是,Spark Streaming可以在失败后重新从Kafka中读取并处理数据段。然而,由于语义仅被处理一次,重新处理的结果和没有失败处理的结果是一致的。
因此,Direct API消除了需要使用WAL和Receivers的情况,且确保每个Kafka记录仅被接收一次,这种接收更加高效。使得Spark Streaming和Kafka可以很好地整合在一起。总体来说,这些特性使得流处理管道拥有高容错性、高效性及易用性,因此推荐使用Direct Streaming方式处理数据。
在一个Spark Streaming应用开始时(也就是Driver开始时),相关的StreamingContext(所有流功能的基础)使用SparkContext启动Receiver成为长驻运行任务。这些Receiver接收并保存流数据到Spark内存中以供处理。用户传送数据的生命周期如图2所示:
- 接收数据(蓝色箭头)
Receiver将数据流分成一系列小块,存储到Executor内存中。另外,在启用预写日志(Write-ahead Log,简称WAL)以后,数据同时还写入到容错文件系统的预写日志中。
- 通知Driver(绿色箭头)
接收块中的元数据(Metadata)被发送到Driver的StreamingContext。这个元数据包括:
- 定位其在Executor内存中数据位置的块Reference ID。
- 若启用了WAL,还包括块数据在日志中的偏移信息。
- 处理数据(红色箭头)
对每个批次的数据,StreamingContext使用Block信息产生RDD及其Job。StreamingContext通过运行任务处理Executor内存中的Block来执行Job。
- 周期性地设置检查点(橙色箭头)
- 为了容错的需要,StreamingContext会周期性地设置检查点,并保存到外部文件系统中。
- MapReduce服务_如何使用MapReduce服务_MRS集群客户端安装与使用
- 大数据分析是什么_使用MapReduce_创建MRS服务
- 什么是Spark SQL作业_数据湖探索DLISpark SQL作业
- MapReduce工作原理_MapReduce是什么意思_MapReduce流程_MRS_华为云
- Kafka架构_Kafka如何实现负载均衡_Kafka数据存储方式-华为云
- 分布式消息系统Kafka_分布式消息系统_分布式消息kafka可以解决什么问题-华为云
- MapReduce服务_什么是Kafka_如何使用Kafka
- 大数据应用范围有哪些_大数据技术与应用要学习什么课程
- 什么是Spark_如何使用Spark_Spark的功能是什么
- 数据治理中心_数据开发_数据开发能力_脚本和节点介绍-华为云