从“数据堆积如山”到“实时驱动业务”——聊聊Kafka到Flink的实时数据处理演进
大家好,我是 Echo_Wish。
今天咱来聊一个我在无数公司里都看到的现象:数据越来越多,但能被实时用起来的数据却少得可怜。
很多企业现在都在喊“实时监控、实时推荐、实时风控、实时决策”……
但实际做系统的时候,要么:
- 数据堆在数据库里来不及处理;
- 要么批处理一晚上跑一趟,第二天才出报告;
- 要么业务方找你要指标,你只能说一句:“哥,你等下个批处理窗口吧。”
要实时,就得“数据一来就处理,不落地、不堆积、直接计算”。
而要做到这一点,现代实时数据架构,基本都离不开两个关键角色:
Kafka:负责数据“流”
Flink:负责数据“算”
今天我们就以非常接地气的方式,聊聊从只用 Kafka 到 Kafka+Flink 的架构演进过程,以及为什么它是现实可落地且行业主流的。
一、为什么需要实时处理?
先不要急着上技术,我们看个简单业务场景:
你是电商平台运营,有两个需求:
- 用户刚刚下单,要给他实时推荐优惠券
- 实时监控某个商品是否被秒杀攻击(异常高频下单)
如果你的数据处理是 T+1,那对不起,这两件事情毫无意义。
用户优惠券推荐已经错过关键时间,异常攻击也早就把你库存清光了。
实时处理,让数据从“历史回忆”变成“实时决策”。
二、Kafka:解决数据通路的问题
Kafka 的本质是什么?一句话说清:
Kafka 是一个高吞吐的分布式消息队列,不丢数据,能横向扩展。
它的作用,是让所有业务系统能接入到同一个“数据高速公路”:
[业务系统] → [Kafka] → [其他系统 / 数据仓库 / Flink处理]
这就解决了一件大事:
数据不再孤立,而是进入同样的流通体系。
但是,只用 Kafka 存数据,会遇到一个问题:
Kafka 只负责“存”与“传”,不负责“算”。
举个例子,业务说:
“帮我算一下过去 5 秒内商品A的下单量。”
Kafka 会说:
“哥,我只负责帮你把数据放好,你自己算。”
所以我们需要一个实时计算引擎。
三、Flink:让数据“边走边算”
Flink 有两个关键能力:
- 流式计算(Stream Processing):数据到达就计算,不需要批量积累
- 状态管理(State):能记住历史,才能做窗口分析、实时统计
这意味着 Flink 能做的事包括:
- 实时订单计算
- 实时风控异常检测
- 实时用户行为画像更新
- 实时日志告警
甚至你看到的大部分实时数仓系统底层都是 Kafka + Flink
四、Kafka → Flink 的架构图
我们用一个简单易懂的架构图来看看:
┌──────────────────────────────┐
│ 业务系统 │
└──────────────┬───────────────┘
│ 各类日志/事件/订单
▼
┌───────────────┐
│ Kafka │ 数据流入口
└───────┬───────┘
│
▼
┌───────────────┐
│ Flink │ 数据实时计算/聚合/分析
└───────┬───────┘
│
┌──────────┴──────────┬───────────┐
▼ ▼ ▼
实时数据库 (Redis/Doris) OLAP存储 业务告警&推荐系统
看懂了吧?数据不落地、不等待,直接进入实时决策链路。
五、用代码看看:实时统计商品 5 秒下单数
Flink 示例(基于 Scala / Java 简化版)
DataStream<String> stream = env.addSource(new FlinkKafkaConsumer<>("orders", new SimpleStringSchema(), props));
DataStream<Tuple2<String, Integer>> result = stream
.map(value -> {
String productId = parseProductId(value);
return new Tuple2<>(productId, 1);
})
.returns(Types.TUPLE(Types.STRING, Types.INT))
.keyBy(value -> value.f0)
.timeWindow(Time.seconds(5))
.sum(1);
result.addSink(new RedisSink<>(redisConfig, new ProductCountMapper()));
意思就是:
- 从 Kafka 读取订单流
- 提取商品 ID
- 以商品为 key 分组
- 每 5 秒统计一次数量
- 把结果写入 Redis 或推送业务服务
这样你就能实时看到商品热度,用于告警 or 推荐 or 自动调价。
六、Kafka+Flink 架构的核心价值
| 能力 | 带来的价值 |
|---|---|
| 实时数据流 | 业务决策不延迟 |
| 流式计算 | 省下大量批处理资源 |
| 有状态计算 | 可做实时监控、风控、画像 |
| 可扩展 | 数据规模再大也不慌 |
| 去中心化 | 系统间不再耦合 |
简单讲就是一句话:
从“数据存着等用”变成“数据来就用”。
七、写在最后:实时系统,本质是认知升级
很多团队犹豫做实时架构,因为觉得复杂、贵、风险大。
但现实是:
数据实时 ≠ 高成本
Kafka+Flink 都是开源,资源可弹性扩展数据实时 ≠ 一口吃成胖子
可以从一个监控或推荐场景开始试点数据实时 ≠ 技术炫技
它本质上是一种业务竞争力