1. 实时数据分析系统全景

实时数据分析系统要解决的核心问题,不是“把数据存起来再慢慢算”,而是让业务事件在产生后的秒级到亚秒级内完成采集、传输、处理、存储与查询,并把结果反馈到监控看板、告警、风控或推荐等下游动作中。它与传统批处理的差别,主要体现在三个维度:时延目标(分钟/小时级 vs 秒级/毫秒级)、数据形态(有界历史数据集 vs 无界持续事件流)、计算语义(一次全量计算 vs 持续增量计算 + 窗口聚合)。理解这三点,才能正确选择 AWS 上的服务组合,而不是把批处理架构简单“加速”。

本课程的目标是让读者具备端到端设计与部署能力:能够根据业务时延与一致性要求,选型采集、缓冲、计算、存储、查询各层服务;能够定义事件 schema 与分区键;能够配置窗口、水位线与乱序容忍策略;能够用基础设施即代码方式部署并验证整条链路;能够在出现延迟、重复、丢数时定位到具体环节。学完本课程,你应当能独立交付一条可观测、可扩展、成本可控的实时数据管道。

AWS 实时数据服务矩阵

AWS 并没有一个“实时分析一体机”,而是由多个服务各司其职。按数据流方向,可划分为五层:

  • 采集/接入层:Kinesis Data Streams(KDS)提供自定义吞吐的持久化流;MSK(托管 Kafka)适合已有 Kafka 生态或需要多消费者组重放;IoT Core 面向设备侧 MQTT 接入;API Gateway + Lambda 适合低频事件。
  • 缓冲与传输层:KDS/MSK 承担削峰填谷与多订阅分发;Kinesis Data Firehose 负责免运维地投递到 S3、Redshift、OpenSearch。
  • 计算层:Managed Service for Apache Flink 处理有状态窗口聚合、乱序与 exactly-once;Lambda 适合轻量无状态转换;Glue Streaming 适合 Spark 生态的微批 ETL。
  • 存储层:S3 作为数据湖底座存放原始与加工后数据;Timestream 面向时序指标;DynamoDB 存放需低延迟点查的最新状态。
  • 查询与消费层:OpenSearch 支撑日志检索与聚合看板;Athena 对 S3 做交互式 SQL;QuickSight 提供可视化;CloudWatch 承载指标告警。

选型的关键判断依据是:时延要求决定计算引擎(Flink 亚秒级、Lambda 百毫秒级、Glue 分钟级微批);是否需要重放与多消费者决定用 KDS 还是 Firehose;查询模式决定落 OpenSearch 还是 Timestream 还是 S3+Athena。下面这张图给出了一条典型端到端架构的总览,也是本课程后续章节将逐层展开的对象。

AWS 实时数据分析端到端架构总览 采集 / 接入 应用埋点 IoT 设备 日志 / CDC API 事件 缓冲 / 传输 Kinesis Data Streams MSK (Kafka) Firehose 分区键 / 分片 实时计算 Managed Flink Lambda Glue Streaming 窗口 / 水位线 存储 S3 数据湖 Timestream DynamoDB OpenSearch 查询消费 Athena QuickSight CloudWatch 告警 / 风控 端到端时延预算(示例目标) 采集 ≤ 200ms → 缓冲写入 ≤ 100ms → 窗口计算 ≤ 1s → 落库 ≤ 500ms → 看板刷新 ≤ 2s ≈ 总时延 3~4s 关键设计点 • 分区键决定并行度与热点 • 窗口类型:滚动 / 滑动 / 会话 • 水位线容忍乱序与迟到数据 • 检查点保障故障恢复一致性 • 幂等写入避免重复计数 典型业务场景 • 实时风控:交易欺诈识别 • 实时监控:指标异常告警 • 实时推荐:用户行为反馈 • 实时看板:运营大屏 • 日志分析:安全审计 可观测与验证 • IteratorAge:消费滞后 • 检查点时长与失败率 • 端到端延迟采样 • 记录数对账(输入 vs 输出) • 告警阈值与恢复验证

典型业务场景与选型对照

不同场景对时延、吞吐、一致性的要求差异很大,选型不能一刀切。下表给出三类常见场景的对照,参数为教学示例,实际需按业务压测确定。

场景时延目标推荐缓冲推荐计算推荐存储/查询
实时风控< 500msKDS(按用户ID分区)Managed FlinkDynamoDB + Lambda 决策
指标监控告警1~5sKDS / FirehoseFlink 或 LambdaTimestream + CloudWatch
日志检索分析5~30sFirehoseGlue StreamingS3 + OpenSearch + Athena

端到端数据流的关键环节

以“电商订单实时风控”为例,一条事件从产生到决策的完整路径如下:

  1. 事件产生:下单服务在订单创建时生成 JSON 事件,包含 order_id、user_id、amount、event_time、ip 等字段。
  2. 写入流:生产者以 user_id 为分区键调用 PutRecord,保证同一用户的事件进入同一分片,便于按用户做有状态聚合。
  3. 流计算:Flink 作业消费 KDS,按 user_id 做 5 分钟滚动窗口,统计该用户近 5 分钟订单数与金额总和;当金额总和超过阈值(示例:5000 元)时输出风险事件。
  4. 状态与容错:Flink 每 60 秒做一次检查点写入 S3,故障时从最近检查点恢复,KDS 位点由检查点统一管理,保证 at-least-once 或 exactly-once(取决于 sink 实现)。
  5. 结果落库:风险事件写入 DynamoDB 供决策服务低延迟点查,同时写入 OpenSearch 供运营检索。
  6. 可观测:CloudWatch 监控 KDS 的 IteratorAge、Flink 的检查点时长与失败次数、DynamoDB 的写入延迟;当 IteratorAge 持续超过 60 秒时触发告警。
判断链路是否健康的三个信号:① 输入记录数与输出记录数在窗口内基本对账;② 端到端延迟采样值稳定在目标范围内;③ 检查点持续成功且时长无持续增长。任一异常,优先排查分区热点、消费者并行度不足或 sink 写入瓶颈。
常见误区:把 Firehose 当作可重放的流缓冲使用。Firehose 是投递服务,不保证多消费者独立消费与任意重放;需要重放、多订阅或自定义消费位点时,应选择 KDS 或 MSK。