1. 数据湖仓时代:为什么需要 Iceberg 和 Delta Lake?

说实话,过去五年我一直在跟数据架构打交道。从早期的 Hadoop Hive,到后来的 Spark SQL,再到现在的湖仓一体,这条路我走得挺深的。很多人问我:为什么突然冒出个 Iceberg 和 Delta Lake?它们到底解决了什么问题?

嗯,要回答这个问题,得先聊聊传统数据架构的痛点。

1.1 传统数据仓库的困境

数据仓库这个概念不新。早年间我们用 Teradata、Oracle、Greenplum,后来用 Snowflake、Redshift。它们很成熟,但有个硬伤——数据一旦进了仓库,就很难再跟外部系统高效交互。

举个例子。我在 2018 年做过一个金融项目,数据从 Kafka 流进来,经过 Spark 清洗,最后落到 Hive 表里。但 Hive 不支持 ACID 事务,数据写一半任务挂了,表就坏了。修复起来特别痛苦,得手动删分区、重跑任务。你想想看,生产环境里这种事发生一次就够呛。

传统数仓的典型问题包括:

  • 不支持事务:并发写入容易产生脏数据
  • 文件管理混乱:小文件堆积,查询性能越来越差
  • Schema 变更困难:加个字段要全表重写
  • 数据回滚成本高:没有快照机制,出错了只能重跑

核心矛盾:数据仓库需要强一致性,但底层存储(HDFS/S3)天生不支持事务。这个鸿沟,就是 Iceberg 和 Delta Lake 要填的。

1.2 数据湖的兴起与阵痛

数据湖的概念大概在 2015 年左右火起来。核心思想很简单:把所有数据(结构化、半结构化、非结构化)都扔到廉价存储上,用的时候再处理。

这个想法本身没错。我见过很多团队把几十 TB 的日志、点击流、IoT 数据直接往 S3 上怼。但问题很快就来了——数据湖变成了数据沼泽。

为什么?因为没有统一的元数据管理。你往 Hive 里写数据,Spark 读的时候可能看到的是半成品。你删了一批文件,但元数据没更新,查询就报错。更麻烦的是,两个任务同时写同一个表,互相覆盖,数据对不上。

我记得有一次线上事故:数据工程师跑了一个批处理任务,覆盖了前一天的正确数据。因为没有版本管理,恢复花了整整两天。从那以后,我就在想——数据湖能不能像数据库一样,支持事务、快照、回滚?

1.3 湖仓一体的核心诉求

湖仓一体(Lakehouse)这个概念,说白了就是把数据仓库的 ACID 能力搬到数据湖上。它要满足几个关键需求:

  1. 事务支持:并发读写不冲突,要么全成功要么全失败
  2. Schema 演化:加字段、删字段不影响历史数据
  3. 时间旅行:能查询任意时间点的数据快照
  4. 高性能查询:支持文件剪枝、分区裁剪、统计信息优化
  5. 开放格式:不绑定特定计算引擎,Spark、Flink、Trino 都能用

这些需求,传统 Hive 做不到,Hudi 早期版本也做得不够好。而 Iceberg 和 Delta Lake 就是在这个背景下诞生的。

我的建议:选型之前,先搞清楚你的核心场景。如果只是做离线批处理,Delta Lake 的简单易用可能更合适。如果追求开放性和多引擎兼容,Iceberg 是更好的选择。后面几章我会详细对比。

1.4 Iceberg 与 Delta Lake 的定位

这两个项目虽然目标相似,但出身和设计哲学完全不同。

维度 Iceberg Delta Lake
发起方 Netflix(后捐给 Apache) Databricks
核心设计 表格式规范 + 开放 API Spark 原生 + 事务日志
事务模型 乐观并发控制(OCC) 乐观并发控制(OCC)
Schema 演化 支持(列级增删改) 支持(列级增删改)
时间旅行 基于快照 ID 基于版本号
文件格式 Parquet / ORC / Avro Parquet
计算引擎 Spark、Flink、Trino、Hive、Presto Spark(为主)、Flink、Presto

从表格能看出来,Iceberg 更强调开放性和多引擎兼容,而 Delta Lake 更偏向Spark 生态的深度整合。这不是谁好谁坏的问题,而是适用场景不同。

1.5 一张图看懂湖仓时代

下面这张图是我自己画的,帮你理清数据湖仓时代的核心组件关系。

数据湖仓时代核心架构 底层存储层 HDFS / S3 / ADLS / GCS 表格式层(Table Format) Iceberg / Delta Lake / Apache Hudi 计算引擎层 Spark / Flink / Trino / Presto / Hive 应用层 BI 报表 / 实时分析 / 机器学习 / 数据科学 表格式层是湖仓一体的核心:它在廉价存储上实现了 ACID 事务、Schema 演化、时间旅行等数据库级能力

从这张图能看出来,表格式层是湖仓一体的核心。它夹在底层存储和计算引擎之间,提供事务、索引、快照等能力。没有这一层,数据湖就只是个文件堆。

1.6 为什么是现在?

你可能想问:这些技术几年前就有了,为什么现在才火?

原因有三:

  • 存储成本下降:对象存储(S3、OSS)越来越便宜,存几百 TB 数据不再是问题
  • 计算引擎成熟:Spark、Flink 已经能稳定处理 PB 级数据
  • 业务需求升级:实时分析、数据科学、AI 训练都需要统一的数据底座

我最近参与的一个项目,客户把 200+ 张 Hive 表迁移到了 Iceberg。迁移之后,查询性能提升了 3-5 倍,数据回滚从小时级降到了分钟级。这就是湖仓一体带来的实际价值。

注意:湖仓一体不是银弹。如果你的数据量很小(几百 GB 以内),传统关系型数据库可能更合适。湖仓一体的优势在大规模、多引擎、高并发场景下才能体现出来。

1.7 本章小结

数据湖仓时代的到来,本质上是存储成本下降 + 计算引擎成熟 + 业务需求升级三者共同推动的结果。Iceberg 和 Delta Lake 作为表格式层的代表,解决了传统数据湖缺乏事务、版本管理、Schema 演化等核心痛点。

我个人认为,未来三到五年,湖仓一体会成为企业数据架构的主流选择。而 Iceberg 和 Delta Lake 的选型,将直接影响你的数据平台能否支撑业务的高速发展。