4. 回放数据源:采集方式与数据格式标准化
回放数据源是策略回放对比的“原材料”。数据采集的完整性、准确性以及格式的统一性,直接决定了回放结论的可信度。本章详细拆解三种主流采集方式及其数据格式标准化方案。
4.1 数据采集方式对比
根据业务场景与成本要求,风控网关通常采用以下三种方式采集回放数据:
| 采集方式 | 数据完整性 | 存储成本 | 回放延迟 | 典型场景 |
|---|---|---|---|---|
| 全量日志 | 100% 请求记录 | 高(TB级/日) | 分钟级(实时管道) | 核心策略灰度验证、监管审计 |
| 抽样日志 | 按比例(1%~10%) | 低 | 准实时 | 日常监控、快速迭代验证 |
| 离线Hive表 | 全量(T+1) | 中(压缩后) | 天级 | 历史回溯、长周期趋势分析 |
选型建议: 生产环境建议以“全量日志”为主管道,辅以“抽样日志”做快速验证;离线Hive表适用于月度/季度级的大规模策略调优,避免对在线存储造成压力。
4.2 全量日志采集链路
全量日志采集通常采用“网关埋点 → 消息队列 → 实时ETL → 存储”的架构,确保每条请求不丢失、不重复。
4.3 抽样日志策略
抽样日志适用于流量峰值时段或非核心策略的快速验证。常见的抽样策略包括:
- 固定比例抽样: 按请求ID哈希取模,如取1%流量(hash(requestId) % 100 == 0)。
- 分层抽样: 按用户等级、渠道、风险等级分层,保证各层均有代表性样本。
- 自适应抽样: 根据当前QPS动态调整抽样率,高负载时降低比例,低负载时提高比例。
注意: 抽样日志不适用于“零误杀”类策略验证。若策略仅影响千分之一流量,1%抽样可能完全漏掉异常样本,导致回放结论失真。
4.4 离线Hive表采集
离线Hive表通常作为“冷数据”存储,用于长周期(月度/季度)的策略回放对比。其采集流程如下:
- 数据导出: 从在线存储(Kafka/ES)按天导出原始日志到Hive分区表。
- 数据清洗: 剔除无效请求、补全缺失字段、统一时间戳格式。
- 分区存储: 按日期/小时分区,便于回放引擎按时间范围快速扫描。
- 压缩归档: 使用Snappy或Zstd压缩,降低存储成本。
4.5 数据格式标准化:JSON vs Protobuf
无论采用哪种采集方式,回放数据必须统一为标准化格式。当前业界主流方案为JSON和Protobuf,其对比见下表:
| 对比维度 | JSON | Protobuf |
|---|---|---|
| 可读性 | 高(纯文本,可直接查看) | 低(二进制,需工具反序列化) |
| 序列化大小 | 较大(含冗余字段名) | 小(压缩后约为JSON的30%~50%) |
| 解析性能 | 中等(需字符串解析) | 高(二进制解析,CPU开销低) |
| Schema演进 | 灵活(新增字段不影响旧数据) | 需预定义.proto文件,兼容性需设计 |
| 生态工具 | 丰富(几乎所有语言原生支持) | 需额外安装protoc编译器 |
4.6 标准化回放数据模型
无论底层采用JSON还是Protobuf,回放数据模型应包含以下核心字段:
{
"requestId": "req_20250321143000_abc123", // 全局唯一请求ID
"timestamp": 1742545800000, // 请求到达时间(毫秒时间戳)
"userId": "u_98765", // 用户标识
"riskLevel": "high", // 原始风险等级
"features": { // 特征字典
"deviceScore": 0.85,
"ipReputation": "bad",
"orderAmount": 2999.00
},
"strategyResult": { // 原始策略执行结果
"strategyId": "s_1001",
"action": "block",
"reasonCode": "R001"
},
"extInfo": {} // 扩展字段,用于未来兼容
}
标准化原则: 所有回放数据必须包含 requestId(去重)、timestamp(时序对齐)、features(特征快照)、strategyResult(原始决策)。缺失任一字段,回放引擎应主动拒绝加载并告警。
4.7 数据格式转换与兼容
在实际生产环境中,全量日志可能以Protobuf格式存储(节省带宽),而离线Hive表可能以JSON格式导出(便于分析)。回放引擎需内置格式转换层:
4.8 数据质量校验要点
在回放开始前,必须对数据源进行质量校验,避免“脏数据”污染回放结论:
- 完整性校验: 检查requestId是否唯一,timestamp是否在预期时间窗口内。
- 格式校验: 验证JSON结构是否合法,Protobuf反序列化是否成功。
- 字段一致性: 确保features字典中的key与策略模型输入特征一致。
- 时间对齐: 检查数据时间戳是否与回放窗口匹配,避免跨天数据错位。
最佳实践: 建议在回放数据采集阶段就完成格式标准化,避免在回放引擎中做实时转换。全量日志直接以Protobuf写入Kafka,离线Hive表导出时自动转换为JSON+压缩,减少回放引擎的转换开销。