实时(流式)数据管道要求毫秒到秒级的端到端延迟,测试策略与批量 ETL 有根本性差异。除了正确性验证,还需额外关注延迟、吞吐量、背压、状态恢复、Exactly-Once 语义等分布式系统的核心挑战。
| 维度 | 批量管道 | 实时管道 |
|---|---|---|
| 延迟 | 分钟~小时级 | 毫秒~秒级 |
| 数据边界 | 明确的批次边界 | 无界数据流 |
| 正确性 | 批次内数据完整即可 | 事件时间 + 水位线 + 窗口 |
| 状态 | 无状态/批内状态 | 持久化有状态算子 |
| 容错 | 重跑失败批次 | Checkpoint/Savepoint 恢复 |
| 可重复性 | 相同输入→相同输出 | 受事件时间乱序影响 |
| 语义级别 | 含义 | 测试方法 |
|---|---|---|
| At-Most-Once | 数据最多处理一次,可能丢失 | 模拟故障后检查计数是否减少 |
| At-Least-Once | 数据至少处理一次,可能重复 | 验证故障恢复后计数 ≥ 发送量 |
| Exactly-Once | 数据精确处理一次 | 故障注入后验证计数 = 发送量 |
MiniCluster(Flink 本地模式)注入固定时间戳和顺序的事件序列| 工具 | 用途 |
|---|---|
| Apache Kafka | 消息队列,测试 Lag、分区再均衡 |
| Apache Flink | 流计算引擎,Stateful Function 测试 |
| Spark Structured Streaming | 微批/持续流处理,与 Delta Lake 集成 |
| TestContainers | Docker 中启动 Kafka/Flink 用于集成测试 |
| Chaos Mesh / Litmus | 注入网络延迟、Pod Kill 等混沌实验 |
| Prometheus + Grafana | 监控端到端延迟、吞吐、Lag 指标 |