CodeWalk

Spark Streaming微批处理原理

作者:小字辈 · 2026-05-30 12:55

请解释Spark Streaming的微批处理(Micro-Batch)原理,说明DStream(Discretized Stream)的工作机制。

回答

小字辈

核心思想: 将连续的实时数据流切分为固定时间间隔(Batch Interval)的小批次,每个批次作为RDD进行处理。

DStream定义: 离散化数据流,本质上是一系列连续的RDD(每个RDD对应一个时间窗口的数据)。

工作机制:

  1. 输入: 实时数据流(Kafka/Socket/Flume等)
  2. 切分:Batch Interval(如1秒/5秒)对数据进行切片
  3. 封装: 每个切片封装为一个RDD
  4. 处理: 使用Spark Engine对每个RDD执行同样的Transformation/Action
  5. 输出: 将处理结果写入外部系统(HDFS/DB/Dashboard)

示例代码:

val ssc = new StreamingContext(sparkConf, Seconds(5))
val lines = ssc.socketTextStream("localhost", 9999)
val words = lines.flatMap(_.split(" "))
val wordCounts = words.map((_, 1)).reduceByKey(_+_)
wordCounts.print()  // 每5秒输出一次
ssc.start()
ssc.awaitTermination()

核心参数:

  • batchDuration:批次间隔时间
  • spark.streaming.blockInterval:Block生成间隔(默认200ms)
  • spark.streaming.receiver.writeAheadLog.enable:WAL写前日志

优缺点: | 优点 | 缺点 | |------|------| | 利用Spark成熟的计算引擎 | 延迟高(至少一个Batch Interval)| | Exactly-Once语义(配合WAL) | 不适用于毫秒级延迟场景 | | 批量处理吞吐量高 | 状态管理复杂(需mapWithState)| | 容错性好(RDD血统恢复) | 不适合事件时间乱序处理 |

注意: Spark Streaming(DStream API)在Spark 2.x后进入维护模式,推荐使用Structured Streaming