一句话定义:批处理(Batch Processing)是把一段时间的数据攒成一批,到点一次性算完;流处理(Stream Processing)是数据一条条到达,边到边算。
打个生活化的比方
批处理像月底看信用卡账单:一个月里所有消费先记着,月底一起出汇总。流处理像每刷一笔,手机立刻弹一条通知——这笔钱刚花出去,结果就出来了。
两种方式没有高下,只有合不合适。账单你要的是“准”,通知你要的是“快”。
差别到底在哪
| 维度 | 批处理 | 流处理 |
|---|---|---|
| 延迟 | 分钟到小时,甚至按天 | 毫秒到秒 |
| 数据视角 | 全量、有界 | 增量、无界(不断到来) |
| 成本 | 可以错峰跑,机器闲时用 | 需要 7×24 常驻,通常更贵 |
| 容错 | 失败重跑整批,结果可复现 | 要处理乱序、迟到数据、断点续跑,靠窗口(window)和检查点(checkpoint) |
| 结果 | 确定、可重算 | 多为窗口内结果,或近似值 |
一句话概括取舍:批处理用“等”换准确和便宜,流处理用“贵”换即时。
AI 里的分工:离线训练 vs 实时特征
这两套东西在 AI 系统里是搭档,不是对手。
离线训练走批处理。推荐、风控、搜索排序的模型,通常拿几周甚至几个月的历史数据跑全量,几小时出一版完全可接受。批处理能反复重跑、结果可复现,这对调参和回溯问题很重要。
在线推理要流处理。用户刚点了什么、刚搜了什么,这类特征必须现算现用。比如“过去 5 分钟点击次数”“当前购物车金额”,如果等第二天批处理算出来,特征早就过期,模型等于拿旧地图导航。
这里有个容易踩的坑:训练-服务偏差(training-serving skew)。离线用批处理算特征、线上用流处理算特征,两边口径稍有不一致(比如时间窗口差一分钟、空值处理不同),模型线上表现就会莫名变差。所以特征平台通常要求同一份特征定义,两套引擎各算一遍,并做一致性校验。
工程上还有 Lambda 架构(离线层 + 加速层)和 Kappa 架构(全走流)的分野,近年“流批一体”的引擎也在减少两套代码的重复维护——具体支持程度以官方文档为准。
对普通职场人的意义
你每天的日报、月度经营分析、年终盘点,本质都是批处理;系统告警、支付风控拦截、外卖骑手位置更新,是流处理。
所以遇到“要不要上实时”的讨论,别先问技术栈,先问一句:这件事晚一小时知道,会不会误事? 会,就流;不会,攒一批算更省事也更省钱。
