系统架构设计师备考站2027 上半年 · 通勤版 ⌕搜索
本页目录 · 5 节
  1. 一、知识框架
  2. 二、必背要点
  3. 19.1 传统数据处理系统存在的问题
  4. 19.2 大数据处理系统架构分析
  5. 19.3 Lambda 架构
  6. 19.4 Kappa 架构
  7. 19.5 Lambda 与 Kappa 的对比和设计选择
  8. 19.6 案例分析
  9. 三、易混淆概念对比
  10. 四、常见考法与出题角度
  11. 五、速记与自测

第 19 章 大数据架构设计理论与实践

对应大纲:科目 1-18 大数据架构设计理论与实践|教材 P676–P701|优先级 ★★★★|综合知识估分 2~4 分
读法:本章只有一条主线——批处理与流处理如何拼成一个系统。先把 Lambda 三层背成肌肉记忆,再用五维表把 Kappa 压进去,最后记 6 条选型判据。选择题只考「谁负责什么」,案例题只考「选哪个、为什么」,论文只考「你怎么落地」。


一、知识框架

大数据架构设计理论与实践
├─ 19.1 传统数据处理系统存在的问题
│   ├─ 扩展:纵向扩展有天花板
│   ├─ 数据:只擅长结构化,Schema-on-write
│   ├─ 时效:只能批处理,T+1
│   └─ 成本与容错:高端设备、扩容即停机
├─ 19.2 大数据处理系统架构分析
│   ├─ 5V:Volume|Variety|Velocity|Veracity|Value
│   ├─ 面临挑战:规模|类型|时效|质量|成本
│   └─ 架构特征:分布式、水平扩展、数据不可变、批流并存
├─ 19.3 Lambda 架构
│   ├─ 三层:Batch Layer|Speed Layer|Serving Layer
│   ├─ 两条基石:数据不可变 + 可重算
│   ├─ 实现:HDFS/Spark + Kafka/Flink + HBase/Redis
│   └─ 优缺点与横向对比
├─ 19.4 Kappa 架构
│   ├─ 一条链路:全部数据进 Kafka,只用流处理
│   ├─ 一个动作:重放(replay)代替重算
│   ├─ 实现与常见变形(流批一体、Kappa+)
│   └─ 优缺点
├─ 19.5 Lambda 与 Kappa 的对比和设计选择
│   ├─ 五维对比:实时性|复杂度|运维成本|一致性|场景
│   └─ 六条选型判据
└─ 19.6 案例分析
    ├─ 案例一:零售全渠道数据平台(选 Lambda)
    ├─ 案例二:银行实时反欺诈(选 Kappa)
    └─ 案例答题四步与论文用法

二、必背要点

19.1 传统数据处理系统存在的问题

传统数据仓库的典型链路:业务库 → ETL → ODS → 数据仓库 → 数据集市 → BI 报表。它建立在关系数据库与小型机之上,设计前提是「数据量可控、结构固定、按天出结果」。数据规模一大,这些前提逐条失效。

问题表现根因
不能水平扩展容量到顶只能换更强的主机,成本指数上升架构为纵向扩展(scale up)设计,共享存储与单库
只能批处理报表 T+1,大屏要等日终跑批ETL 按周期调度,无流式通道
Schema-on-write新增字段要改表、停服、重跑历史写时模式,模式先于数据确定
数据类型受限日志、图片、埋点要先清洗成结构化才能入库关系模型只支持结构化数据
容错与可用性弱单机故障即整体不可用,扩容需停机集中式部署,无副本与分片
成本高高端存储与商业数据库授权费高依赖垂直整合的商业软硬件

一句话总结:传统系统是「先定模式、纵向堆硬件、按天出结果」;大数据系统要「先存原始数据、横向加机器、秒级出结果」。

19.2 大数据处理系统架构分析

5V 特征(4V 为经典四要素,5V 增加真实性)

特征含义对架构的要求
Volume 体量大TB~PB 级,单机存不下分布式存储、分片、多副本
Variety 多样结构化、半结构化、非结构化并存Schemaless、多模存储、统一元数据
Velocity 速度快流式数据持续到达,要求低延迟流处理、消息队列、增量计算
Veracity 真实性数据有噪声、缺失、重复数据质量校验、去重、血缘追踪
Value 价值密度低海量数据中只有少量有用分层加工、按需计算、列式存储

四类挑战:规模挑战(存储与计算如何扩展)、类型挑战(如何容纳多模数据)、时效挑战(批与流如何共存)、成本与质量挑战(如何在可接受成本下保证可信)。

大数据系统架构的六个特征

特征含义落地手段
分布式存储与计算数据与计算都分散在多节点HDFS、对象存储、MapReduce/Spark
水平扩展加节点即扩容,近线性提升无共享架构、分片、弹性调度
数据不可变原始数据只追加、不修改追加写日志、对象存储、版本号
读时模式先存原始数据,用时再解释结构Schema-on-read、数据湖
批流并存离线全量与实时增量两条通路Lambda / Kappa / 流批一体
移动计算而非移动数据任务调度到数据所在节点数据本地性、就近计算

技术栈分层(背这一张就够)

层次职责代表技术
数据采集从业务库、日志、埋点、IoT 接入Flume、Sqoop、Canal、Kafka
数据存储原始数据与明细数据持久化HDFS、对象存储、HBase、Kudu
数据计算批处理、流处理、交互查询MapReduce、Spark、Flink、Presto
资源调度分配 CPU、内存、容器YARN、Kubernetes
数据服务对外提供低延迟查询Redis、ClickHouse、Elasticsearch、HBase
数据治理元数据、血缘、质量、权限Atlas、DataHub、质量规则引擎

19.3 Lambda 架构

基本理解

Lambda 架构由 Nathan Marz 提出,出发点是一个函数式观点:

查询结果 = 对「全部历史数据」应用「某个函数」

只要原始数据永不修改(只追加),那么任何时候都能用新函数把历史重算一遍,得到正确结果。这一条「数据不可变 + 可重算」是 Lambda 的全部地基,也是它容错能力的来源:程序有 bug 不可怕,改完重算即可。

三层结构

数据源 ──► Batch Layer(HDFS 主数据集 + Spark/MapReduce)
       │        └─ 周期性全量重算 ──► Batch View(批视图)
       └──► Speed Layer(Kafka + Flink/Storm)
                └─ 只算增量 ──► Realtime View(实时视图)
                                      │
                        Serving Layer ◄┘
                   (合并批视图 + 实时视图,对外查询)
层职责输入 → 输出特性
Batch Layer 批处理层保存主数据集,周期性全量重算全部历史数据 → 批视图高吞吐、高准确、小时/天级延迟
Speed Layer 加速层只处理上次批处理之后的增量实时数据流 → 实时视图低延迟、近似结果、可能重复
Serving Layer 服务层合并两个视图,响应查询两视图 → 查询结果随机读、低延迟

查询合成公式

最终结果 = 批视图(截至上次批处理) + 实时视图(此后的增量)

批视图是「最终正确」的,实时视图是「临时补齐」的。当下一轮批处理完成,实时视图对应区间被批视图覆盖,实时视图即可丢弃重建——这就是 Lambda 的自我修正机制。

实现要点

环节常见选型关键设计
主数据集存储HDFS、S3/OSS只追加、按分区组织、保留原始格式
批计算MapReduce、Spark、Hive全量重算、幂等覆盖写
实时采集Kafka、Flume分区并行、削峰缓冲
流计算Storm、Spark Streaming、Flink增量聚合、幂等写、去重
服务层HBase、Cassandra、Redis、ClickHouse按查询维度建表、批量导入

优点

  • 准确性有兜底:批层全量重算可修正流层近似与错误,结果最终正确。
  • 容错强:数据不可变,出错重跑即可,不需要复杂的事务回滚。
  • 实时与离线兼得:既满足 T+1 的精确报表,也满足秒级的大屏与告警。
  • 技术成熟:每一层都有大量成熟组件,团队易招聘、易运维。

缺点

  • 两套代码:同一业务口径要在批、流两个引擎各写一遍,逻辑漂移导致「大屏和报表对不上」。
  • 运维复杂:HDFS、Kafka、两套计算引擎、服务层数据库,组件多、链路长。
  • 准确性有时延:流层结果在被批层覆盖前只是近似值。
  • 资源开销大:周期全量重算消耗大量算力与存储。

19.4 Kappa 架构

基本理解

Kappa 架构由 Jay Kreps(Kafka 作者之一)提出,核心质疑是:既然流处理引擎可以处理无界数据,为什么还要维护一套批处理? 他的答案是——不要批层,只保留一条流处理链路;需要重算时,不重新跑批任务,而是把数据重放一遍。

一条链路

数据源 ──► Kafka(唯一数据源;多分区、多副本、长期保留)
                │
                ├─► 流处理作业(Flink,一套代码)
                │        └─► Serving(Redis/ClickHouse/HBase)
                │
                └─► 需要重算:重置 offset 从头重放
                         └─► 新结果表 ──► 校验 ──► 切换

Kafka 在 Kappa 中的四个作用(必背)

机制作用考点
分区 Partition并行度单位,决定消费吞吐顺序只保证分区内,不保证全局有序
副本 Replica多副本冗余,leader/follower + ISR副本数决定容错,不是性能
位点 Offset记录每个消费组消费到哪可提交、可重置,是重放的开关
长期保留 Retention原始日志保留数天到永久保留期决定「能回溯多久」

重放(Replay)

改完逻辑后:停作业 → 记录当前 offset → 重置到起点(或指定时间点)→ 用新逻辑重跑 → 结果写入新表/新版本 → 与旧结果比对无误 → 切换读流量。要点是旁路重算、验证后切换,不能直接覆盖线上结果。

优点

  • 一套代码:批流统一,口径天然一致,不存在「报表与大屏对不上」。
  • 架构简单:只有 Kafka + 流引擎 + 服务层,组件少、运维成本低。
  • 实时性最好:全链路流式,端到端秒级。
  • 可重放:靠 Kafka 保留期实现「重算」,逻辑变更成本低。

缺点

  • 强依赖 Kafka 保留期:要能重放历史,就得长期保留原始数据,存储成本高。
  • 重放代价大:PB 级历史重放耗时可能超过业务可接受窗口。
  • 复杂分析能力弱:大规模多表 join、全量排序、机器学习特征工程仍不如批处理。
  • 对流引擎要求高:状态管理、精确一次、反压处理都要靠引擎能力兜底。

常见变形

变形做法适用
Kappa+ / 混合架构热数据留 Kafka,冷数据归档对象存储,重放时回灌历史长、又要控制成本
流批一体Flink/Spark 一套 API,批模式跑历史、流模式跑增量希望统一代码又保留批能力
分层 KappaODS 用 Kafka,DWD 流处理,DWS 落 OLAP 供即席查询实时数仓典型形态
Lambda 简化版批层只做归档与冷备,实时链路为主以实时为主、离线仅合规留存

19.5 Lambda 与 Kappa 的对比和设计选择

五维对比(必背表)

维度LambdaKappa
实时性批层 T+1,实时靠加速层补齐,端到端秒级但结果近似全链路流式,秒级且口径唯一
复杂度高:两套引擎、两套代码、两套口径低:一条链路、一套代码
运维成本高:组件多、链路长、对账难低:组件少,但强依赖 Kafka 稳定性
准确性/一致性批层最终准确,流层近似,需合并去重一套逻辑天然一致,准确性取决于流引擎与重放
适用场景海量历史 + 复杂离线分析 + 实时看板并存实时为主、逻辑稳定、数据可长期保留

六条选型判据(按顺序问自己)

  1. 要不要大规模历史全量重算? 要,且数据到 PB 级、重放不现实 → Lambda。
  2. 实时性要求是秒级还是分钟/小时级? 秒级且是主诉求 → Kappa 优先。
  3. 业务逻辑变更后能否承受全量重放? 能(数据量可控、保留期够)→ Kappa;不能 → Lambda。
  4. 分析是否以复杂多表关联、全量聚合、特征工程为主? 是 → Lambda 的批层更合适。
  5. 团队有几个人维护大数据平台? 1~3 人 → Kappa;有专职平台团队 → Lambda。
  6. 是否有合规要求长期留存原始数据、可回溯审计? 有 → 两者都要做不可变存储,Kappa 需把归档层补齐。

一句话结论:Lambda 用复杂度换准确性与分析能力,Kappa 用存储与重放成本换架构简洁与实时一致性。 新项目若无沉重历史包袱,优先 Kappa 或流批一体;已有成熟离线数仓、又要加实时能力的,优先 Lambda。

19.6 案例分析

案例一:某零售集团全渠道数据平台(选 Lambda)

项内容
背景线上商城 + 3000 家门店,日均订单 600 万,埋点日志 20 亿条/日,总数据量 3 PB
需求经营大屏秒级更新;财务与供应链 T+1 精确报表;支持历史任意时段回溯重算
选型Lambda:历史量大、分析复杂、必须能全量重算
批层HDFS 存原始日志与订单快照,Spark 每日全量重算宽表,写 Hive/ClickHouse
加速层Kafka 承接埋点与订单变更,Flink 做 5 分钟窗口聚合,写 Redis
服务层大屏读 ClickHouse 批视图并与 Redis 实时视图合并;报表直读 ClickHouse
效果大屏延迟 3 秒,报表准确率 100%,故障后可重算恢复

案例二:某银行实时反欺诈(选 Kappa)

项内容
背景日均 300 万笔交易,要求 200 毫秒内完成风险判定,规则每月迭代
需求纯实时、规则频繁变更、需回放近 3 个月交易验证新规则
选型Kappa:无离线报表诉求,规则变更靠重放验证
链路交易 → Kafka(保留 180 天)→ Flink 有状态计算 → Redis 特征 + 决策
重放新规则上线前,重置 offset 回放历史,影子表对比拦截率与误杀率
效果判定延迟 80 毫秒,规则上线周期由 2 周缩短到 2 天

案例答题四步

  1. 定性:先判断题目要批流并存(Lambda)还是单一实时链路(Kappa),一句话给结论。
  2. 画层:按「采集 → 存储 → 计算 → 服务」写出每层组件与职责,Lambda 必须写清三层。
  3. 说理:用五维表中的 2~3 维给判据,必须扣住题目的数据量、延迟、团队规模。
  4. 补短板:主动写一条缺点与应对(如「Kappa 历史重放成本高,我们将冷数据归档对象存储」)。

论文可用句式

「平台日均接入埋点 20 亿条,历史数据 3 PB。若采用纯流式架构,一次全量重放需 40 小时,无法满足财务 T+1 出表要求,因此我们选择 Lambda 架构:批处理层用 Spark 每日全量重算保证准确性,加速层用 Flink 计算 5 分钟增量,服务层合并两视图对外提供查询,最终大屏延迟控制在 3 秒、报表准确率达到 100%。」


三、易混淆概念对比

AB关键区别
LambdaKappaLambda 批 + 流双链路;Kappa 只保留流处理单链路
批处理层加速层批层全量重算、结果精确、延迟高;加速层只算增量、结果近似、延迟低
重算 recompute重放 replay重算在批层重跑全量作业;重放在流层重置 offset 重读日志
数据不可变数据不更新不可变是只追加、旧版本仍可读;不更新只是不改,未必留历史
Schema-on-writeSchema-on-read写时模式先定结构再入库;读时模式先存原始数据、查询时解释
数据仓库数据湖数仓存加工后的结构化数据;数据湖存原始多模数据
数据湖湖仓一体湖仓一体在湖上补事务、元数据与 SQL 能力,兼顾两者
离线数仓实时数仓离线按周期跑批;实时以流处理持续更新
分区 Partition副本 Replica分区决定并行与顺序范围;副本决定容错
OffsetCheckpointoffset 是消费位点,用于重放;checkpoint 是作业状态快照,用于故障恢复
至少一次精确一次至少一次可能重复需幂等;精确一次靠事务或去重实现
批处理流处理批处理面向有界全量数据;流处理面向无界持续数据

四、常见考法与出题角度

题型出题角度典型问法答题要点
单选层次职责「Lambda 中负责实时增量计算的是」Speed Layer 加速层
单选唯一数据源「Kappa 架构的唯一数据源是」Kafka
单选传统系统缺陷「传统数据仓库难以水平扩展的根本原因」纵向扩展架构、共享存储单库
单选不可变意义「数据不可变带来的主要好处」可重算、可回溯、容错简单
单选Lambda 缺点「Lambda 架构最主要的缺点」两套代码两套口径,易不一致
单选Kafka 顺序「Kafka 能保证哪种顺序」单分区内有序,全局无序
单选重放机制「Kappa 中实现重算依靠」重置 offset 重放日志
简答架构对比「Lambda 与 Kappa 有何不同」从链路数、代码套数、重算方式、适用场景作答
案例题角度架构选型给业务场景问「选 Lambda 还是 Kappa,说明理由」先结论,再按数据量/延迟/分析复杂度/团队给 3 条判据
案例题角度补全架构给出残缺架构图要求补层与组件按采集-存储-计算-服务四层补齐,写清每层职责
论文可用角度正文举例「论文写大数据平台怎么用本章」写清数据量、选型理由、三层落地、量化效果与一条不足

五、速记与自测

速记

  • 大数据 5V:量、类、速、真、值
  • 传统四病:扩不动、只能批、写定模、类型窄
  • 架构六特征:分布、横扩、不变、读模、批流、算移
  • Lambda 三层:批、速、服(Batch、Speed、Serving)
  • Lambda 两基石:不可变、可重算
  • Kappa 三件套:Kafka 唯一源、流处理一套码、offset 重放
  • Kafka 四机制:分区、副本、位点、保留
  • 选型口诀:历史重、分析杂 → Lambda;实时主、逻辑稳 → Kappa

自测

  1. Lambda 架构的三层分别叫什么?各层的输入与输出是什么?
  2. 为什么说「数据不可变」是 Lambda 容错能力的基础?
  3. Kappa 架构如何实现「重算」?它最大的成本在哪里?
  4. 某系统日均 500 万笔交易、要求 200 毫秒风控、规则每月迭代、无离线报表需求,应选哪种架构?

答案:1. 批处理层(全部历史→批视图)、加速层(增量数据→实时视图)、服务层(两视图→查询结果);2. 原始数据只追加不修改,任何时刻都能用新逻辑重跑全量,出错只需重算而不需回滚;3. 重置 Kafka 消费 offset 从头重放日志;最大成本是长期保留原始数据的存储与重放耗时;4. Kappa,纯实时、逻辑常变、可靠重放验证,无离线分析诉求。