1. 实时数仓概述:传统数仓的痛点、实时数仓的演进、Lambda架构与Kappa架构对比、Iceberg在实时数仓中的定位

大家好,我是你们这门课的主讲。今天咱们聊聊实时数仓的来龙去脉。说实话,我做了快十年的数据架构,从传统数仓一路摸爬滚打过来,踩过的坑真不少。这一章算是整个课程的“地基”,把为什么需要实时数仓、架构怎么演变的、以及Iceberg到底扮演什么角色,一次性讲清楚。

1.1 传统数仓的痛点:为什么我们“忍”了这么久?

先说说传统数仓。很多公司现在还在用,但痛点其实很明显。

核心矛盾:业务要求“秒级响应”,传统数仓却只能做到“T+1”。

我归纳了四个最典型的痛点:

  • 时效性差:数据从产生到可查询,通常要等24小时。你想想看,电商大促期间,运营盯着昨天的报表做决策,这不是刻舟求剑吗?
  • ETL链路长:数据从业务库到ODS,再到DW、DM,层层加工。我曾经在项目里数过,一条核心链路跑了7个MapReduce任务,出问题排查要半天。
  • 存储与计算耦合:传统数仓大多基于MPP架构,扩缩容非常痛苦。我记得有一次双十一前扩容,光数据重分布就花了三天。
  • 难以支撑实时场景:风控、实时大屏、个性化推荐,这些场景传统数仓基本无能为力,只能靠旁路系统。

我的经验:2018年我在一家电商公司,业务方要求“下单后5分钟内看到订单在实时大屏上”。传统数仓根本做不到,我们只好用Kafka + Flink临时搭了一套,虽然能跑,但数据一致性经常出问题。那时候我就意识到,必须有一套统一的实时数仓方案。

1.2 实时数仓的演进:从“批处理”到“流批一体”

实时数仓不是凭空冒出来的。它经历了几个阶段:

  1. 阶段一:离线数仓 + 实时旁路 —— 离线照跑,实时用Storm/Flink单独拉一条链路。问题是两套数据口径经常对不上。
  2. 阶段二:Lambda架构 —— 批处理层 + 速度层 + 服务层。解决了口径问题,但维护两套代码,成本翻倍。
  3. 阶段三:Kappa架构 —— 统一用流处理,数据全量走Kafka。简化了架构,但对消息队列的存储和回溯能力要求极高。
  4. 阶段四:流批一体 + 湖仓一体 —— 这就是我们现在所处的阶段。用Iceberg这类开放表格式,让流和批共用同一份数据、同一套表结构。

说白了,演进的核心就是:从“两套系统、两套代码”走向“一套系统、一套代码”。

1.3 Lambda架构 vs Kappa架构:到底选哪个?

这个问题我几乎每次分享都会被问到。咱们直接上对比:

对比维度 Lambda架构 Kappa架构
核心思想 批处理层 + 速度层,服务层合并结果 全量数据走流处理,消息队列统一存储
数据一致性 批处理层保证最终一致,速度层保证实时 流处理保证Exactly-Once,依赖消息队列回溯
开发维护成本 高,需要维护两套代码(批+流) 中,一套流代码,但消息队列运维复杂
数据回溯能力 强,批处理层天然支持历史重跑 弱,依赖Kafka等消息队列的保留时长
适用场景 对历史数据一致性要求极高,实时性要求中等 实时性要求高,历史数据回溯需求少

避坑指南:我曾经在一个金融项目中选了Kappa架构,结果业务方要求“回刷三个月前的数据修正口径”。Kafka根本存不了那么久,最后不得不临时补了一套批处理任务。所以,选型前一定要问清楚:你的历史数据回溯窗口是多久?

现在有了Iceberg,其实我们可以走第三条路:流批一体架构。流作业实时写入Iceberg,批作业直接读取Iceberg的快照。既不需要维护两套代码,又能利用Iceberg的Time Travel能力做历史回溯。嗯,这才是现代实时数仓该有的样子。

1.4 Iceberg在实时数仓中的定位:为什么是它?

Iceberg不是数据存储,也不是计算引擎。它是一个开放的表格式(Table Format)。你可以把它理解为:在数据湖(HDFS/S3)之上,加了一层“表结构管理”和“事务支持”的中间层。

它在实时数仓中的定位,我总结为三个关键词:

  • 统一底座:流和批共用同一张Iceberg表。Flink实时写入,Spark/Presto离线分析,数据只有一份。
  • 事务保障:支持ACID,读时无锁。实时写入不会阻塞离线查询。
  • 快照隔离:每次写入生成一个快照,查询可以指定读取某个快照。这就解决了“实时数据还在写,查询读到一半”的问题。

下面这张图,是我自己画的一个Iceberg在实时数仓中的定位图,你看完就明白了:

Iceberg在实时数仓中的定位 Iceberg在实时数仓中的定位 数据源层:业务数据库、日志、消息队列(MySQL / Kafka / Pulsar) 实时采集层:Flink CDC / Kafka Connect 统一存储层:Apache Iceberg 表格式 ACID事务 · 快照隔离 · Schema Evolution · Time Travel 实时查询:Flink / Kafka Streams 离线查询:Spark / Presto / Trino 应用层:实时大屏 · 风控 · 数据服务 · 报表分析 核心优势:流批共用同一张Iceberg表,数据只有一份,不再需要维护两套链路

你看,Iceberg处在中间层,向上对接各种计算引擎,向下统一管理数据文件。它不关心数据是怎么来的(流还是批),只负责把数据管好、查对。

我的建议:如果你正在从传统数仓向实时数仓迁移,不要一上来就搞Lambda或Kappa二选一。先引入Iceberg作为统一存储层,流和批都往Iceberg写。你会发现,很多架构上的纠结,其实是因为“存储层不够强大”。Iceberg补上了这一环。

小结

这一章我们聊了:

  • 传统数仓的四个核心痛点:时效性差、ETL链路长、存算耦合、不支持实时。
  • 实时数仓的四个演进阶段:从离线+旁路,到Lambda、Kappa,再到流批一体。
  • Lambda与Kappa的对比:没有银弹,关键看你的回溯窗口和一致性要求。
  • Iceberg的定位:统一存储底座,让流批共用一份数据,解决架构分裂问题。