第3章 数据采集异常处理
数据采集过程中不可避免地会遇到网络抖动、源端不可用、格式异常等问题。本章定义采集中断或失败时的标准化处置流程,涵盖原因分类、自动重试策略、人工补录操作及异常记录表填写规范,确保采集链路具备自愈能力和可追溯性。
适用场景
- 数据采集任务返回非零退出码或HTTP状态码≥400
- 采集代理长时间未响应(超时阈值>30s)
- 源端数据源临时维护、连接数耗尽或证书过期
- 数据格式校验失败(如JSON/CSV结构异常)
- 采集过程中断后需要恢复补录的历史窗口数据
前置条件
- 采集任务已注册至调度中心,任务ID、源端连接信息、目标存储路径已记录
- 重试策略表(max_retries, backoff_base, timeout)已预配置
- 手工补录工具或API端点可用,操作人员具有“数据补录”角色权限
- 异常记录表(表结构见下)已初始化,至少包含任务ID、时间戳、错误码、状态等字段
操作步骤
步骤1:采集失败原因识别与分类
当采集任务返回错误时,首先根据错误码和日志摘要将原因归入以下类别:
| 类别 | 典型错误 | 处理方式 |
|---|---|---|
| A – 瞬时网络故障 | Connection refused, timeout | 自动重试 |
| B – 源端维护 | 503 Service Unavailable, HTTP 429 | 延迟重试 + 通知 |
| C – 数据格式异常 | Parse error, schema mismatch | 停止重试,需人工介入 |
| D – 权限/凭据失效 | 401 Unauthorized, 403 Forbidden | 触发告警,禁止自动重试 |
| E – 资源限制 | Disk full, memory limit | 挂起任务,等待运维释放资源 |
步骤2:自动重试策略执行
对于类别A和B的异常,按以下退避算法自动重试:
# 重试策略配置示例
MAX_RETRIES = 3
BASE_DELAY = 5 # 秒
BACKOFF_FACTOR = 2 # 指数退避
delay = min( BASE_DELAY * (BACKOFF_FACTOR ** attempt), 300 )
sleep( delay )
retry_task( task_id )
重试期间不阻塞其他采集任务;每次重试后更新异常记录表的“重试次数”和“最后一次重试时间”。若所有重试均失败,标记任务为“失败待补录”。
步骤3:手工补录流程
- 确认补录范围:从异常记录表筛选状态=“失败待补录”的任务,确定丢失的时间窗口。
- 执行补录:通过手工补录工具或API发起补录请求。
- 校验补录结果:对比补录前后数据记录数及校验和。
- 关闭记录:在异常记录表中将状态更新为“已补录”,填写补录执行人和时间。
注意:手工补录应在源端数据仍保留的时间窗口内操作(通常为7天),超期需申请源端日志恢复。
步骤4:填写异常记录表
无论自动重试成功还是手工补录完成,均需将本次异常写入记录表:
| 字段 | 说明 | 示例 |
|---|---|---|
| task_id | 采集任务唯一标识 | ACQ_20250321_001 |
| error_time | 首次发现异常的时间 | 2025-03-21 14:30:22 |
| error_category | 上述A~E之一 | A |
| error_message | 日志摘要或错误码 | Connection refused: 10.0.1.5:8080 |
| retry_count | 实际重试次数 | 2 |
| result | 最终状态:success/failed/completed_by_manual | completed_by_manual |
| operator | 手工补录人(自动重试时留空) | 张三 |
| comment | 备注 | 源端重启后补录成功 |
输入输出物
| 类别 | 名称 | 说明 |
|---|---|---|
| 输入 | 采集任务元数据 | 任务ID、源端地址、时间窗口 |
| 输入 | 采集错误日志 | 上次采集的退出码、stderr输出 |
| 输出 | 重试后采集数据 | 重试成功写入目标存储的数据 |
| 输出 | 异常记录表(更新) | 包含最新的异常处理状态 |
| 输出 | 告警通知(可选) | 当重试全部失败或出现D/E类异常时发出 |
责任边界
- 数据采集组:配置重试参数、执行自动重试、维护异常记录表。
- 数据质量组:审核手工补录请求、校验补录后的数据一致性。
- 运维组:恢复源端服务、处理权限问题、释放资源限制。
- 业务方:确认补录的时间窗口及数据优先级。
记录材料
- 数据采集异常记录表(数据库表或电子表格,字段如上)
- 手工补录操作日志(包含操作人、时间、补录数据量)
- 重试策略变更审批单(若修改max_retries等参数)
异常处理
异常叠加风险:当同一源端连续出现5次以上瞬态故障时,自动重试可能加剧源端负载。此时应暂停重试并触发“熔断”模式,转入手工处理。
- 重试风暴:限制单个任务的重试频率(全局每分钟最多10次重试)。
- 数据重复:重试前检查目标存储是否已存在相同时间戳的数据(去重键:task_id + partition_key)。
- 手工补录遗漏:每日巡检异常记录表中状态仍为“失败待补录”的任务,超过24小时未处理则升级告警。
验收标准
- 所有采集失败任务均在异常记录表中留下完整记录。
- 瞬时故障类(A/B)自动重试成功率≥95%(排除源端实际不可用的情况)。
- 手工补录操作满足“数据完整性校验通过”后方可关闭记录。
- 异常记录表数据可追溯至至少90天前的历史。
- 重试策略参数变更需通过变更管理流程,并记录变更日志。