第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的编程模型。到时候手写代码,感受一下它的魅力。