DataPipeline
DataPipeline
数据管道是一组可重复执行的数据处理过程,负责把数据从源系统可靠地传递到分析、检索或机器学习系统。合格的数据管道不仅能够搬运数据,还应具备质量校验、失败重试、血缘追踪、幂等写入和运行监控能力。
基本结构
1 | flowchart LR |
批处理与流处理
批处理按固定时间窗口读取有界数据,适合日报、历史回算和计算成本敏感的任务。流处理持续消费事件,适合监控、推荐和实时风控。架构选择应由业务时效要求决定,不应仅以技术新旧作为判断依据。
| 维度 | 批处理 | 流处理 |
|---|---|---|
| 数据边界 | 有界 | 通常无界 |
| 延迟 | 分钟至小时 | 毫秒至分钟 |
| 重算 | 相对简单 | 需要回放机制 |
| 状态管理 | 较少 | 窗口与检查点较复杂 |
设计原则
- 幂等性:相同输入重复执行后,目标状态保持一致。
- 可恢复性:任务失败后能够从检查点继续,或安全地重新执行。
- 数据契约:明确字段类型、可空性、唯一性和兼容策略。
- 可观测性:记录吞吐量、延迟、失败率、数据新鲜度和质量指标。
- 数据血缘:能够定位一个输出字段来自哪个源字段以及经历了哪些转换。
简化实现
1 | from dataclasses import dataclass |
常见故障
- 重复消费导致重复记录,应通过业务主键、去重窗口或幂等写入解决。
- 上游字段变化导致静默错误,应在入口执行结构校验并设置兼容规则。
- 迟到数据使窗口统计不完整,应定义事件时间、水位线和允许迟到范围。
- 小文件数量失控导致存储与查询性能下降,应定期执行合并与分区整理。
- 只监控任务成功状态而不监控数据本身,会遗漏空数据和异常分布。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 EIGHTJIU!
评论





