设计数据平台
需求
设计一个公司级数据平台,支持:
- 每日新增 10 亿条事件数据
- 支撑 50+ 分析师自助查询
- T+1 离线报表 + 分钟级实时看板
- 数据血缘和质量监控
架构设计
分层架构
| 层级 | 组件 | 说明 |
|---|---|---|
| 采集层 | Kafka + Debezium + 埋点 SDK | 统一数据入口 |
| 存储层 | Iceberg(湖) + ClickHouse(OLAP) | 冷热分层 |
| 计算层 | Spark(离线) + Flink(实时) + dbt(建模) | 批流一体 |
| 服务层 | Trino(联邦查询) + API Gateway | 统一查询接口 |
| 应用层 | Superset/Metabase + 自助查询 | 面向分析师 |
| 治理层 | DataHub(元数据) + Great Expectations(质量) | 数据治理 |
元数据管理
| 元数据类型 | 内容 | 工具 |
|---|---|---|
| 技术元数据 | 表结构、字段类型、分区方式 | DataHub / Apache Atlas |
| 业务元数据 | 指标定义、数据字典、负责人 | 自建指标平台 |
| 运营元数据 | 数据量、更新时间、查询频率 | Airflow + 自建监控 |
| 血缘元数据 | 上下游依赖、影响分析 | dbt Lineage / DataHub |
常见面试问题
Q1: 离线和实时数据如何统一?
答案:
采用 Lambda 或 Kappa 架构:
- Lambda:离线层(Spark + Hive)保证准确性,实时层(Flink + Kafka)保证时效性,服务层合并结果
- Kappa:全部走实时流处理(Flink),通过回溯重放 Kafka 消息修正历史数据
- 推荐方案:核心指标用 Lambda 保证准确性,非关键指标用 Kappa 简化架构
Q2: 如何支撑 50+ 分析师同时查询?
答案:
- 高频查询走 ClickHouse/Doris(预聚合物化视图)
- Ad-hoc 查询走 Trino(联邦查询,直接查数据湖)
- 设置查询配额和超时限制,防止大查询拖垮集群
- 热门 Dashboard 做缓存,减少重复计算
相关链接
- 数据仓库分层架构 - ODS/DWD/DWS/ADS
- Airflow - 调度编排
- ClickHouse - OLAP 引擎
- Apache Iceberg - 表格式