3. 数据采集:行情数据源、坏账记录表、实时流数据接入方式
哨兵告警系统的阈值调优依赖高质量、低延迟的数据输入。本章聚焦三类核心数据源的采集策略:行情数据源(市场快照与K线)、坏账记录表(离线标签与回填)、实时流数据(交易事件与风险信号)。三类数据在接入方式、时效性要求和清洗逻辑上存在显著差异,需分别设计采集管道。
3.1 行情数据源接入
行情数据是计算实时坏账率的基础输入,通常包含买卖盘口、最新成交价、24小时成交量等字段。接入方式分为REST轮询与WebSocket订阅两种模式。
| 对比维度 | REST 轮询 | WebSocket 订阅 |
|---|---|---|
| 延迟 | 500ms – 2s(受轮询间隔限制) | < 50ms(全双工推送) |
| 资源消耗 | 高(频繁HTTP连接/断开) | 低(长连接复用) |
| 适用场景 | 非核心资产、低频校验 | 核心交易对、实时告警 |
| 数据完整性 | 可能丢失中间快照 | 连续流式,断线可重连补数 |
生产建议:核心行情(如BTC/USDT、ETH/USDT)必须使用WebSocket接入;非活跃交易对可降级为REST轮询,轮询间隔建议 ≤ 1s。
3.2 坏账记录表结构
坏账记录表是离线标签的核心来源,用于标记已确认的违约订单。表结构需包含时间戳、资产对、订单ID、坏账金额、坏账类型等关键字段。以下为标准化建表语句示例:
CREATE TABLE bad_debt_records (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
asset_pair VARCHAR(20) NOT NULL COMMENT '交易对,如 BTC/USDT',
order_id VARCHAR(64) NOT NULL COMMENT '订单唯一标识',
bad_debt_amount DECIMAL(20,8) NOT NULL COMMENT '坏账金额(计价币种)',
bad_debt_type TINYINT NOT NULL COMMENT '1-逾期未还 2-强制平仓亏损 3-欺诈',
occurred_at DATETIME NOT NULL COMMENT '坏账发生时间',
settled_at DATETIME DEFAULT NULL COMMENT '清算完成时间',
status TINYINT DEFAULT 0 COMMENT '0-待复核 1-已确认 2-已核销',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_asset_pair (asset_pair),
INDEX idx_occurred_at (occurred_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
避坑提醒:坏账记录表必须保留原始发生时间(occurred_at)而非入库时间,否则在回测调优时会导致时间错位,使阈值验证结果失真。
3.3 实时流数据接入方式
实时流数据包含交易流水、风控事件、用户行为等高频信号。接入方式需支持高吞吐、低延迟、断线重连与消息回溯。主流方案对比:
- Kafka 原生接入:适合内部微服务架构,通过生产者-消费者模式解耦,支持分区并行消费与 offset 回溯。
- Flink 实时计算:在 Kafka 之上构建 DataStream,支持窗口聚合、CEP 模式匹配,直接输出坏账率指标。
- Redis Streams:适合轻量级场景,内存存储,延迟极低,但持久化与回溯能力弱于 Kafka。
以下为基于 Kafka + Flink 的实时流接入架构图,展示从行情源到哨兵告警的完整数据管道:
3.4 数据接入质量校验
数据接入后必须通过质量校验才能进入哨兵计算管道。校验规则分为三个等级:
- 格式校验:字段非空、数值范围、时间戳合法性(拒绝未来时间 > 5min 的数据)。
- 业务校验:坏账金额 > 0、订单ID在订单表中存在、资产对为已上线交易对。
- 时序校验:事件时间单调递增(允许乱序但不超过水位线阈值),重复数据去重。
关键指标:数据接入延迟(P99 < 200ms)、数据丢失率(< 0.01%)、坏账记录回填时效(T+1 内完成)。这三个指标直接影响阈值调优的实时性与准确性。
3.5 接入方式选型矩阵
根据数据源特征与业务要求,推荐以下接入组合:
| 数据源类型 | 推荐接入方式 | 中间件 | 数据保留策略 |
|---|---|---|---|
| 行情快照 | WebSocket 订阅 | Redis Streams / Kafka | 保留最近 1 小时快照 |
| 交易流水 | Kafka 生产者 | Kafka(3副本) | 保留 7 天,支持回溯 |
| 坏账记录 | 离线批量导入 + CDC | MySQL Binlog + Kafka | 永久保留,按时间分区 |
| 风控事件 | REST 回调 + 队列 | RabbitMQ / Kafka | 保留 24 小时,消费即确认 |