1. 数据管道概述:从传统ETL到实时流处理,数据架构的演进之路

大家好,我是你们这门课的老朋友。今天咱们聊聊数据管道的那些事儿。说白了,数据管道就是数据从产生到被用起来的整个流程。我做了十几年数据架构,亲眼看着它从“搬砖”变成了“自来水”。这中间的变化,其实挺有意思的。

1.1 传统ETL:那个“搬砖”的年代

早些年,数据量不大,业务也简单。那时候的数据处理,我习惯叫它“搬砖”。为什么?因为数据是静态的,我们得定时去“搬”。

典型的场景是这样的:每天晚上12点,业务系统不忙了,我们启动一个批处理任务。把今天的订单数据从数据库里读出来,经过清洗、转换,再加载到数据仓库里。第二天早上,老板看报表。

这个模式,就是经典的ETL(Extract, Transform, Load)。

ETL的核心特征:

  • 批量处理:数据按天、按小时成批处理,不是一条一条来
  • 定时调度:依赖cron或调度系统,固定时间点触发
  • 数据静止:处理时数据是“快照”,不会实时变化

我在项目中遇到过最典型的例子:某电商平台,每天凌晨2点跑ETL。结果有一次双十一,订单量暴增,ETL跑了6个小时还没跑完。早上8点,老板要看数据,报表还是空的。嗯,那场面,挺尴尬的。

为什么会这样?因为传统ETL有几个硬伤:

  • 延迟高:最少也是小时级,通常是天级。你想看实时库存?对不起,等明天。
  • 容错差:跑了一半挂了,得从头再来。我见过一个跑了4小时的ETL,最后5分钟报错,全白干。
  • 扩展难:数据量翻倍,处理时间也翻倍。加机器?架构不支持。

避坑指南:我曾经接手过一个项目,ETL脚本里全是存储过程,耦合在数据库里。后来数据量一上来,数据库CPU直接打满,业务系统也跟着瘫痪。记住,ETL尽量不要和业务库抢资源,否则后果很严重。

1.2 实时流处理:数据像“自来水”一样流动

后来业务变了。用户下单后,希望立刻看到库存变化;风控系统需要秒级识别异常交易;推荐系统要根据你刚点的商品,马上更新推荐列表。

这时候,批处理就不够用了。你想想看,用户点了个“购买”,你告诉他“请等待24小时,我们明天处理你的订单”——这谁受得了?

于是,实时流处理登场了。数据不再是“搬砖”,而是像“自来水”一样,源源不断地流过来,随到随处理。

实时流处理的核心思想很简单:

  • 事件驱动:每来一条数据,立刻处理,不等不靠
  • 持续运行:管道是7x24小时开着的,不是定时启动
  • 低延迟:从数据产生到处理完成,秒级甚至毫秒级

我个人的习惯是,把实时流处理想象成一条流水线。数据从源头(比如Kafka)流进来,经过一个个处理节点(比如Flink算子),最后流到目的地(比如数据库或数据湖)。每个节点只做一件事,但组合起来就能完成复杂的业务逻辑。

一个小技巧:刚开始做实时流处理时,别想着一步到位。先把最核心的链路跑通,比如订单实时统计。等稳定了,再慢慢加复杂逻辑。我见过太多人一上来就想做实时数仓,结果半年了还在调优。

1.3 从ETL到流处理:架构演进的核心变化

说了这么多,咱们用一张图来总结一下这个演进过程。下面这张SVG图,展示了我眼中数据架构从传统ETL到实时流处理的变迁。

数据架构演进:从ETL到实时流处理 数据架构演进:从ETL到实时流处理 传统ETL架构 数据源(MySQL/Oracle) ETL 批处理(定时调度) 数据仓库(离线报表) 延迟:小时级 ~ 天级 处理模式:批量快照 典型工具:Sqoop、DataX 演进 实时流处理架构 实时数据源(Kafka/CDC) 流处理引擎(Flink/Spark Streaming) 实时数仓 / 数据湖 延迟:秒级 ~ 毫秒级 处理模式:事件流持续处理 典型工具:Flink、Kafka Streams 核心变化:从“定时搬砖”到“持续流水”,从“批量快照”到“事件驱动”

这张图其实挺直观的。左边是传统ETL,数据从源到仓,中间经过一个批处理的黑盒。右边是实时流处理,数据像流水一样,持续不断地流过处理引擎。

我总结了一下,核心变化有这么几点:

维度 传统ETL 实时流处理
处理模式 批量(Batch) 流式(Streaming)
延迟要求 小时级 ~ 天级 秒级 ~ 毫秒级
数据触发 定时调度 事件驱动
数据状态 静态快照 持续流动
典型工具 Sqoop, DataX, Kettle Flink, Kafka Streams, Spark Streaming
容错机制 重跑整个批次 Checkpoint + 精确一次语义

1.4 为什么需要Lakehouse?

你可能会问:有了实时流处理,是不是就完美了?其实不是。我在实际项目中遇到过另一个问题:数据存哪?

传统数据仓库存结构化数据,但存不了日志、图片、视频这些非结构化数据。数据湖能存所有东西,但查询性能差,不支持事务。实时流处理引擎(比如Flink)处理能力强,但持久化能力弱,总不能把所有数据都放在内存里吧?

于是,Lakehouse架构出现了。它把数据湖的存储能力和数据仓库的查询能力结合了起来。说白了,就是既能存各种格式的数据,又能像用数据仓库一样高效查询。

Lakehouse的核心优势:

  • 统一存储:结构化、半结构化、非结构化数据,全放一个地方
  • ACID事务:支持并发读写,数据一致性有保障
  • 高性能查询:通过优化文件格式和索引,查询速度接近数据仓库
  • 流批一体:同一份数据,既能做实时流处理,也能做离线批处理

举个例子。我之前帮一家金融公司做实时风控。数据源是Kafka,流处理用Flink,结果存数据的时候犯了难。存到HDFS?查询太慢。存到MySQL?存不下。后来用了Lakehouse方案,数据直接写到Delta Lake或Iceberg表里,Flink实时写,Spark离线读,同一份数据,两种用法,互不干扰。

我的建议:如果你刚开始接触Lakehouse,别急着上生产。先用一个小场景验证,比如把实时日志流接入Lakehouse表,然后用SQL查一下。感受一下“流批一体”到底是怎么回事。我当年就是这么入门的。

1.5 本章小结

好了,咱们捋一下今天的内容:

  • 传统ETL:定时搬砖,延迟高,适合离线报表
  • 实时流处理:持续流水,延迟低,适合实时业务
  • Lakehouse:统一存储 + 流批一体,是未来的方向

数据架构的演进,说白了就是业务在逼着技术往前走。用户等不了24小时,老板要看实时数据,风控要秒级响应——这些需求,最终催生了我们今天要讲的实时数据管道。