spark streaming和Structured Streaming区别

🔑 Spark Streaming vs Structured Streaming 对比表

对比维度Spark StreamingStructured Streaming
编程模型 基于 RDD 和 DStream(离散流,本质是一系列小批次 RDD) 基于 Dataset/DataFrame(统一的批处理 + 流处理 API)
执行引擎 Micro-Batch(固定时间间隔生成 RDD) 默认 Micro-Batch,也支持 Continuous Processing(低延迟亚秒级)
容错机制 依赖 RDD 的 lineage 机制,可能需要重新计算历史数据 使用 checkpoint + WAL(Write Ahead Log),结合 Source Offset 管理,保证端到端 exactly-once
延迟 秒级(由 batchInterval 决定,通常 >500ms) 毫秒~秒级(micro-batch 可设小批次;continuous 模式可达 <10ms)
窗口操作 基于时间间隔和滑动窗口,API 较原始 基于事件时间 + 水印(支持乱序数据,类似 SQL 窗口函数)
数据源支持 Kafka、Socket、HDFS 等(部分需外部库) 内置支持 Kafka、File、Socket、Rate Source、Delta 等,扩展性更强
偏移量管理 用户可手动提交 offset(例如 Kafka direct stream) Spark 自动管理 offset,保存在 checkpoint(不能手动提交)
语义保证 主要是 at-least-once(exactly-once 较复杂) 开箱即用 exactly-once(结合 sink 语义,如 Kafka、文件、Hive)
易用性 API 较底层,需写很多业务逻辑 类 SQL API,支持 Spark SQL、DataFrame DSL,简单直观
状态管理 updateStateByKey / mapWithState(API 原始,状态不易维护) Structured Streaming 的 stateful operations(withWatermark + groupByKey + mapGroupsWithState),更灵活
生态方向 已经停止活跃开发,处于维护模式 未来主推(Spark 3.x 重点发展 Structured Streaming)

🔎 总结

  • Spark Streaming(DStream)

    • 早期产品,基于 RDD,偏底层,适合熟悉 Spark Core 的人。

    • 延迟一般在秒级,缺乏对乱序事件、精确一次语义的天然支持。

  • Structured Streaming

    • 新一代 API,基于 DataFrame/Dataset,统一批处理与流处理。

    • 支持 SQL,易于开发,功能更强(事件时间、水印、exactly-once)。

    • 未来的发展方向,社区主要投入在这里。


👉 一句话总结:
Spark Streaming 更像是「批处理的循环调用」;Structured Streaming 更像是「持续运行的增量 SQL 引擎」。

posted @ 2025-09-04 01:08  Boblim  阅读(15)  评论(0)    收藏  举报