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 数据采集架构总览
下图展示了风控网关回放数据采集的整体架构,涵盖三类数据源、采集管道、一致性保障组件。
3.5 采集策略对比与选型建议
不同业务场景对采集策略的要求差异较大。下表总结了常见场景下的推荐策略组合:
| 业务场景 | 推荐数据源 | 采样策略 | 字段范围 | 一致性要求 |
|---|---|---|---|---|
| 线上故障排查 | 实时流量 | 全量(按 traceId 过滤) | 全量字段 | 极高(不能丢) |
| 版本回归测试 | 离线日志 | 固定比例 10% | 最小字段 | 中(允许少量丢失) |
| 风控模型迭代 | 数据库快照 | 特征采样(按风控标签) | 动态字段 | 高(需完整特征) |
| 大促压测 | 实时流量 + 离线日志 | 自适应采样 | 最小字段 | 中(关注趋势) |
| 审计合规 | 数据库快照 | 全量 | 全量字段 | 极高(不可篡改) |
常见陷阱: 不要在生产链路中直接采集数据库快照作为回放主数据源,会引入额外的 IO 压力。建议使用 binlog 订阅或从库快照,避免影响主库性能。
3.6 数据一致性校验流程
采集完成后,需要通过校验流程确认数据一致性。下图展示了从采集到校验的完整闭环:
3.7 关键指标与监控
采集阶段需要建立以下监控指标,确保数据质量可观测:
- 采集延迟: 从数据产生到进入回放存储的时间差,目标 < 30 秒(实时流量)或 < 10 分钟(离线日志)。
- 采集成功率: 成功写入回放存储的记录数 / 源数据记录数,目标 > 99.9%。
- 数据重复率: 去重后记录数 / 原始记录数,目标 < 0.01%。
- 校验通过率: 定时校验任务中一致记录数 / 总校验记录数,目标 > 99.99%。
最佳实践: 在采集管道中埋入“探针记录”,每隔 1000 条插入一条已知结果的测试数据,下游校验时通过探针快速判断采集链路是否正常。