大数据基础概念——流处理和批处理
一、 核心思想:送快递的两种模式
批处理是“集装箱货运”,而流处理是“快递小哥送货”。
-
批处理:等所有货物(数据)都到齐了,打成一个巨大的包(如一个一天的数据文件),然后用一辆大卡车一次性运到目的地进行处理。
-
关注点:高吞吐量,一次性处理大量数据。
-
目标:在特定时间点提供全面、准确的分析结果。
-
-
流处理:货物(数据)一来一件,就立刻交给快递小哥,马上送出,随到随处理。
-
关注点:低延迟,快速处理单个或小批量数据。
-
目标:持续、实时地提供最新的洞察和响应。
-
二、 核心区别对比表
为了更直观地把握两者的全貌,下表从多个维度进行了对比:
| 维度 | 批处理 | 流处理 |
|---|---|---|
| 核心思想 | 集装箱货运 | 快递小哥送货 |
| 数据范围 | 处理有界数据(已经完整的数据集) | 处理无界数据(永不结束的连续数据流) |
| 处理延迟 | 高延迟(小时、天、周) | 低延迟(毫秒、秒、分钟) |
| 处理模型 | 一次性的批量作业 | 持续运行的流式作业 |
| 核心目标 | 高吞吐量(单位时间处理的数据量) | 低延迟(从数据产生到结果输出的时间) |
| 数据完整性 | 处理完整数据,结果精确 | 处理部分数据,可能用近似结果(如窗口) |
| 典型场景 | T+1报表、日终对账、用户历史行为分析 | 实时告警、欺诈检测、实时推荐、实时大屏 |
| 技术代表 | Hadoop MapReduce, Spark, Hive | Flink, Spark Streaming, Storm, Kafka Streams |
三、 工作原理与技术内涵
这两种处理模式在技术实现上有着根本的不同,其核心处理模型可以概括为下图所示:

下面我们来详细解析图中的关键环节:
1. 批处理的关键概念
-
数据边界:批处理假设数据是完整的、有始有终的。例如,“2024年1月15日全天的日志”就是一个有界数据集。
-
调度与触发:作业由调度器触发(如每天凌晨1点开始运行)。
-
全量计算:每次处理都是针对数据全集进行计算,哪怕只有一条新数据,也需要重新处理整个数据集(虽然有些引擎会优化)。
2. 流处理的关键概念
-
无界数据流:流处理面对的是一个理论上永不结束的数据流,数据是无限的。
-
时间窗口:为了对无界数据进行聚合计算(如计算“最近5分钟的访问量”),流处理引入了窗口概念。
-
滚动窗口:固定大小、不重叠的窗口(如每5分钟一个窗口)。
-
滑动窗口:固定大小、但可以重叠的窗口(如每1分钟计算一次过去5分钟的数据)。
-
会话窗口:根据用户活动的活跃周期来划分的动态窗口。
-
-
状态管理:流处理需要维护状态,例如在计算“网站独立访客数”时,需要记住已经出现过的用户ID,这称为状态。这是流处理系统复杂性的主要来源。
四、典型应用场景和架构设计与选型建议
1. 典型应用场景
| 场景 | 适用技术 | 理由 |
|---|---|---|
| 运营商月度账单 | 批处理 | 需要准确计算用户一整月的所有通话和流量记录,要求100%准确,延迟一天可接受。 |
| 网络安全实时告警 | 流处理 | 当检测到一次DDoS攻击或异常登录时,必须在秒级甚至毫秒级内发出告警,以便立即响应。 |
| 用户画像与历史行为分析 | 批处理 | 分析用户过去一年的购物记录、浏览偏好,生成标签体系,用于长期营销策略。 |
| 实时反欺诈 | 流处理 | 在用户进行一笔支付时,实时分析其交易特征、位置信息,在支付完成前判断是否存在盗刷风险。 |
| 日度/周度经营报表 | 批处理 | 为管理层提供昨天或上周的完整经营数据,需要精确、全面的统计。 |
| 实时运维监控大屏 | 流处理 | 展示系统当前的QPS、在线用户数、CPU负载等,要求数据是最新的。 |
2. 架构设计与选型建议
在现代大数据架构中,批处理和流处理往往不是二选一,而是协同工作,形成 “Lambda架构” 或更先进的 “Kappa架构”。
-
Lambda架构:
-
批处理层:处理全量数据,保证数据的准确性和完整性。
-
流处理层:处理实时数据,保证数据的低延迟。
-
服务层:合并批处理和流处理的结果,提供给前端应用。
-
优点:平衡了准确性和实时性。
-
缺点:需要维护两套逻辑相似的代码,架构复杂。
-
-
Kappa架构:
-
核心思想:用一套流处理系统解决所有问题。
-
实现方式:将所有数据(包括历史数据)作为流来处理。当需要重新计算全量数据时,就重新消费存储在如Kafka这样的消息队列中的历史数据流。
-
优点:架构简化,只需维护一套代码。
-
挑战:对消息队列的存储能力和流处理引擎的重算能力要求很高。
-
总结
批处理和流处理是大数据处理的一体两面,它们解决的是不同维度的业务问题。
-
要深度洞察,找批处理。
-
要瞬时反应,找流处理。
更多推荐
所有评论(0)