1. 课程导入

欢迎进入《Flink与Iceberg实时湖仓工程实战》。在动手写第一行流式入湖作业之前,我们需要先建立一张清晰的“技术地图”:实时湖仓到底解决什么问题,Flink 与 Iceberg 各自站在什么位置,它们如何协作,以及本课程将沿着怎样的路线带你从概念走到生产可用。本章不涉及复杂代码,但它是后续 29 章所有工程决策的坐标系。

一、为什么需要实时湖仓:从离线数仓到流批一体的演进

传统数据架构通常分为两条链路:一条是面向分析的离线数仓,数据以 T+1 方式批量写入 Hive 或对象存储;另一条是面向监控与告警的实时链路,数据经消息队列进入流处理引擎,结果写入 Kafka、Redis 或 ClickHouse。两条链路各自维护一套元数据、一套存储格式和一套计算逻辑,导致口径不一致、数据重复、运维成本高。

实时湖仓的核心诉求,是让“湖存储”同时具备数据湖的低成本、开放格式与数据仓库的事务能力、Schema 管理能力,并让流式写入成为一等公民。它要解决四个关键矛盾:

  • 时效性矛盾:离线链路无法满足分钟级甚至秒级可见性。
  • 一致性矛盾:流批两条链路计算结果难以对齐。
  • 成本矛盾:实时链路通常使用昂贵存储,历史数据保留成本高。
  • 可维护性矛盾:多套系统意味着多套元数据、权限与血缘。

实时湖仓并不是简单地把 Kafka 数据落到 HDFS,而是要求存储层支持 ACID 事务、快照隔离、Schema 演进、分区演进与时间旅行。这正是 Iceberg 的价值所在;而 Flink 则承担“持续、低延迟、Exactly-Once 地把变化数据写入湖表”的计算职责。

二、Flink与Iceberg的技术定位:计算引擎与表格式的分工

理解二者关系,最有效的方式是区分“计算”与“存储语义”两个层面。Flink 是分布式流批一体计算引擎,负责数据读取、转换、状态管理、Checkpoint 与故障恢复;Iceberg 是面向数据湖的表格式规范,负责定义表结构、分区、快照、清单文件与元数据,并依赖底层文件系统(HDFS、S3、OSS 等)存储实际数据文件。

换句话说,Flink 决定“数据怎么流动、何时提交”,Iceberg 决定“数据以什么语义被组织和暴露”。二者通过 Flink Iceberg Connector 衔接:Flink 作业在 Checkpoint 完成时提交 Iceberg 事务,使写入具备原子性与一致性。

关键认知:Iceberg 不是存储引擎,也不是计算引擎。它是一层“表语义”,让对象存储上的文件集合表现得像一张可事务访问的表。Flink 也不是湖存储,它不负责长期保存数据。把二者混为一谈,是初学者最常见的定位错误。

实时湖仓分层协作关系 计算层:Apache Flink 流批一体 · 状态管理 · Checkpoint · Exactly-Once · SQL / DataStream 表格式层:Apache Iceberg 表结构 · 分区 · 快照 · 清单文件 · ACID · Schema 演进 · 时间旅行 存储层:HDFS / S3 / OSS Parquet / ORC / Avro 数据文件 · Manifest · Metadata JSON Flink Iceberg Connector 提交事务 · 对齐 Checkpoint 下游消费 Trino / Spark / Flink SQL

三、课程整体知识框架与实战路线

本课程共 30 章,按“认知—环境—入湖—进阶—治理—生产”六个阶段推进。每一阶段都围绕可运行的最小闭环设计,避免只讲概念不落地。

阶段 核心内容 产出目标
认知建立 实时湖仓概念、Flink 与 Iceberg 定位、整体路线 能画出技术分层图并解释协作关系
环境准备 Flink 集群、Iceberg Catalog、Hive Metastore、对象存储 本地或测试环境可提交流式入湖作业
实时入湖 Kafka 源、Checkpoint 调优、写入模式、分区策略 实现分钟级可见的 Iceberg 表
进阶能力 Upsert、CDC、Schema 演进、小文件合并 支持变更数据捕获与表结构在线演进
湖仓治理 快照管理、过期清理、元数据维护、权限与血缘 形成可运维、可审计的湖表资产
生产实战 监控告警、故障恢复、性能压测、成本优化 具备上线与排障能力

实战路线遵循“先跑通、再调优、后治理”的原则。第 2 至第 6 章完成环境与基础写入;第 7 至第 15 章深入 Flink 写入 Iceberg 的各类模式与参数;第 16 至第 24 章覆盖 CDC、Schema 演进、小文件与快照治理;第 25 至第 30 章聚焦生产监控、故障复盘与综合项目。

四、典型场景与常见误区

实时湖仓的典型场景包括:用户行为日志的秒级入湖与分钟级分析、数据库 CDC 的准实时同步、IoT 设备数据的低成本长期留存、以及流批统一口径的指标计算。这些场景的共同点是:数据持续到达、需要事务可见性、需要历史回溯、且存储成本敏感。

误区一:把 Iceberg 当成数据库。Iceberg 不提供行级更新服务,也不适合高并发点查。它的优势在于大批量写入、扫描与事务快照。

误区二:认为 Flink 写入 Iceberg 就是简单 Sink。实际上提交频率、Checkpoint 间隔、分区策略、文件大小都会直接影响湖表健康度。

误区三:忽略小文件问题。高频 Checkpoint 会产生大量小文件,若不配合合并策略,元数据和查询性能会迅速恶化。

一个常见的复盘案例是:某团队将 Checkpoint 间隔设为 10 秒,Kafka 每秒百万条数据直接写入 Iceberg,结果一周后单表产生数十万小文件,查询延迟从秒级升至分钟级。根因不是 Flink 或 Iceberg 本身,而是写入频率与文件大小未做权衡。后续章节会给出具体的参数组合与合并方案。

学习建议:本章结束后,请用自己的话回答三个问题——实时湖仓解决了什么矛盾?Flink 与 Iceberg 各自负责什么?本课程六个阶段分别产出什么?能清晰回答,说明你已经具备继续实战的认知基础。

接下来,我们将从环境搭建开始,把这张技术地图逐步变成可运行的工程系统。