数据流核心概念:事件流、批处理、流处理、数据管道、数据湖与数据仓库

好,咱们进入正题。这一节讲的是数据流里的几个基础概念。说实话,这些词在广告系统里天天被提起,但很多人其实没搞明白它们之间的区别和联系。我当年刚入行时也踩过不少坑,今天就把我的理解掰开了揉碎了讲给你听。

事件流:广告系统的“心跳”

事件流,说白了就是一连串按时间顺序发生的事件。在广告系统里,每一次曝光、每一次点击、每一次转化,都是一个事件。

我个人习惯把事件流想象成一条河。河水不停地流,每个水滴就是一个事件。你没法让河水倒流,也没法让事件重来。这就是事件流的本质——实时、有序、不可逆

广告系统中的典型事件流:

  • 用户浏览页面 → 广告请求事件
  • 广告返回 → 曝光事件
  • 用户点击 → 点击事件
  • 跳转落地页 → 转化事件

我在项目中遇到过一个问题:事件流里的顺序乱了。比如点击事件先到,曝光事件后到。你想想看,这数据还能用吗?所以事件流处理的第一要务就是保序

批处理:把数据攒起来一起干

批处理,就是等数据攒到一定量,或者到了某个时间点,再统一处理。比如每天凌晨跑一次报表,这就是典型的批处理。

批处理的优点很明显:简单、稳定、成本低。缺点也很突出:延迟高。你想想,如果广告主想实时看投放效果,批处理肯定不行。

嗯,这里要注意:批处理不是过时的技术。在广告系统的财务结算、离线报表、模型训练这些场景里,批处理依然是主力。

我的经验:批处理最适合处理“不着急”的数据。比如昨天的广告消耗统计,今天中午出结果完全没问题。别啥都往实时上靠,成本扛不住。

流处理:数据来了就干,不等

流处理和批处理正好相反。数据一来,立刻处理,毫秒级响应。广告系统的实时竞价、实时反作弊、实时调价,都依赖流处理。

流处理的挑战在于:状态管理容错。数据一直在流,你怎么知道当前用户之前看过哪些广告?这就需要维护状态。机器挂了怎么办?数据会不会丢?

我曾经因为流处理的状态没处理好,导致同一个用户被重复计费。那叫一个惨。后来我学乖了,状态一定要做持久化,而且要有幂等性保障。

避坑指南:流处理不是万能的。别把所有的逻辑都塞到流处理里。我曾经见过一个团队,把复杂的模型推理也放到流处理里,结果延迟飙升,系统直接崩了。流处理适合做轻量级、低延迟的计算。重活累活,交给批处理或者数据管道。

数据管道:数据的“高速公路”

数据管道,就是把数据从一个地方搬到另一个地方,中间可能做一些转换、清洗、过滤。你可以把它想象成一条高速公路,数据就是路上的车。

广告系统里的数据管道特别多。比如:

  • 从日志服务器把曝光日志搬到HDFS
  • 从Kafka把实时事件流搬到流处理引擎
  • 从数据库把用户画像搬到缓存

数据管道的核心指标是:吞吐量可靠性。吞吐量不够,数据会积压。可靠性不够,数据会丢。

我个人习惯用Kafka作为数据管道的核心。Kafka的吞吐量高,而且支持数据持久化,就算下游挂了,数据也不会丢。当然,Kafka也不是银弹,配置不对一样出问题。

数据管道的设计原则:

  1. 解耦:生产者和消费者不直接依赖
  2. 缓冲:用消息队列做缓冲,应对流量波动
  3. 监控:每个管道节点都要有监控,知道数据流到哪了
  4. 重试:失败了一定要有重试机制

数据湖与数据仓库:数据的“仓库”

这两个概念经常被搞混。我简单说一下我的理解。

数据湖:存原始数据的地方。什么格式都有,结构化、半结构化、非结构化,一股脑往里扔。数据湖的特点是存储成本低灵活性高。你想怎么分析都行,但前提是你得自己处理数据。

数据仓库:存加工过的数据。数据已经清洗、转换、建模好了,直接就能用。数据仓库的特点是查询效率高数据质量好。但建仓的成本也高,而且灵活性差一些。

特性 数据湖 数据仓库
数据格式 原始格式,多种多样 结构化,经过清洗
存储成本 低(通常用对象存储) 高(通常用列式存储)
查询性能 低(需要自己解析) 高(直接查询)
适用场景 数据探索、机器学习 报表、BI分析

在广告系统里,我通常的做法是:数据湖存全量原始数据,用于模型训练和异常排查。数据仓库存聚合后的指标数据,用于运营报表和广告主看板。

我的建议:别纠结于“湖”还是“仓”。现在很多公司都在做“湖仓一体”。说白了,就是既要数据湖的灵活性,又要数据仓库的查询性能。技术上用Apache Iceberg、Delta Lake这些方案就能实现。

它们之间的关系

最后,我画个图帮你理清这些概念的关系:

事件流(实时数据) → 流处理(实时计算) → 数据管道(传输) → 数据湖(存储原始数据)
                                                                        ↓
批处理(离线计算) ← 数据仓库(存储加工数据) ← 数据管道(ETL) ← 数据湖

说白了,事件流是源头,流处理和批处理是计算方式,数据管道是传输手段,数据湖和数据仓库是存储目的地。它们一起构成了广告系统的数据流架构。

嗯,这一节的内容就这些。下一节我会讲具体的架构设计,到时候咱们再细聊。