第2章:Spark Streaming简介
Spark Streaming是什么
先说说Spark Streaming到底是什么。
简单来说,它是一个流式处理框架。能处理实时数据流。比如日志、传感器数据、交易记录这些。
我习惯这么理解:它把源源不断的数据流,切成一个个小批次。每个批次就是一个RDD。然后交给Spark引擎去算。
这种机制叫「微批次处理」。说白了,就是把实时流当成连续的微批次来算。
核心思想:将无界数据流,转化为有界的微批次数据。
举个例子。假设你在监控网站点击流。数据每秒都在来。Spark Streaming会每隔几秒(比如2秒),把这段时间内的数据打包成一个批次。然后对这个批次做计算。
这样做的好处很明显——能复用Spark批处理的所有优化。包括内存计算、DAG调度、容错机制。
嗯,这里要注意:它不是真正的逐条处理。而是近实时。延迟通常在秒级。对于大多数场景,这完全够用。
Spark Streaming的发展历史
聊聊它的历史。我入行时正好赶上Spark Streaming的早期版本。
2012年,Spark 0.7版本首次引入了Streaming模块。那时候还叫DStream。API比较原始。
2014年,Spark 1.2版本开始稳定。我记得当时在项目中第一次用Spark Streaming处理日志。踩了不少坑。
2016年,Spark 2.0发布。引入了Structured Streaming。这是革命性的变化。
Structured Streaming把流数据当成「无界表」。你写SQL就能处理流数据。API更简洁。语义更清晰。
我曾经在项目中从DStream迁移到Structured Streaming。代码量减少了将近一半。而且更容易调试。
到了Spark 3.x版本,Structured Streaming已经成为主流。DStream虽然还在,但官方更推荐用Structured Streaming。
| 版本 | 时间 | 重要变化 |
|---|---|---|
| Spark 0.7 | 2012 | 引入DStream |
| Spark 1.2 | 2014 | DStream稳定 |
| Spark 2.0 | 2016 | Structured Streaming诞生 |
| Spark 3.x | 2020+ | Structured Streaming成熟 |
个人建议:新项目直接用Structured Streaming。DStream除非维护老代码,否则别碰。
Spark Streaming的核心优势
为什么选Spark Streaming?我总结了几个核心优势。
1. 统一的批流一体
这是最大的卖点。你用同一套API,既能写批处理,也能写流处理。
你想想看,以前做大数据项目,批处理用MapReduce,流处理用Storm。两套系统,两套代码。维护成本高得吓人。
Spark Streaming让你用DataFrame/DataSet API。批和流只是读数据的方式不同。计算逻辑完全一样。
我在项目中就遇到过这种情况。白天跑流处理,晚上跑批处理做历史回溯。代码复用率超过80%。
2. 高吞吐、低延迟
得益于Spark的内存计算引擎。Spark Streaming的吞吐量远超Storm等老牌框架。
官方测试数据:在同等资源下,Spark Streaming的吞吐量是Storm的2-5倍。
延迟方面,微批次模式能做到秒级。Structured Streaming的连续处理模式,延迟能降到毫秒级。
关键指标:吞吐量高,延迟可控。适合大多数实时场景。
3. 强大的容错机制
流处理最怕什么?数据丢失。
Spark Streaming基于RDD的血统(lineage)机制。某个批次计算失败,能自动从上游重新计算。
再加上checkpoint机制。把状态和元数据定期保存到可靠存储(如HDFS)。即使整个应用重启,也能从断点继续。
我曾经在生产环境中遇到过节点宕机。Spark Streaming自动恢复,数据一条都没丢。嗯,这一点让我很放心。
4. 丰富的生态集成
Spark Streaming能对接各种数据源和数据目标。
数据源:Kafka、Kinesis、Flume、HDFS、Socket等。
数据目标:HDFS、数据库、Kafka、Elasticsearch等。
你想想看,Kafka + Spark Streaming + HDFS,几乎是实时数仓的标准配置。
避坑指南:我曾经在Kafka偏移量管理上栽过跟头。默认的自动提交可能导致数据重复或丢失。建议手动管理偏移量。
5. 精确一次语义
这是流处理框架的终极追求。
Spark Streaming通过事务性输出和幂等写入,实现了端到端的精确一次语义。
说白了,每条数据只被处理一次。不多不少。
对于金融、交易等场景,这一点至关重要。
小结
Spark Streaming是什么?是一个基于微批次的流处理框架。
发展历史?从DStream到Structured Streaming,越来越成熟。
核心优势?批流一体、高吞吐、强容错、生态丰富、精确一次。
我个人觉得,Spark Streaming是目前最值得投入的流处理技术之一。尤其是Structured Streaming,代表了流处理的未来方向。
下一章,我们会深入Structured Streaming的编程模型。到时候手写代码,感受一下它的魅力。