数据分层与模型设计(ODS/DWD/DWS/ADS)
核心分层矩阵
| 分层 | 职责定位 | 核心产出 | 常见技术选型 |
|---|---|---|---|
| ODS | 源数据实时接入,保留原始全量/增量 | binlog/消息流,去重后落地 | Kafka Topic → HDFS |
| DWD | 数据清洗、脱敏、维度退化,生成标准明细 | 事实表 + 维表关联 | Flink + Hudi/Iceberg |
| DWS | 轻度聚合,主题宽表,支撑多维OLAP | 按分钟/小时预聚合 | Doris/ClickHouse |
| ADS | 业务定制化指标,面向应用/报表 | 个性化宽表/大宽表 | Redis/ES/MySQL |
面试问答卡片
🎯 面试问题:请描述实时数仓ODS到DWD的常见处理逻辑,并说明如何保证数据一致性?
面试官考察点: 对数据清洗、去重、维表关联、迟到数据处理的能力,以及对exactly-once语义的理解。
回答框架: 分层职责→核心操作(去重/类型转换/空值处理/维表补全)→一致性方案(Flink checkpoint + 幂等写入Hudi/Iceberg)→举例。
简短示例回答: ODS保留原始binlog,DWD用Flink读取后先去重(主键+事件时间),再补齐维度字段避免后续join。借助Flink checkpoint保证exactly-once,写入Hudi时使用bucket索引防重复。
可能追问: 维表变更如何处理(实时维表缓存+CDC)、迟到数据如何判定与补偿?
避坑提醒: 不要只说“用Flink state”,要说明具体去重策略(比如去重窗口、主键去重)和维表关联方式(Broadcast cache vs Async IO)。
🎯 面试问题:DWS层宽表设计有哪些原则?如何平衡查询性能与存储成本?
面试官考察点: 对轻度聚合、预计算粒度、列裁剪、冷热分离的理解,以及能否根据业务场景灵活选择。
回答框架: 设计目标(减少join、加速查询)→聚合粒度(分钟/小时/天)→存储策略(分区+TTL+压缩)→动态调整(基于查询频率降级)。
简短示例回答: DWS按分钟粒度预聚合核心指标,维度退化到宽表,使用列式存储(Parquet/Snappy压缩)减少IO。对于历史监控冷数据,再聚合到小时级表,用TTL删除30天前明细。
可能追问: 如果业务突然需要更细粒度(10秒级)查询,如何快速调整?
避坑提醒: 避免过度宽表导致数据膨胀,回答时强调“按主题拆解”(如流量宽表、交易宽表分开),而非全维度一张大表。
🎯 面试问题:ADS层定制报表如何应对查询延迟和并发压力?
面试官考察点: 对OLAP引擎(Doris/ClickHouse)写入与查询优化、缓存策略、预聚合下推的实战经验。
回答框架: 引擎选型理由→预聚合(物化视图/预计算)→查询优化(分桶键/排序键/过滤条件下推)→读写分离(T+1离线+实时双链路)。
简短示例回答: 使用Doris作为ADS引擎,采用Key-Value模型,按时间+业务ID分桶。对高频指标创建物化视图实现分钟级预聚合,查询时通过SQL hint强制路由到副本。
可能追问: 如果同一张ADS表既支持实时看板又支持历史报表,如何设计?
避坑提醒: 不要单独依赖查询缓存,面试官希望听到“分层缓存”(Flink结果推送Redis→Nginx,Doris只做回源查询)。
项目案例:实时交易风控仓
📌 项目名称:实时交易风控数仓(Batch + Stream 混合分层)
业务背景: 金融平台需要对每笔交易在秒级完成风控规则计算,同时支持分析师对最近7天交易行为的明细分析。
规模指标: 日均交易千万笔,峰值TPS 5万+;数据延迟要求<3秒;近7天明细数据约50TB。
技术栈: Flink 1.15 + Kafka 3.0 + Hudi 0.12 + Doris 2.0 + Redis Cluster
核心难点: ① ODS层海量binlog入湖后,去重与回溯效率低;② DWD层维表变更频率高(用户标签每天更新);③ DWS层聚合粒度需要同时支持秒级规则和小时级报表。
面试高频追问:
- 如何保证ODS到DWD的exactly-once?——使用Hudi的写时复制 + Flink 幂等sink,主键采用(交易ID+事件时间)。
- 维表变更如何实时生效?——搭建Flink CDC监听维表MySQL,将变更流广播到Join算子状态。
- DWS层秒级与小时级如何共存?——秒级聚合使用Flink ProcessFunction状态计算,管道输出到Redis;小时级聚合作业独立运行,写入Doris。
可迁移回答话术: “我们遇到的最大挑战是维表变更导致的回撤计算问题,最终采用CDC广播+Flink 多流关联的模式,将Join延迟控制在200ms以内。这个思路可以推广到任何需要实时补全维度的场景。”