请解释 Apache Spark 中的 Structured Streaming 概念,并阐述它与传统 Spark Streaming 在编程模型、数据处理方式和性能表现上的主要差异。
考察说明
考查对 Spark 两大流处理框架的理解深度,重点在编程模型与实时性差异。
回答思路
- 【回答框架 1】Structured Streaming 是基于 Spark SQL 引擎的流式处理框架,将数据流视为无界表,每批次数据作为表的新行,使用 DataFrame API 进行声明式查询,系统自动优化执行。
- 【回答框架 2】Spark Streaming 基于 RDD,将数据流划分为微批次,以 DStream(离散化流)表示,开发需使用 map、reduceByKey 等 RDD 风格操作,延迟通常较高。
- 【回答框架 3】核心差异在于编程模型:Structured Streaming 提供高层的 DataFrame 操作,支持事件时间和窗口聚合,并保证端到端精确一次,而 Spark Streaming 提供的是底层 RDD 操作,窗口基于处理时间。
- 【回答框架 4】性能方面,Structured Streaming 受益于 Catalyst 优化器和钨丝执行引擎,吞吐量更高,延迟更低,而 Spark Streaming 的批处理模式导致更高延迟。
- 【回答框架 5】Structured Streaming 还支持持续处理模式(实验性),可实现毫秒级延迟,而 Spark Streaming 仅支持微批次。选择时需考虑延迟要求、API 偏好和生态整合,Structured Streaming 更现代化并逐渐成为首选。
- 【关键点 1】Structured Streaming 将流视为无界表,Spark Streaming 使用 DStream。
- 【关键点 2】Structured Streaming 提供精确一次语义,Spark Streaming 至少一次。
- 【关键点 3】Structured Streaming 支持事件时间与窗口聚合,Spark Streaming 仅处理时间。
- 【关键点 4】Structured Streaming 性能更高,延迟更低。
- 【关键点 5】新项目推荐使用 Structured Streaming。
- 【易错点 1】混淆事件时间与处理时间,导致窗口结果不准确。
- 【易错点 2】误认为 Spark Streaming 已废弃,实际仍维护但非首选。
- 【易错点 3】忽略 Structured Streaming 的微批次延迟,不适合毫秒级场景(除非持续处理)。