批处理是在预定时间处理大量数据,而流式处理则对动态数据进行操作,分析实时发生或刚发生不久的事件。可以将其比作持续监控河流流量,而不是等待一整天后测量大水箱中收集的水量。什么是流式处理?流式处理是一种数据处理方式,旨在用于处理连续、无边界的数据流。流式处理系统不是将数据收集成批次,而是逐事件地或以非常小的、基于时间的“微批次”摄取和处理数据。这使得能够进行近乎实时的分析和响应。设想一下跟踪网站上的用户点击。在批处理系统中,你可能需要等到小时或天结束,收集所有点击数据,然后进行分析。而使用流式处理,每次点击(或一小批点击)都可以在发生后的毫秒或几秒内得到处理。为何采用流式处理?流式处理的主要优点是它能提供即时信息并实现快速响应。在时效性重要的场景中,它不可或缺:实时分析: 为显示精确到秒的指标(如网站流量、应用程序性能或销售数据)的仪表盘提供支持。欺诈识别: 在潜在欺诈交易(如信用卡使用)发生时进行识别,从而能够即时阻止它们。物联网 (IoT): 实时监控传感器数据(温度、压力、位置),以发现异常或触发操作。例如,根据当前温度读数调整恒温器。日志监控: 分析应用程序或系统生成时的日志,以立即发现错误或安全威胁。告警系统: 根据在传入数据流中检测到的特定模式或阈值触发通知。流式处理的运作方式(概述)数据摄取: 数据从不同来源(例如应用程序日志、用户活动事件、传感器读数、交易系统)持续抵达流式处理系统。处理: 流式处理引擎(如 Apache Flink、Apache Kafka Streams 或 Spark Streaming)消费数据流。它对每个传入事件或微批次进行转换、聚合或分析。窗口处理(可选但常用): 通常,分析需要在一段时间内进行。流式处理系统可以将数据分组到时间窗口中(例如,“计算过去1分钟的平均传感器读数”),以对近期数据段执行计算。输出: 处理结果被发送到“接收器”,这可能是一个实时仪表盘、告警机制、另一个数据流或用于后续使用的数据库。digraph StreamProcessingFlow { rankdir=LR; node [style=filled, fontname="Helvetica", fontsize=10]; edge [fontsize=9]; subgraph cluster_source { label = "数据来源"; bgcolor="#e9ecef"; Log [label="应用日志", shape=box, fillcolor="#a5d8ff"]; Sensor [label="物联网传感器", shape=box, fillcolor="#a5d8ff"]; Clicks [label="用户点击", shape=box, fillcolor="#a5d8ff"]; } Stream [label="连续数据流", shape=cds, fillcolor="#99e9f2", fontname="Helvetica", fontsize=11]; Processor [label="流式处理引擎\\n(转换、聚合、分析)", shape=component, fillcolor="#b2f2bb", fontname="Helvetica", fontsize=10]; subgraph cluster_sink { label = "输出/接收器"; bgcolor="#e9ecef"; Dashboard [label="实时仪表盘", shape=box, fillcolor="#ffec99"]; Alert [label="告警系统", shape=box, fillcolor="#ffec99"]; Database [label="数据库/存储", shape=cylinder, fillcolor="#ffec99"]; } {Log, Sensor, Clicks} -> Stream [arrowhead=none]; Stream -> Processor; Processor -> {Dashboard, Alert, Database}; }一个图示,展示了典型流式处理设置中数据从来源到处理再到各种输出的流程。流式处理中的延迟与吞吐量数据处理中经常提及两个重要的性能衡量指标:延迟: 单个数据事件到达后被处理所需的时间。流式处理系统通常目标是极低的延迟(毫秒或秒级)。吞吐量: 在给定时间段内可以处理的数据量。虽然流系统需要良好的吞吐量,但它们的主要侧重点通常是最小化延迟。批处理通常优化高吞吐量(高效处理大量数据),通常接受更高的延迟。流式处理优先考虑低延迟,实现近乎实时的交互,有时与在更长时间内处理相同总量数据的批处理系统相比,会牺牲一些吞吐量。流式处理中的挑战虽然功能强大,但流式处理也有其自身需要考虑的地方。处理因网络延迟而乱序到达的事件、确保恰好一次处理(这样数据既不会丢失也不会被处理两次),以及管理计算所需的中间状态(如运行总计或窗口平均值),这些都要求在流式处理框架内进行精心设计。对于本入门课程来说,了解到这些挑战存在并由专业工具和技术处理就足够了。总之,流式处理提供了在数据生成时进行分析和响应的能力,通过满足需要即时信息和行动的应用场景,对批处理进行了补充。它是构建响应迅速、数据驱动的应用程序的一种基本方法。