拓冰建站拓冰建站
首页 / 资讯中心 / 正文

SparkStreaming 之容错机制深度剖析

摘要容错是流处理系统的底线——挂了能不能恢复、恢复后会不会丢数据或重复数据。这篇把 Spark Streaming 的容错拆成三个层面讲数据容错WAL 和 offset 自管理、计算容错RDD 血缘重算、元数据容错checkpoint再对照 Receiver 和 Direct 两种模式在四种故障场景下的恢复方式说清楚为什么 Direct 模式的容错代价最低。关键词Spark Streaming, 容错, WAL, checkpoint, RDD 血缘, offset, exactly-once一、容错分三个层面Spark Streaming 的容错不能笼统说它支持容错要拆成三个层面每个层面防的是不同东西的丢失数据容错防的是数据本身丢——拉回来的数据没处理完就挂了怎么找回。计算容错防的是计算结果丢——Executor 挂了正在算的分区怎么重算。元数据/状态容错防的是处理进度和状态丢——Driver 挂了流处理的进度、有状态算子的累计状态怎么恢复。三个层面缺一个容错就不完整。下面逐个说。二、数据容错WAL 和 offset 自管理数据容错是两种模式分歧最大的地方。Receiver 模式用 WAL预写日志Receiver 拉到的数据先写进 WAL 落盘再交给计算。Receiver 挂了从 WAL 恢复还没处理的数据。代价很明显每拉一批数据就多一次写盘吞吐打折扣而且 WAL 恢复是 at-least-once——挂了之后已经处理完但没来得及确认的数据恢复时可能重复处理。Direct 模式用 offset 自管理上一篇详细讲过offset 存 checkpointJob 成功才提交。处理失败就不提交 offset重算时从原位置重拉不丢也不重。没有 WAL也就没有写盘开销和重复消费问题。三、计算容错RDD 血缘重算这一层 Spark Streaming 和普通 Spark 批处理完全一致——每个 batch 本质就是一个批处理作业RDD 自带 lineage血缘记录了它从哪些父 RDD 怎么算出来的。Executor 挂了丢失的分区根据血缘重算即可不需要额外配置。这是 Spark 最成熟的容错能力直接继承过来。四、元数据容错checkpoint这一层防的是 Driver 挂掉。checkpoint 把四类东西持久化到 HDFSDStream 的 lineage计算逻辑配置信息SparkConf、batchInterval有状态算子的状态updateStateByKey 的累计值未处理的 offset/block 元数据。Driver 挂了配合 YARN 的--supervise自动重启再从 checkpoint 恢复。这块在 Driver HA 那篇讲透了这里不展开。关键点只有一个有状态算子必须开 checkpoint。状态只存在 Driver 内存里不开 checkpointDriver 一挂状态全丢恢复也只能从零开始。五、四种故障场景的恢复对照四种故障看各自怎么恢复Executor 挂RDD 血缘重算批处理天然支持。Receiver 挂仅 Receiver 模式从 WAL 恢复数据可能重复消费。处理失败不提交 offsetDirect重算不丢不重。Driver 挂checkpoint YARN supervise 恢复。注意第 2 种是 Receiver 模式独有的故障点。Direct 模式没有 Receiver 进程直接少了一整类故障也少掉了 WAL 这套为它兜底的机制。六、Receiver vs Direct 容错对比维度Receiver 模式Direct 模式数据容错WAL 写盘offset 自管理故障点Receiver Executor DriverExecutor Driver重复消费可能at-least-once不重exactly-once容错代价高WAL 写盘 资源低无 WAL结论一句话Direct 模式的三层容错代价都比 Receiver 模式低——没有 WAL 的写盘开销、少一个 Receiver 故障点、offset 自管理拿到 exactly-once。这正是 Direct 模式成为生产标准的核心原因容错机制越简单越不容易出错。七、总结容错分三层数据容错WAL/offset、计算容错RDD 血缘、元数据容错checkpoint缺一不可。数据容错是两种模式分歧最大的地方Receiver 用 WAL有写盘开销、可能重复Direct 用 offset 自管理无 WAL、exactly-once。计算容错继承 RDD 血缘Executor 挂了重算即可无需额外配置。元数据容错靠 checkpoint有状态算子必须开。Direct 模式容错代价最低是它成为生产标准的根本原因之一。作者大数据技术实践者博客blog.starzy.cnGitHubstarzy1990.github.io专注 AI Agent · LangGraph · RAG · 大数据架构 · 数据工程实践
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门