一、项目背景与架构设计:实时数仓的“第一块砖”

大家好,我是这次课程的主讲。在正式开始之前,我想先聊聊一个很现实的问题:为什么我们要搞实时数仓?

我见过太多团队,离线数仓跑得好好的,每天凌晨出报表,业务方也习惯了。但突然有一天,运营说“我要看今天的实时GMV”,老板说“我要监控大屏的秒级波动”。这时候你才发现,离线那一套根本扛不住。嗯,这就是我们做这个项目的初衷。

1.1 实时数仓到底是什么?

说白了,实时数仓就是让数据从产生到可分析的时间窗口,从“天级”压缩到“秒级”或“分钟级”。它不是要取代离线数仓,而是补上“快”这块短板。

我个人的理解是:离线数仓解决“全”的问题,实时数仓解决“快”的问题。两者配合,才能让数据真正驱动业务决策。

核心目标:数据延迟从 T+1 降到秒级,同时保证数据的一致性和可回溯性。

1.2 项目业务背景:我们选电商还是金融?

这次课程,我选的是电商场景。为什么?

  • 业务链路完整:从用户浏览、加购、下单、支付到物流,每个环节都有实时需求。
  • 数据特征典型:高并发、大流量、多维度,非常适合展示实时数仓的威力。
  • 避坑价值高:我在电商项目中踩过不少坑,比如双11大促时的数据洪峰、订单状态乱序等问题,这些经验我会毫无保留地分享。

当然,金融场景我也会穿插讲解。比如实时风控、交易监控等,核心思路是相通的。

1.3 技术选型:为什么是 Flink + Kafka + ClickHouse + Hudi?

这个问题,我每次被问到都会反问一句:你想想看,实时数仓最需要解决哪几个问题?

  1. 数据实时采集与传输——需要高吞吐、低延迟的消息队列。
  2. 实时计算与处理——需要支持 Exactly-Once、状态管理、事件时间语义的引擎。
  3. 实时存储与查询——需要支持高并发、低延迟的 OLAP 查询。
  4. 数据湖底座——需要支持 ACID、增量读取、数据回溯的存储层。

基于这四点,我选型如下:

组件 选型理由 我在项目中的体会
Flink 业界最成熟的流计算引擎,支持事件时间、状态后端、Checkpoint 曾经用 Flink 处理过每秒 10 万+的点击流,状态管理稳如老狗
Kafka 高吞吐、可持久化、支持多消费者,是实时数仓的“数据总线” 分区数设置不合理会导致数据倾斜,这个坑我后面会细讲
ClickHouse 列式存储、向量化执行、单表查询极快,适合实时 OLAP 注意它的 MergeTree 引擎特性,写入合并策略调优很关键
Hudi 支持 ACID、增量查询、时间旅行,是实时数仓的“数据湖底座” 我曾在 Hudi 上做过近实时入湖,解决了离线表与实时表的数据一致性问题

小提示:技术选型没有银弹。这套组合适合大多数中大型实时场景,但如果你只是小规模试用,也可以考虑简化方案,比如用 Pulsar 替代 Kafka,或用 Doris 替代 ClickHouse。

1.4 整体架构图设计

下面这张图,是我在多个项目中沉淀下来的实时数仓架构。它分为五层:数据接入层、实时计算层、实时存储层、数据服务层和数据湖底座。

企业级实时数仓整体架构图 企业级实时数仓整体架构图 数据接入层 业务日志(Nginx/App) | 数据库CDC(Canal/Debezium) | 消息队列(Kafka) 实时计算层 Flink SQL / DataStream API | 事件时间处理 | 状态管理 | Checkpoint 实时存储层 ClickHouse(实时OLAP) | Redis(缓存加速) | HBase(KV存储) 数据服务层 实时大屏 | 实时报表 | 实时风控 | 实时推荐 | 数据API 数据湖底座(Hudi) ACID事务 | 增量查询 | 时间旅行 | 数据回溯 说明:数据流从上到下,Hudi 作为数据湖底座,同时支持实时写入和离线回溯

这张图看起来简单,但每一层都有不少细节。我挑几个重点说说:

  • 数据接入层:Kafka 是核心。我建议把不同业务的数据分到不同的 Topic,方便后续扩展。曾经有个项目把所有数据塞到一个 Topic,结果消费端压力巨大,分区数调整也很麻烦。
  • 实时计算层:Flink 的 Checkpoint 间隔设置很关键。太短影响性能,太长恢复时间久。我一般设 30 秒到 1 分钟,具体看业务容忍度。
  • 实时存储层:ClickHouse 适合做聚合查询,但不适合做点查。如果你需要频繁的 KV 查询,记得在前面加一层 Redis。
  • 数据湖底座:Hudi 的 Copy-on-Write 和 Merge-on-Read 两种表类型,我后面会专门讲怎么选。简单说,写多读少用 MOR,读多写少用 COW。

避坑指南:我曾经在一个项目中,把 ClickHouse 当作唯一的存储层,结果业务方要求修改历史数据时,发现 ClickHouse 的更新代价极高。后来加了 Hudi 做数据湖底座,才解决了数据回溯和修正的问题。所以,实时数仓一定要有“湖”的概念,不能只靠 OLAP 引擎。

1.5 本章小结

这一章我们聊了实时数仓的概念、电商业务背景、技术选型思路,以及整体架构设计。说白了,就是给整个项目搭好了骨架。

接下来的章节,我们会一步步把每一层都落地实现。从环境搭建、数据接入,到 Flink 实时计算、ClickHouse 建模,再到 Hudi 数据湖集成,最后上线运维。每一章我都会结合真实项目中的经验和教训来讲。

嗯,准备好了吗?我们开始吧。