3、回放数据采集:数据源类型与一致性保障

回放数据采集是风控网关回放对比评审的基石。采集质量直接决定对比结论的可信度。本节从数据源类型、采集策略、一致性保障三个维度展开,帮助架构师构建可靠的数据采集层。

3.1 数据源类型

风控网关回放的数据源主要分为三类:实时流量、离线日志、数据库快照。三类数据源在时效性、完整性、存储成本上各有优劣,实际生产中通常组合使用。

数据源类型 典型来源 时效性 完整性 存储成本 适用场景
实时流量 Kafka / RocketMQ 消息队列 秒级 高(需确认消费位点) 高 线上问题复现、准实时对比
离线日志 Nginx / 网关 access log、业务日志文件 T+1 中(可能丢行、截断) 低 历史回归、批量压测
数据库快照 MySQL binlog、MongoDB oplog、HBase snapshot 分钟级 极高(事务级一致) 中 数据对账、审计追溯
架构建议: 推荐以实时流量为主数据源,离线日志作为降级兜底,数据库快照用于定期校验。三者形成“热-温-冷”三层数据采集体系。

3.2 采集策略

采集策略需要解决三个核心问题:采什么(字段范围)、怎么采(采样/全量)、采多少(流量比例)。

3.2.1 字段范围策略

  • 全量字段采集: 包含请求头、请求体、响应体、网关内部上下文(路由结果、风控标签、耗时)。适用于首次建立回放基线。
  • 最小字段采集: 仅采集请求唯一标识(traceId)、路由 key、风控决策结果。适用于长期持续对比,降低存储压力。
  • 动态字段采集: 根据规则引擎动态决定采集哪些字段。例如:命中某条风控规则时,额外采集设备指纹。

3.2.2 采样策略

策略名称 描述 适用场景
全量采集 100% 流量进入采集管道 核心交易链路、审计合规
固定比例采样 按百分比(如 10%)随机抽取 非核心链路、压测预热
自适应采样 根据 QPS 动态调整采样率,高流量时降低比例 大促、秒杀等高并发场景
特征采样 按用户 ID、商户 ID、风控标签等维度定向采集 特定客群分析、灰度验证

3.2.3 流量比例控制

通过网关侧配置中心下发采样开关,支持按接口、按来源、按用户分桶。典型配置示例:

# 风控网关采样配置(YAML 格式)
sampling:
  enabled: true
  default_ratio: 0.1          # 默认 10%
  overrides:
    - path: /api/v1/payment
      ratio: 1.0              # 支付接口全量
    - path: /api/v1/query
      ratio: 0.01             # 查询接口 1%
  user_bucket:
    - key: user_id
      buckets: [0-999]        # 只采集 user_id 哈希后 0-999 的用户

3.3 一致性保障

数据一致性是回放对比的生命线。采集阶段一旦出现数据丢失、乱序、重复,后续对比将失去意义。一致性保障需要覆盖采集、传输、存储三个环节。

核心原则: 采集端保证“至少一次”语义,消费端做幂等去重;传输层使用事务消息或两阶段提交;存储层建立唯一索引。

3.3.1 采集端一致性

  • 位点管理: 记录每次采集的偏移量(offset),支持断点续传。Kafka 消费者组配合手动提交。
  • 去重标识: 每条回放数据生成全局唯一 ID(traceId + 时间戳 + 随机数),下游按 ID 去重。
  • 超时重试: 采集写入失败时,按指数退避策略重试 3 次,仍失败则写入死信队列。

3.3.2 传输层一致性

  • 事务消息: 使用 RocketMQ 事务消息,确保“采集-发送”原子操作。
  • 校验和: 每条消息携带 CRC32 校验码,消费端校验数据完整性。
  • 顺序保障: 同一 traceId 的消息发送到同一分区,保证回放顺序与生产一致。

3.3.3 存储层一致性

  • 唯一约束: 回放数据表对 traceId + 时间戳建立联合唯一索引。
  • 数据校验: 定时任务扫描采集表与源数据表,比对记录数、关键字段哈希值。
  • 补偿机制: 发现缺失数据时,从离线日志或数据库快照中补采。

3.4 数据采集架构总览

下图展示了风控网关回放数据采集的整体架构,涵盖三类数据源、采集管道、一致性保障组件。

风控网关回放数据采集架构图 风控网关回放数据采集架构 数据源层 实时流量 Kafka / RocketMQ 消息队列 离线日志 Nginx / 网关 access log 数据库快照 MySQL binlog / MongoDB oplog 采集管道层 采样器 全量/比例/自适应 序列化器 Protobuf / JSON 发送器 事务消息 / 重试 死信队列 失败重试 3 次后 存储层 回放数据存储 Elasticsearch / HBase / ClickHouse 一致性保障组件 位点管理 | 去重标识 | 校验和 | 唯一约束 | 补偿机制

3.5 采集策略对比与选型建议

不同业务场景对采集策略的要求差异较大。下表总结了常见场景下的推荐策略组合:

业务场景 推荐数据源 采样策略 字段范围 一致性要求
线上故障排查 实时流量 全量(按 traceId 过滤) 全量字段 极高(不能丢)
版本回归测试 离线日志 固定比例 10% 最小字段 中(允许少量丢失)
风控模型迭代 数据库快照 特征采样(按风控标签) 动态字段 高(需完整特征)
大促压测 实时流量 + 离线日志 自适应采样 最小字段 中(关注趋势)
审计合规 数据库快照 全量 全量字段 极高(不可篡改)
常见陷阱: 不要在生产链路中直接采集数据库快照作为回放主数据源,会引入额外的 IO 压力。建议使用 binlog 订阅或从库快照,避免影响主库性能。

3.6 数据一致性校验流程

采集完成后,需要通过校验流程确认数据一致性。下图展示了从采集到校验的完整闭环:

数据一致性校验流程 数据一致性校验流程 采集数据入库 定时校验任务 比对记录数 比对字段哈希 一致? 校验通过 ✓ 触发补偿机制 从离线日志补采 更新采集记录 重新入库

3.7 关键指标与监控

采集阶段需要建立以下监控指标,确保数据质量可观测:

  • 采集延迟: 从数据产生到进入回放存储的时间差,目标 < 30 秒(实时流量)或 < 10 分钟(离线日志)。
  • 采集成功率: 成功写入回放存储的记录数 / 源数据记录数,目标 > 99.9%。
  • 数据重复率: 去重后记录数 / 原始记录数,目标 < 0.01%。
  • 校验通过率: 定时校验任务中一致记录数 / 总校验记录数,目标 > 99.99%。
最佳实践: 在采集管道中埋入“探针记录”,每隔 1000 条插入一条已知结果的测试数据,下游校验时通过探针快速判断采集链路是否正常。