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 的实时流接入架构图,展示从行情源到哨兵告警的完整数据管道:

实时流数据接入架构 实时流数据接入架构(Kafka + Flink) 行情 WebSocket 交易流水 Kafka 风控事件队列 Flink DataStream 接入层(反压监控 / 水位线对齐) 实时坏账率计算(滑动窗口 5min / 1h) 哨兵告警引擎(阈值匹配 / 通知分发)

3.4 数据接入质量校验

数据接入后必须通过质量校验才能进入哨兵计算管道。校验规则分为三个等级:

  1. 格式校验:字段非空、数值范围、时间戳合法性(拒绝未来时间 > 5min 的数据)。
  2. 业务校验:坏账金额 > 0、订单ID在订单表中存在、资产对为已上线交易对。
  3. 时序校验:事件时间单调递增(允许乱序但不超过水位线阈值),重复数据去重。
关键指标:数据接入延迟(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 小时,消费即确认