第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:手工补录流程

  1. 确认补录范围:从异常记录表筛选状态=“失败待补录”的任务,确定丢失的时间窗口。
  2. 执行补录:通过手工补录工具或API发起补录请求。
  3. 校验补录结果:对比补录前后数据记录数及校验和。
  4. 关闭记录:在异常记录表中将状态更新为“已补录”,填写补录执行人和时间。
注意:手工补录应在源端数据仍保留的时间窗口内操作(通常为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_manualcompleted_by_manual
operator手工补录人(自动重试时留空)张三
comment备注源端重启后补录成功

输入输出物

类别名称说明
输入采集任务元数据任务ID、源端地址、时间窗口
输入采集错误日志上次采集的退出码、stderr输出
输出重试后采集数据重试成功写入目标存储的数据
输出异常记录表(更新)包含最新的异常处理状态
输出告警通知(可选)当重试全部失败或出现D/E类异常时发出

责任边界

  • 数据采集组:配置重试参数、执行自动重试、维护异常记录表。
  • 数据质量组:审核手工补录请求、校验补录后的数据一致性。
  • 运维组:恢复源端服务、处理权限问题、释放资源限制。
  • 业务方:确认补录的时间窗口及数据优先级。

记录材料

  • 数据采集异常记录表(数据库表或电子表格,字段如上)
  • 手工补录操作日志(包含操作人、时间、补录数据量)
  • 重试策略变更审批单(若修改max_retries等参数)

异常处理

异常叠加风险:当同一源端连续出现5次以上瞬态故障时,自动重试可能加剧源端负载。此时应暂停重试并触发“熔断”模式,转入手工处理。
  • 重试风暴:限制单个任务的重试频率(全局每分钟最多10次重试)。
  • 数据重复:重试前检查目标存储是否已存在相同时间戳的数据(去重键:task_id + partition_key)。
  • 手工补录遗漏:每日巡检异常记录表中状态仍为“失败待补录”的任务,超过24小时未处理则升级告警。

验收标准

  1. 所有采集失败任务均在异常记录表中留下完整记录。
  2. 瞬时故障类(A/B)自动重试成功率≥95%(排除源端实际不可用的情况)。
  3. 手工补录操作满足“数据完整性校验通过”后方可关闭记录。
  4. 异常记录表数据可追溯至至少90天前的历史。
  5. 重试策略参数变更需通过变更管理流程,并记录变更日志。
数据采集异常处理流程 采集任务执行 成功? 成功 记录成功,结束 失败 原因分类 (A~E) 瞬态/维护/格式/权限/资源 可重试? A/B 自动重试(退避算法) 重试成功? 成功 转入手工补录流程 失败 C/D/E 触发告警,挂起任务 要点 重试前需检查目标去重 手工补录须经审批 记录表必须100%填报