数据流基础:概念、批流对比与事件驱动架构
大家好,我是你们这堂课的老朋友。
今天咱们聊聊数据流。说实话,这个词在风控圈都快被说烂了。但真正理解它的人,我觉得不多。我见过太多团队,把数据流简单理解成「消息队列 + 消费程序」,结果线上出了大问题才回头补课。
所以这一节,咱们把地基打牢。我会结合自己踩过的坑,把数据流的概念、批处理与流处理的区别,以及事件驱动架构的核心逻辑,掰开揉碎了讲清楚。
一、到底什么是数据流?
数据流,说白了就是「数据在时间轴上的连续运动」。它不是一张静态的表,而是一条河。河水一直在流,你永远无法两次踏入同一条河。
在风控场景里,数据流长什么样?我举个例子:
- 用户点击「下单」按钮,产生一条事件
- 这条事件被发送到 Kafka
- 风控引擎消费它,做实时规则判断
- 判断结果再流回业务系统
整个过程,数据从源头到终点,中间经过多个处理节点。每个节点都在「流」中工作。
核心要点:数据流强调「持续产生」和「实时处理」。它不是一次性的批量导入,而是源源不断的增量数据。
我个人习惯把数据流分为三个维度:
- 数据源流:从哪里来?比如埋点日志、数据库变更日志、第三方回调
- 传输流:怎么传?比如 Kafka、Pulsar、RabbitMQ
- 处理流:怎么算?比如 Flink、Spark Streaming、Storm
你想想看,这三个维度缺一个,你的数据流架构就不完整。
二、批处理 vs 流处理:不只是快慢问题
很多新人问我:「批处理和流处理,不就是快和慢的区别吗?」
嗯,这么说也对,但太表面了。我曾在项目中吃过亏——用批处理的思维去设计流处理系统,结果延迟是降下来了,但数据准确性一塌糊涂。
咱们直接看对比:
| 维度 | 批处理 | 流处理 |
|---|---|---|
| 数据范围 | 处理「过去」的完整数据集 | 处理「现在」的实时事件 |
| 延迟要求 | 分钟级到小时级 | 毫秒级到秒级 |
| 触发方式 | 定时调度(如每5分钟跑一次) | 事件到达即触发 |
| 数据视图 | 全量快照 | 增量流 |
| 容错机制 | 重跑整个批次 | 基于状态快照 + 重放 |
| 典型场景 | 离线报表、历史数据回溯 | 实时风控、实时推荐 |
看到区别了吗?批处理是「回头看」,流处理是「向前看」。在风控领域,我们既要向前看(实时拦截),也要回头看(离线分析)。
我的经验:不要试图用流处理替代批处理。我见过有人把所有离线计算都搬到 Flink 上,结果状态越积越大,最后 OOM 了。正确的做法是:流处理做实时决策,批处理做深度分析。两者互补,不是替代。
三、事件驱动架构:风控系统的灵魂
事件驱动架构,英文叫 Event-Driven Architecture,简称 EDA。说白了,就是「一切皆事件」。
在传统架构里,系统之间通过 API 调用耦合在一起。A 调用 B,B 调用 C,一个环节挂了,整个链路就断了。而在事件驱动架构里,系统之间通过事件总线通信。A 产生一个事件,扔到总线上,谁关心谁订阅。
为什么会这样?因为风控场景太复杂了。一个用户行为可能触发十几个规则,每个规则又依赖不同的数据源。如果用同步调用,延迟根本扛不住。
我给大家画一张图,看看事件驱动架构在风控中的典型流程:
这张图展示了一个典型的事件驱动风控流程:
- 事件源产生事件,发送到事件总线
- 流处理引擎从总线消费事件,同时触发规则引擎、特征计算、模型推理
- 所有处理结果汇总到决策模块,输出最终判断
注意:事件驱动架构虽然解耦,但也带来了新问题——事件顺序和幂等性。我曾经在一个项目中,因为 Kafka 分区内事件乱序,导致风控规则误判。后来我们引入了事件时间戳 + 水位线机制才解决。这个坑,后面章节我会详细讲。
四、流处理的核心挑战
聊完概念,咱们说说实战中会遇到哪些挑战。我总结了三个:
- 时间语义:事件时间 vs 处理时间。你用哪个?我建议在风控场景里,优先用事件时间。因为处理时间受系统负载影响,不稳定。
- 状态管理:流处理是有状态的。比如你要统计用户过去5分钟的下单次数,这个「次数」就是状态。状态怎么存?怎么恢复?这是个大课题。
- 容错与一致性:机器挂了怎么办?数据会不会丢?会不会重复计算?Flink 的 exactly-once 语义能解决一部分,但需要你正确配置。
一个小技巧:刚开始做流处理时,别追求完美的一致性。先做到 at-least-once,配合业务层的幂等去重,往往更实用。我早期一个项目就是被 exactly-once 的配置折腾了两个月,后来发现业务层去重更简单。
五、总结一下
这一节我们聊了三个核心点:
- 数据流是「持续运动的数据」,不是静态表
- 批处理和流处理各有适用场景,别混用
- 事件驱动架构是风控系统的骨架,解耦但需要处理好顺序和状态
嗯,内容不少。但这些都是后面所有实战内容的基础。你把这些概念吃透了,后面讲 Flink 算子、状态后端、容错机制时,你会觉得顺理成章。
公众号:蓝海资料掘金营,微信deep3321