1. 数据湖仓概述:数据湖与数据仓库的区别、湖仓一体架构演进、Lambda与Kappa架构对比
各位同学,咱们今天聊聊数据湖仓。说实话,这个领域这几年变化太快了。我2016年刚接触大数据平台时,大家还在争论「到底该用数据仓库还是数据湖」。现在呢?湖仓一体已经成了主流选择。
这一章,我会从最基础的概念讲起,带你理清数据湖、数据仓库、湖仓一体、Lambda和Kappa这些核心概念。嗯,都是实战中绕不开的东西。
1.1 数据湖 vs 数据仓库:别再傻傻分不清
先问个问题:你公司现在用的是什么?是传统数仓,还是数据湖?
我见过不少团队,把HDFS上一堆Parquet文件就叫「数据湖」,结果查询慢得要命,数据质量也没人管。说白了,他们只是换了个存储,架构思维根本没变。
咱们先看一张对比表,把两者的核心差异说清楚:
| 维度 | 数据仓库 | 数据湖 |
|---|---|---|
| 数据形态 | 结构化,Schema-on-Write | 结构化/半结构化/非结构化,Schema-on-Read |
| 存储格式 | 行存/列存(如ORC、Parquet) | 原始格式(JSON、CSV、Avro、图片、日志) |
| 数据质量 | 高,ETL清洗后入库 | 低,原始数据直接存储 |
| 典型场景 | BI报表、固定维度分析 | 数据探索、机器学习、实时流处理 |
| 用户群体 | 业务分析师、数据工程师 | 数据科学家、算法工程师 |
| 成本 | 高(计算+存储绑定) | 低(廉价对象存储) |
你看,数据仓库是「先建模,再存数据」——写入时就要定义好Schema,数据质量有保障,但灵活性差。数据湖是「先存数据,用时再解析」——原始数据往里灌,想怎么用都行,但数据治理是个大坑。
核心观点:数据仓库适合「已知问题」的重复分析,数据湖适合「未知问题」的探索发现。两者不是替代关系,而是互补关系。
1.2 湖仓一体架构演进:从「两套系统」到「一套平台」
我2018年参与过一个金融项目,当时架构是这样的:
- 数据湖:存原始交易日志、埋点数据,用Spark做ETL
- 数据仓库:存清洗后的指标数据,用Impala做OLAP
- 两套集群,两套权限,两套元数据
结果呢?数据同步延迟、口径不一致、存储浪费。最头疼的是——数据血缘根本连不起来。湖里的数据怎么变成仓里的指标?没人说得清。
这就是传统「Lambda架构」的痛点。后来业界开始探索湖仓一体,核心思路就一个:用一套存储底座,同时支持数据湖的灵活性和数据仓库的可靠性。
我画了张图,帮你理解这个演进过程:
湖仓一体的代表技术,比如Apache Iceberg、Delta Lake、Apache Hudi,它们都在做同一件事:给数据湖加上「仓库级」的能力——ACID事务、Schema演进、时间旅行、数据版本管理。
我的建议:如果你正在选型,别盲目追新。先看你的核心场景:
- BI报表为主 → 优先考虑Delta Lake(Databricks生态成熟)
- 流批一体 + 数据湖探索 → 优先考虑Apache Iceberg(开放格式,兼容性好)
- CDC + 增量处理 → 优先考虑Apache Hudi(Upsert能力强)
1.3 Lambda vs Kappa:流批一体怎么选?
聊完存储,咱们聊聊计算架构。Lambda架构和Kappa架构,是流批一体领域的两个经典方案。
先看Lambda架构:
- 批处理层:全量数据,高延迟,高准确度
- 流处理层:实时数据,低延迟,低准确度
- 服务层:合并两路结果,对外提供服务
我当年在电商公司做实时大屏,用的就是Lambda。白天跑实时流,晚上跑批处理修正数据。听起来挺合理对吧?但实际维护起来,简直噩梦——
- 两套代码,两套逻辑,口径经常对不上
- 批处理和流处理的结果合并,逻辑复杂得要命
- 数据延迟一波动,服务层就乱套
后来Kappa架构出现了。它的思路很简单:既然流处理这么麻烦,那干脆只用流处理。所有数据都走实时流,需要重算时,就重新消费一遍Kafka。
我画了张对比图:
那到底选哪个?我个人的经验是:
- 选Lambda:你的业务对数据准确性要求极高(比如金融交易),且批处理窗口可以接受小时级延迟
- 选Kappa:你的数据量适中,且团队能接受「最终一致性」——说白了,就是允许短时间内的数据偏差
避坑指南:我曾经在一个IoT项目中硬上Kappa架构,结果数据量一上来,Kafka消费跟不上,实时处理变成了「准实时」。后来不得不加了一层批处理兜底,又回到了Lambda的老路。所以——别为了「新」而「新」,架构选型要看数据规模、延迟要求和团队能力。
1.4 本章小结
这一章,咱们把数据湖仓的基础概念过了一遍:
- 数据湖 vs 数据仓库:一个重灵活性,一个重可靠性
- 湖仓一体:用一套存储底座,同时满足两种需求
- Lambda vs Kappa:流批一体的两种实现路径,各有优劣