订阅更新

面试官问'你们数据架构怎么设计的'——怎么讲才能展示全局视野?

项目追问手册 第 7 题 约 8 分钟读完

本文目录
  1. 先说结论
  2. 我在出海硬件品牌的数据架构:完整讲法
  3. 架构的分层设计:每层做什么,为什么这么分
  4. 怎么讲清楚'数据流转'
  5. 面试官常问的架构追问和怎么应对
  6. 不同规模的架构怎么讲
  7. 实战踩坑
  8. 总结

先说结论

讲架构要自顶向下:先说全局,再说细节。开头一句话概括整体架构风格(Lambda/Kappa/简单批处理),然后分层讲每层的职责和技术选择,最后讲层与层之间的数据流转。

每一层都要回答三个问题:这一层用了什么技术?为什么选这个技术?数据在这一层发生了什么变化?缺任何一个,面试官都会觉得你理解得不够深。

架构要和业务关联:不要脱离业务讲架构。要说'因为业务需要T+1的日报,所以离线层选了Spark',而不是直接说'我们用了Spark'。有业务驱动的架构才是真正的架构设计,否则就是组件堆砌。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

3年以上经验的候选人,面试官一定会问数据架构。但很多人一讲架构就变成'画架构图讲组件'——从Kafka讲到Spark讲到Hive再讲到报表层,每个组件都提一嘴但每个都浅。面试官听完觉得你只是在'使用'架构,不是在'设计'架构。架构的核心不是用了什么组件,而是为什么这么分层、每层解决什么问题、各层之间的数据怎么流转。今天用我的真实项目讲一遍完整的架构叙述方法。

我在出海硬件品牌的数据架构:完整讲法

我用在某知名出海硬件品牌的架构来演示怎么给面试官讲。这是一个中等规模的数据平台,20TB数仓、100+Spark作业、覆盖设备激活/用户行为/渠道分析等业务。

// 面试时的架构讲述(约2分钟)
 
// 第1步:一句话概括
"我们的数据平台是一个标准的Lambda架构,
  离线用Databricks+Spark做批处理,实时部分用Kafka+简单的流处理。
  整体数据量20TB,基于Delta Lake做存储。"
 
// 第2步:分层讲解
"数据分为五层:
  - 数据接入层:埋点SDK → Kafka → S3原始区
  - ODS层:原始数据落地,不做任何加工,按天分区
  - DWD层:明细数据清洗,统一字段名、处理NULL、去重
  - DWS层:按主题域聚合,如设备激活日报、用户行为汇总
  - ADS层:直接给BI报表用的应用层数据"
 
// 第3步:关键技术选择
"存储统一用Delta Lake格式,因为需要ACID和MERGE INTO。
  ETL用Spark SQL,因为团队最熟悉。
  调度用Databricks自带的Workflow。
  BI层用Tableau直连DWS/ADS层。"

架构的分层设计:每层做什么,为什么这么分

层级职责技术选择设计要点
数据接入层采集原始数据,保证不丢Kafka/SDK → S3先落原始数据再处理,保证可回溯
ODS层原始数据1:1存储,不做加工Parquet/Delta Lake按天分区保留原始面貌,出问题能回溯
DWD层清洗+标准化Spark SQL做ETL统一字段命名、处理NULL和脏数据、去重
DWS层按主题域聚合Spark SQL + Delta Lake预计算常用指标,减少下游重复计算
ADS层面向应用/报表Spark SQL或直接视图直接满足BI查询需求,简单直接

面试时要强调的是为什么要分这么多层。很多人说不清楚。最简单的解释是:ODS保证原始数据不丢;DWD做一次性的清洗,避免下游重复清洗;DWS做预聚合,避免每次查询都扫明细数据。每一层都是在为下一层减少工作量。

怎么讲清楚'数据流转'

很多人讲架构只讲静态的分层,不讲动态的数据流转。但面试官最想听的其实是数据怎么从上游一步步变成报表的。

// 以设备激活报表为例讲数据流转
 
// ① 数据接入
"设备激活事件通过SDK埋点上报到Kafka,
  Kafka Consumer把数据写到S3的原始区。"
 
// ② ODS → DWD
"每天凌晨2点,Spark作业把S3原始数据加载到ODS层(按天分区),
  然后做DWD清洗:解析JSON、统一字段名、过滤测试设备、
  对同一设备的重复激活事件去重。"
 
// ③ DWD → DWS
"DWD清洗完成后,触发DWS层的聚合作业:
  按国家、渠道、设备型号三个维度聚合,
  计算日激活数、累计激活数、新增用户数等指标。"
 
// ④ DWS → ADS → 报表
"DWS的数据直接被Tableau连接,
  渠道经理每天早上9点在看板上看到昨天的激活数据。"
 
// 整个链路:事件发生 → T+1凌晨3:30报表就绪

面试官常问的架构追问和怎么应对

讲完架构后,面试官通常会追问一些关键决策和细节。这些追问是区分'用过'和'设计过'的关键。

追问一:ODS层有必要吗?为什么不直接清洗?

这是经典追问。ODS层的核心价值是'原始数据备份'和'可回溯性'。我在某出海硬件品牌就遇到过一次DWD层的清洗逻辑写错了(把某个国家的数据误过滤了),因为有ODS层,我们回溯ODS原始数据重跑了DWD就修复了。如果没有ODS层,原始数据被清洗覆盖了就没法恢复。ODS层的存储成本很低(压缩后的Parquet),但出问题时价值巨大。

追问二:DWD和DWS的边界怎么划分?

这考的是你的建模能力。我的原则是:DWD是'明细级别的干净数据'——每条记录对应一个业务事件,只做清洗不做聚合。DWS是'按主题域的聚合数据'——把明细数据按分析维度聚合好,预计算常用指标。判断标准很简单:如果一个需求可以直接从DWS查到结果就不需要扫DWD。DWS覆盖了80%以上的查询需求,剩下的特殊分析才需要回到DWD层。

追问三:你们数据延迟是多少?怎么保证报表按时出?

这考的是你对整个链路的掌控能力。'我们的核心报表SLA是每天早上9点出数。整个ETL链路的执行窗口是凌晨2点到3:30,一共90分钟。其中ODS加载20分钟,DWD清洗30分钟,DWS聚合25分钟,ADS刷新15分钟。每个环节完成后会触发下一个环节的调度,同时设置了超时告警——如果某个环节超过预期时间的1.5倍就告警。迁移到Databricks后ETL时间减少了40%,给SLA留出了更多余量。'

不同规模的架构怎么讲

不是每个人都在大公司做过复杂架构。面试时要根据你的实际经历选择合适的讲法:

公司规模典型架构怎么讲加分点
小公司/初创MySQL + Python脚本 + 简单报表讲清楚为什么这个简单架构就够了,你怎么用最少的资源解决问题务实、成本意识、不过度设计
中型公司标准数仓分层 + Spark/Hive + BI工具讲清楚分层设计和ETL链路,重点讲你在建设过程中做的优化分层思维、性能优化、数据质量
大公司Lambda/Kappa + 多引擎 + 平台化讲清楚你负责的模块在整体架构中的位置,重点讲跨团队协作全局视野、模块化设计、稳定性保障

关键是:不要虚报架构复杂度。小公司的简单架构讲好了一样加分,面试官看重的是你在当前场景下的思考和决策,不是架构本身有多宏大。

实战踩坑

我在某元宇宙社交应用从0搭建Flink+Doris实时数据平台时,犯过一个架构设计的错误。当时为了'一步到位',我把所有数据都设计成实时流处理——包括用户注册信息这种低频更新的维度数据。

结果发现,Flink处理这种低频维度数据非常浪费资源。一个用户注册后维度信息几乎不变,但Flink的流任务要一直占用资源等着更新。而且维度表的查询场景本来就是离线报表用的,根本不需要实时。

// 架构设计错误:所有数据都走实时流
 
// ❌ 错误做法:用Flink处理所有数据
// 事实数据(礼物交易、在线状态)→ Flink → Doris(合理)
// 维度数据(用户信息、房间配置)→ Flink → Doris(浪费资源)
 
// ✅ 修正后:按数据特性选择处理方式
// 高频事实数据 → Flink实时处理 → Doris
// 低频维度数据 → 定时批量同步 → Doris
// 效果:Flink任务减少40%,资源节省明显
 
// 教训:不是所有数据都需要实时处理
// 架构设计的核心是'按需分配',不是'全部上最新最强的技术'

教训:架构设计要'按需分配',不是所有数据都上实时。面试时讲这个踩坑经历反而加分,因为它展示了你从'过度设计'到'务实设计'的成长过程。

总结

讲架构用自顶向下法:一句话概括 → 分层讲解 → 数据流转。每层都要说用了什么、为什么选、数据怎么变。架构要和业务关联——'因为需要T+1报表所以选离线批处理'比'我们用了Spark'有价值得多。不要虚报架构复杂度,小架构讲好了一样拿高分。面试时能说清楚'为什么这么分层'和'数据怎么流转',就已经超过80%的候选人了。

下一篇聊一个越来越重要的面试话题:面试官问'你们怎么保证数据质量'——数据治理不是空话,要讲具体方案

你们的数据架构是什么样的?踩过什么架构设计的坑?评论区聊聊~

关注「Wood聊大数据」| 9年大数据老兵,聊技术、聊职场、聊成长

刷题进度保存在当前浏览器