Spark Streaming 通过将实时数据分解为小的、可管理的批次,并使用 Spark 的核心引擎进行并行计算来处理实时数据。它不是单独处理每条记录,而是使用 **离散化流 (DStream)** 抽象将传入数据分组到 **微批次** 中(例如,每 1-10 秒)。 DStream 是一系列弹性分布式数据集 (RDD),其中每个 RDD 表示在特定时间间隔内收集的数据块。例如,如果您设置 2 秒的批处理间隔,Spark Streaming 将每 2 秒创建一个 RDD,其中包含在该窗口中接收的所有数据。这种方法平衡了延迟和吞吐量,从而实现近乎实时的处理,而不会使系统不堪重负。
一旦数据被分成批次,Spark 就会在集群中并行应用转换(例如,map
、filter
、reduceByKey
)和操作(例如,将结果保存到数据库)。例如,如果您正在统计来自 Twitter 流的标签,则每个批次可能会过滤推文、提取标签并聚合每个标签的计数。 Spark Streaming 还支持有状态操作,如 updateStateByKey
,它会跨多个批次维护聚合结果(例如,跟踪每小时趋势)。容错是通过 RDD 血统实现的:如果节点发生故障,则使用原始数据源或检查点重新计算丢失的数据分区。
Spark Streaming 与 Kafka、Flume 或 TCP 套接字等数据源集成,并将结果输出到数据库、仪表板或文件系统。例如,您可以从 Kafka 提取传感器数据,计算 5 分钟窗口的滚动平均值,并将结果存储在 Cassandra 中。开发人员配置 **StreamingContext** 来定义批处理间隔和作业调度。虽然像 Structured Streaming 这样的较新 API 提供了改进的语义,但经典的 Spark Streaming 仍然因其简单性和与现有 Spark 代码的兼容性而被广泛使用。 性能调优涉及调整批处理间隔、并行性和内存分配,以平衡延迟和资源使用。