XTU数据处理与存储方案。简言之,数据分离线与实时两部分。离线数据经处理后,存储在hive里,用于构建机器学习训练样本。实时数据经处理后,存在redis里,用于机器学习实时推理。数据来源是消息队列,处理手段主要是基于spark的数据清洗和时序特征提取。


总体架构设计

架构目标

  1. 实时计算路线

    • Spark Streaming 实时消费 Kafka 数据,计算时序特征,存入 Redis,供模型推理使用。
    • 推理结果存入告警系统。
  2. 离线计算路线

    • Spark Streaming 消费 Kafka 数据流,进行数据清洗和时序特征提取后直接存入 Hive,供模型训练和分析使用。
    • Hive 中的特征数据用于离线训练机器学习模型,定期更新推理系统中的模型。

数据流向示意图

                     ┌───────────────────────────────┐
                     │        XTU 原始上报数据       │
                     └────────────┬──────────────────┘
                                   │
                         **数据接入 Kafka**
                                   │
          ┌────────────────────────┴─────────────────────────┐
          │                                                  │
    **实时计算路线**                                 **离线计算路线**
          │                                                  │
  1. Spark Streaming 消费 Kafka数据                 1. Spark Streaming 消费 Kafka数据
          │                                                  │
  2. 计算时序特征(如5分钟均值、标准差)            2. 数据清洗 & 特征提取
          │                                                  │
  3. 特征数据存入 Redis                          3. 特征数据存入 Hive
          │                                                  │
  4. 实时模型推理                               4. 离线训练机器学习模型
          │                                                  │
  5. 推理结果存入数据库或告警系统              5. 模型更新推送到推理系统


详细方案设计

1. 数据接入:Kafka

Kafka 的作用


2. 实时计算路线

目标

实时处理流程

  1. Spark Streaming 消费 Kafka 数据

    • Spark Streaming 实时消费 xtu_realtime_data Topic。
    • 数据解析与清洗:
      • 解析 XTU 上报数据中的电流、电压、状态信息等。
      • 过滤无效数据、填补缺失值、校验数据有效性。
  2. 计算时序特征

    • 按时间窗口(如 1 分钟、5 分钟)对数据进行分组,计算时序特征:

      • 统计特征:最大值、最小值、均值、标准差。
      • 趋势特征:斜率、增量。
    • 示例特征输出:

      {
        "device_id": "device_001",
        "timestamp": 1677763200,
        "voltage_mean": 220.5,
        "voltage_std_dev": 0.8,
        "current_mean": 30.2,
        "current_std_dev": 1.2
      }
      
      
  3. 特征数据存入 Redis

    • 将计算后的时序特征存入 Redis,以便快速查询。
    • Redis 的存储结构:
      • Key:xtu:device_id:timestamp
      • Value:特征值的 JSON 字符串。
    • 设置数据过期时间(如仅保留最近 1 小时的数据)。
  4. 模型实时推理

    • 从 Redis 中读取时序特征,输入到部署好的机器学习模型(如 TensorFlow Serving、PyTorch Serve)。
    • 推理结果写回 Redis 或直接推送到告警系统(如 Kafka 的 xtu_alerts Topic)。
  5. 告警和后续处理

    • 当推理结果超过故障阈值时,触发告警,将信息推送到运维系统。

3. 离线计算路线

目标

离线处理流程

  1. Spark Streaming 消费 Kafka 数据

    • 离线计算任务使用 Spark Streaming 消费 Kafka 的 xtu_realtime_data Topic。
    • 数据解析与清洗:
      • 解析 XTU 上报的原始数据。
      • 数据校验:去重、填补缺失值、过滤异常数据。
  2. 提取时序特征

    • 按时间窗口(如 5 分钟、1 小时)对数据进行分组,提取统计和趋势特征。
    • 特征计算与实时计算一致:
      • 统计特征:最大值、最小值、均值、标准差。
      • 趋势特征:斜率、增量。
    • 如果需要更多复杂特征(如周期性特征、频域特征),可以在离线计算中完成。
  3. 特征数据存储到 Hive

    • 将清洗和特征提取后的数据存入 Hive 表,供后续模型训练使用。

    • 示例 Hive 表结构:

      CREATE TABLE xtu_features (
          device_id STRING,
          timestamp BIGINT,
          voltage_mean DOUBLE,
          voltage_std_dev DOUBLE,
          current_mean DOUBLE,
          current_std_dev DOUBLE,
          ...
      )
      PARTITIONED BY (date STRING);
      
      
    • 数据按日期分区存储,便于高效查询和管理。

  4. 模型训练

    • 使用 Hive 中的离线特征数据训练机器学习模型。
    • 支持的模型包括:
      • 分类模型:XGBoost、LightGBM 等,用于预测故障类型或风险评分。
      • 时间序列模型:LSTM、Transformer 等,用于分析时序模式。
    • 训练好的模型存储在模型管理系统(如 MLflow)中。
  5. 模型更新

    • 定期将离线训练好的模型更新到实时推理系统中。

4. 存储方案

Kafka

Redis

Hive


5. 推理与告警

  1. 实时推理

    • 从 Redis 中读取实时特征,输入到部署好的模型中进行推理。
    • 推理结果存入 Redis 或 Kafka 的 xtu_alerts Topic。
  2. 告警机制

    • 当推理结果超过设定阈值时,触发告警,将信息推送到运维系统或触发自动控制流程。

总结

通过这种设计,实时和离线计算都基于 Spark Streaming 和 Kafka,架构简化且高度统一,同时满足实时性和离线分析需求。