实时数仓架构设计与选型(Lambda vs Kappa)
请对比实时数仓的两大架构模式——Lambda架构(批流一体)和Kappa架构(纯流式),分析各自的优缺点和适用场景。结合Flink+Iceberg/ClickHouse/Hudi等技术栈,给出当前大厂主流的实时数仓方案。
回答
专业代码师
Lambda架构:
- 批流双轨:实时层(Flink)处理秒级数据,离线层(Spark/Hive)处理全量历史数据
- 合并:实时+离线在查询层合并(如Presto/ClickHouse)
- 优点:历史数据可修正,SQL友好
- 缺点:维护两套代码、逻辑不一致风险、存储冗余
Kappa架构:
- 纯流式:所有数据通过Flink/Kafka Streams处理
- 历史回放:从Kafka重放历史数据重新计算
- 优点:单一技术栈、架构简洁
- 缺点:Kafka存储成本高、历史数据回放慢、大规模聚合性能受限
当前主流方案(混合架构):
业务数据 → Kafka → Flink(实时ETL)
├─→ ClickHouse/Doris (实时层)
└─→ Hudi/Iceberg (离线层)
└─→ Spark(补偿/修正)
大厂实践:
- 字节跳动:Flink + Hive + ClickHouse
- 美团:Flink + Doris + Hudi(Kappa+Lambda混合)
- 阿里巴巴:Flink + Hologres + MaxCompute
选型建议:
- 实时ETL要求<5秒:Lambda(批层保证数据一致性)
- 纯实时场景:Kappa
- 大多数场景:混合(实时层+湖仓层+离线补偿)