一、 核心思想:送快递的两种模式

批处理是“集装箱货运”,而流处理是“快递小哥送货”。

  • 批处理:等所有货物(数据)都到齐了,打成一个巨大的包(如一个一天的数据文件),然后用一辆大卡车一次性运到目的地进行处理。

    • 关注点高吞吐量,一次性处理大量数据。

    • 目标:在特定时间点提供全面、准确的分析结果。

  • 流处理:货物(数据)一来一件,就立刻交给快递小哥,马上送出,随到随处理。

    • 关注点低延迟,快速处理单个或小批量数据。

    • 目标持续、实时地提供最新的洞察和响应。


二、 核心区别对比表

为了更直观地把握两者的全貌,下表从多个维度进行了对比:

维度 批处理 流处理
核心思想 集装箱货运 快递小哥送货
数据范围 处理有界数据(已经完整的数据集) 处理无界数据(永不结束的连续数据流)
处理延迟 高延迟(小时、天、周) 低延迟(毫秒、秒、分钟)
处理模型 一次性的批量作业 持续运行的流式作业
核心目标 高吞吐量(单位时间处理的数据量) 低延迟(从数据产生到结果输出的时间)
数据完整性 处理完整数据,结果精确 处理部分数据,可能用近似结果(如窗口)
典型场景 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这样的消息队列中的历史数据流。

    • 优点:架构简化,只需维护一套代码。

    • 挑战:对消息队列的存储能力和流处理引擎的重算能力要求很高。

总结

批处理和流处理是大数据处理的一体两面,它们解决的是不同维度的业务问题。

  • 要深度洞察,找批处理。

  • 要瞬时反应,找流处理。

更多推荐