ARTICLE
流处理
流处理 (Stream Processing) 流处理 (Stream Processing) 是一种对无界、连续生成的数据流进行实时计算的处理范式。与传统的批处理不同,流处理系统无需等待全部数据就绪,而是以"到达即处理"的方式,逐条或逐微批次地对数据记录执行转换、聚合和分析操作,输出低延迟的实时结果。这一范式广泛用于实时监控、金融风控、物联网数据处理和推荐
流处理 (Stream Processing)
流处理 (Stream Processing) 是一种对无界、连续生成的数据流进行实时计算的处理范式。与传统的批处理不同,流处理系统无需等待全部数据就绪,而是以"到达即处理"的方式,逐条或逐微批次地对数据记录执行转换、聚合和分析操作,输出低延迟的实时结果。这一范式广泛用于实时监控、金融风控、物联网数据处理和推荐系统等场景。
核心概念与时间语义
流处理的关键在于对时间的处理。数据流中每条记录通常携带两个时间戳:
- 事件时间 (Event Time):数据在源头实际发生的时间,嵌入在记录内部。
- 处理时间 (Processing Time):数据被流处理系统接收并开始处理的时间。
两者的偏差 (延迟) 广泛存在于分布式环境中,流处理框架需提供水印 (Watermark) 机制来追踪事件时间的进度,以容忍一定程度的乱序和延迟数据。
窗口计算
由于数据流是无穷的,聚合操作必须限定在有限范围内,窗口 (Window) 由此成为流处理的核心抽象。常见的窗口类型包括:
- 滚动窗口 (Tumbling Window):固定长度、互不重叠,每条记录只属于一个窗口。
- 滑动窗口 (Sliding Window):固定长度,以给定步长滑动,窗口之间可以有重叠。
- 会话窗口 (Session Window):基于活动间隔动态划分,天然适应事件间隔不规则的场景,如用户行为分析。
状态管理与容错
流处理区别于无状态简单过滤的核心在于有状态计算。聚合、连接和模式匹配等操作均需要跨记录维护状态。现代流处理引擎通过检查点 (Checkpoint) 机制将状态持久化至分布式存储,在节点故障时实现精确恢复。精确一次 (Exactly-Once) 语义——即每条记录对状态的影响恰好一次——是衡量流处理系统可靠性的关键指标,通常通过检查点屏障与事务型输出协调实现。
主流框架
当前主流的流处理框架包括Apache Flink(原生支持事件时间、精确一次语义,是事实上的标准)、Apache Kafka Streams(基于Kafka的轻量级库)以及Apache Spark Streaming(微批次模型)。Flink以其真正的逐条流处理和强大的状态后端在低延迟场景中占据优势;Spark Streaming则以与批处理统一的API和生态整合见长。
与批处理的对比
- 延迟:流处理为亚秒至秒级;批处理为分钟至小时级。
- 数据范围:流处理面向无界数据流;批处理面向有界数据集。
- 一致性:流处理侧重最终一致性与低延迟;批处理通常提供强一致性。
- Lambda架构:实践中常将流处理与批处理结合,以流层保证低延迟,批层保证准确性,但Kappa架构主张统一使用流处理简化系统。
流处理代表了大数据处理从"先存储后计算"向"先计算后存储"的范式迁移,是构建实时数据驱动应用的基础设施。