题目
设计数据湖架构支持混合工作负载(批处理与实时分析)
信息
- 类型:问答
- 难度:⭐⭐
考点
数据湖架构设计, 存储格式选择, 数据分区策略, 元数据管理, 性能优化
快速回答
设计要点:
- 分层存储架构:原始层→清洗层→服务层
- 存储格式:Parquet/ORC列式存储 + Delta Lake事务支持
- 分区策略:按日期/业务键分区 + Z-Order优化
- 元数据管理:Hive Metastore或AWS Glue目录
- 计算分离:Spark批处理 + Flink实时分析
一、架构设计原理
数据湖需同时满足批处理(T+1报表)和实时分析(近实时风控)需求,核心在于:
- 分层设计:
1.Raw Zone:存储原始JSON/CSV数据
2.Cleansed Zone:Schema化Parquet数据
3.Curated Zone:聚合后的分析数据集 - ACID保障:通过Delta Lake/LakeFS实现事务控制
二、关键组件实现
1. 存储格式选择
# 批处理写入Parquet(PySpark示例)
df.write.format("parquet")\
.partitionBy("event_date")\
.mode("overwrite")\
.save("s3://lake/cleansed/events")
# 实时分析使用Delta Lake
df.write.format("delta")\
.option("mergeSchema", "true")\
.save("s3://lake/curated/user_behavior")格式对比:
| 格式 | 适用场景 | 优势 |
|---|---|---|
| Parquet | 批量分析 | 列式压缩,查询高效 |
| Delta Lake | 实时更新 | ACID事务,时间旅行 |
2. 分区与优化
- 基础分区:按日期分区(
dt=20230101) - Z-Order优化:对高频过滤字段(如
user_id,product_id)多维聚类 - 小文件合并:Delta Lake自动合并(
OPTIMIZE命令)
3. 元数据管理

(图示:Glue Catalog统一管理各层元数据)
三、最佳实践
- 性能优化:
- 批处理:使用Glue ETL动态分桶
- 实时:Kafka→Flink→Delta Lake流式写入 - 成本控制:
- S3生命周期策略(热数据→IA→Glacier)
- Athena分区投影减少扫描量
四、常见错误
- 数据沼泽:未建立数据治理规范,导致数据不可用
- 分区过度:>10k分区导致元数据膨胀
- 实时写入瓶颈:未使用
Delta Lake导致并发写冲突
五、扩展知识
- Iceberg/Hudi:替代Delta Lake的开源方案
- 数据湖仓:Delta Lake + Databricks光子引擎实现湖仓一体
- 访问控制:AWS Lake Formation细粒度权限管理