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架构」的痛点。后来业界开始探索湖仓一体,核心思路就一个:用一套存储底座,同时支持数据湖的灵活性和数据仓库的可靠性。

我画了张图,帮你理解这个演进过程:

湖仓一体架构演进 湖仓一体架构演进路线 阶段1:传统数仓 ETL → 结构化存储 → BI 阶段2:数据湖 原始数据 → 对象存储 → 探索 阶段3:湖仓一体 统一存储 + ACID + 治理 关键变化:从「两套系统」到「一套平台」,存储层统一,计算层可插拔 湖仓一体核心能力 ACID事务 Schema演进 数据血缘 统一权限

湖仓一体的代表技术,比如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 vs Kappa 架构对比 Lambda vs Kappa 架构对比 Lambda 架构 数据源(Kafka / 日志 / DB) 批处理层 流处理层 服务层(合并) Kappa 架构 数据源(Kafka / 日志 / DB) 流处理层(唯一) 服务层(直接输出) Kappa架构去掉了批处理层,所有数据统一走流处理,简化了维护成本

那到底选哪个?我个人的经验是:

  • 选Lambda:你的业务对数据准确性要求极高(比如金融交易),且批处理窗口可以接受小时级延迟
  • 选Kappa:你的数据量适中,且团队能接受「最终一致性」——说白了,就是允许短时间内的数据偏差

避坑指南:我曾经在一个IoT项目中硬上Kappa架构,结果数据量一上来,Kafka消费跟不上,实时处理变成了「准实时」。后来不得不加了一层批处理兜底,又回到了Lambda的老路。所以——别为了「新」而「新」,架构选型要看数据规模、延迟要求和团队能力。

1.4 本章小结

这一章,咱们把数据湖仓的基础概念过了一遍:

  • 数据湖 vs 数据仓库:一个重灵活性,一个重可靠性
  • 湖仓一体:用一套存储底座,同时满足两种需求
  • Lambda vs Kappa:流批一体的两种实现路径,各有优劣