从“攒一锅再算”到“来一条就干一条”:大数据批处理到流处理的进化之路
大家好,我是你们熟悉的 Echo_Wish。今天咱聊点“大数据圈的真心话”,主题叫——大数据到底是个啥?它怎么就从“批处理”一步步走到“流处理”的?
别怕,这不是那些课本式的模糊概念,而是我这些年踩过的坑、做过的系统、优化过的作业后的肺腑之言。一句话概括:
大数据的发展,就是从“攒一锅一起算”,进化到“来一条算一条”。背后的本质,是时代对“速度”的极限追求。
好,咱从头说起。
一、什么是大数据?一句话讲透
你听过无数版本:Volume、Velocity、Variety;甚至还有 Value、Veracity;有的人说大数据= Hadoop;有人说大数据= AI 的粮食。
我觉得吧,都对,但都不够“人话”。
我自己的定义是:
大数据就是:数据大到传统工具解决不了,只能换一套分布式思维重新来过。
就像你家厨房炒菜没问题,但要给 100 万人做盒饭,那就不是“多抓两把盐”能解决的,这是模式问题,不是工具问题。
大数据也是一样:
量大、类型乱、速度快、计算复杂 —— 单机顶不住了,就得上分布式。
二、批处理时代:攒一锅再算,慢工出细活
回到十年前,大数据刚流行时,我们的口号是:
“离线计算天下无敌”
“慢点没事,算得准最重要”
核心思想很朴素:
- 数据先攒着
- 每小时算一次
- 每天跑一次报表
- 算出来了落仓,第二天用
这就像东北炖菜,先一起炒、再一起炖、最后端上来。
批处理有个特点:
吞吐量高、成本低、但延迟天生高
举个例子:你点外卖,平台每天统计一次销量——属于批处理;你点进店铺看到销量实时变化——那就不是批处理能搞的了。
代码大多长这样(以 Spark 为例):
# 批处理典型示例:每天跑一次离线统计
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("batch-demo").getOrCreate()
df = spark.read.parquet("/data/orders/2025-11-01")
# 统计每个用户的消费金额
result = df.groupBy("user_id").sum("amount")
result.write.mode("overwrite").parquet("/warehouse/user_sum/2025-11-01")
这就是典型的“攒一锅算一锅”。稳得很,但慢得也很。
三、时代变了:业务需求逼着我们向“实时”进化
当互联网从 PC 时代走向移动时代,用户行为变得碎片化、即时化。
外卖要实时调度
直播要实时推荐
支付要实时风控
广告要实时竞价
监控要实时报警
一句话:
谁的系统反应更快,谁就能多赚几个亿。
业务方一句话就把我们从“批处理舒适区”打醒了——
你们的数据能不能实时?一分钟都不能等。
于是,我们开启了“从批到流”的时代大航海。
四、流处理时代:来一条算一条,实时才是王道
所谓“流处理”(Stream Processing),概念特别简单:
数据一到,就立刻计算,不等、不攒、不延迟。
这和做菜类似:来客人就现炒,不提前做。
流处理偏向实时性:延迟 1 秒都算慢。
流处理的技术代表:Flink、Spark Streaming、Kafka Streams
而且这玩意的难度,比批处理高一大截:
- 数据无序
- 数据有迟到
- 数据重复
- 宕机要恢复
- 状态还得持久化
- 一切都在毫秒级发生
用 Flink 写实时统计代码,大概是这样:
# 流处理典型示例:实时统计订单金额
from pyflink.datastream import StreamExecutionEnvironment
from pyflink.datastream.window import TumblingEventTimeWindows
from pyflink.common import Types
from pyflink.common.time import Time
env = StreamExecutionEnvironment.get_execution_environment()
stream = env.socket_text_stream("localhost", 9999)
# 输入格式:user_id, amount, timestamp
parsed = stream.map(lambda x: x.split(","))
# 10 秒滚动窗口实时统计
result = parsed \
.key_by(lambda x: x[0]) \
.window(TumblingEventTimeWindows.of(Time.seconds(10))) \
.reduce(lambda a, b: (a[0], float(a[1]) + float(b[1])))
result.print()
env.execute("stream-demo")
你看,“一来就算”就是这种感觉。
五、批处理 vs 流处理——到底差在哪儿?
下面这张 Echo_Wish 亲手总结的对比表,最容易看懂:
| 维度 | 批处理(Batch) | 流处理(Stream) |
|---|---|---|
| 数据来源 | “攒”出来的文件 | 实时事件 |
| 延迟 | 分钟/小时级 | 毫秒/秒级 |
| 吞吐 | 高 | 更高(持续) |
| 难度 | 低 | 高(状态、时间) |
| 一致性 | 高 | 难,需花大力气 |
| 成本 | 更低 | 更高(常驻资源) |
| 适用场景 | 报表、离线分析 | 实时推荐、风控、监控 |
一句总结:
批处理追求“大而准”,流处理追求“快而稳”。
六、今天的大数据:不是“批 OR 流”,而是“批 + 流”
这几年,我越来越强烈地感受到:
任何认真做数据的公司,最终都走向流批一体。
为什么?
- 批 → 负责全量计算、历史数据
- 流 → 负责实时计算、增量数据
- 合在一起 → 实时结果 + 准确结果 + 成本可控
最典型架构是 Lambda Architecture(批 + 流分层)
后来出现 Kappa Architecture(全流处理)
再往后,Flink、Spark 都在做:
流批一体:写一份代码,两种模式跑
这是趋势,也是行业共识。
七、我的一点感悟:技术发展永远跟着“业务痛点”
回头看大数据 15 年:
- Hadoop 流行 → 因为存不下、算不动
- Spark 火起来 → 因为 Hadoop 慢
- Flink 起飞 → 因为 Spark 流不够实时
- 湖仓体系兴起 → 因为需要统一湖+仓
- 流批一体兴起 → 因为要降本增效
你会发现,大数据每一次进化,都不是为了炫技,而是因为:
业务难受了,技术才不得不进化。
八、结语:未来的大数据是什么?
我认为未来的大数据会走向三个方向:
- 实时化是绝对趋势(批处理永远不会消失,但实时会占比越来越高)
- 流批一体化工具会成为主流
- AI 会进一步吞噬大数据数据工程(自动生成 SQL、自动治理、自动调优)