1. 实时数据处理系统概述

实时数据处理系统是一类在数据产生后极短时间内完成采集、传输、计算与输出的系统。它的核心目标不是“把数据存下来慢慢算”,而是让数据在仍然具有决策价值的时间窗口内被处理并产生结果。这里的“实时”并不等于零延迟,而是指端到端延迟满足业务设定的时限:例如风控要求 100 毫秒内给出判断,设备告警要求 1 秒内触发,运营看板允许 5 秒级更新。因此,实时系统的第一设计动作不是选组件,而是明确延迟目标与数据时效边界。

实时处理与批处理的关键差异

批处理把一段时间的数据积累成有限数据集,按小时或按天统一计算,优点是吞吐高、实现简单、结果可重跑;缺点是结果滞后,无法响应正在发生的事件。实时处理则把数据视为连续到达、永不结束的流,计算逻辑常驻运行,每来一条或一小批数据就更新结果。两者最本质的区别在于:批处理面向“有界数据集”,实时处理面向“无界数据流”。

这种差异会传导到系统设计上。批处理可以等数据全部到齐再算,实时处理必须处理乱序、迟到和重复数据;批处理失败后通常整批重跑,实时处理需要依靠检查点、水位线和幂等写入来保证一致性。下面这张图对比了两者在数据流、延迟和结果更新方式上的差异,并给出 Azure 上对应的服务落点。

批处理 vs 实时处理:数据流与延迟对比 批处理(有界数据集) 数据源 按小时/天 落盘存储 批量计算 延迟:分钟 ~ 小时级 结果:周期性全量刷新,可重跑 Azure 对应服务 • Azure Data Factory(调度编排) • Azure Synapse / Databricks(批量计算) • ADLS Gen2(分层存储) 实时处理(无界数据流) 事件源 消息队列 持续缓冲 流计算 常驻运行 延迟:毫秒 ~ 秒级 结果:增量持续更新,需处理乱序/重复 Azure 对应服务 • Azure Event Hubs(事件接入) • Azure Stream Analytics / Spark(流计算) • Azure Functions(事件驱动处理)

典型应用场景

实时处理的价值集中在“时间敏感 + 持续到达”的场景。常见有四类:

  • 实时监控与告警:IoT 设备温度、振动、压力持续上报,超过阈值立即触发工单或停机,而不是等日报发现。
  • 实时风控与反欺诈:支付、登录、下单事件在百毫秒内完成规则与模型评分,拦截异常交易。
  • 实时推荐与个性化:用户点击、浏览、加购行为实时更新画像,影响下一次页面展示。
  • 实时运营看板:订单量、成交额、在线人数按秒级刷新,支撑运营即时决策。

这些场景的共同点是:数据一旦过期,价值迅速衰减。判断一个业务是否真的需要实时处理,可以问三个问题——结果晚 1 分钟是否会造成损失?数据是否持续不断产生?是否需要基于最新状态做自动动作?若答案都是“是”,才值得引入实时链路。

Azure 实时数据服务全景

Azure 的实时数据服务可以按“接入—传输—计算—存储—输出”五段来理解,每一段都有明确职责,选型时先定位数据处在哪一段。

环节代表服务核心职责典型参数关注点
接入Azure Event Hubs、IoT Hub高吞吐接收事件,提供分区缓冲吞吐单位、分区数、保留期
传输Event Hubs、Service Bus解耦生产与消费,削峰填谷分区键、消费组、死信队列
计算Stream Analytics、Azure Databricks、Functions窗口聚合、过滤、关联、评分窗口长度、水位线、并行度
存储Cosmos DB、ADLS Gen2、Azure SQL保存热结果与冷明细一致性级别、分区键、TTL
输出Power BI、SignalR、Logic Apps看板刷新、推送、触发动作刷新频率、推送延迟

以“工厂设备温度监控”为例,一条最小可用链路是:设备通过 IoT Hub 上报温度,Event Hubs 承接事件流,Stream Analytics 用 30 秒滚动窗口计算每台设备的平均温度,当平均值超过 80°C 时写入 Cosmos DB 并触发 Logic Apps 发送告警。这里 30 秒窗口、80°C 阈值都是示例参数,实际需按设备采样频率和工艺要求调整。判断链路是否达标,看三个指标:端到端延迟是否小于业务时限、告警是否在窗口结束后及时触发、断流恢复后结果是否仍然正确。

实时系统的“实时”是相对业务时限而言的。先写清延迟目标(如 P95 小于 2 秒),再反推窗口长度、分区数和计算并行度,比先选服务更有效。

设计实时系统时要先想清楚的事

第一,明确时间语义。事件时间(数据实际发生时刻)与处理时间(系统处理时刻)在乱序场景下差异很大,窗口聚合应优先按事件时间并设置水位线容忍迟到。第二,明确一致性要求。是“至少一次”可接受,还是必须“精确一次”?这决定是否需要检查点与幂等写入。第三,明确扩展方式。实时链路通常按分区水平扩展,分区键选择不当会造成热点。第四,明确失败处理。消费失败是重试、跳过还是进死信队列,必须提前定义,否则故障时会丢数据或阻塞。