2. 核心概念与术语

在构建批流一体特征平台之前,必须统一团队对核心概念的认知。本章将逐一拆解特征、特征组、特征视图、特征存储、在线/离线特征以及特征血缘这六个关键术语,并说明它们之间的层级关系与协作方式。

学习提示: 这六个概念构成了特征平台的“元模型”。后续所有架构设计、API 定义、存储选型都建立在此基础之上。建议对照实际业务场景(如用户画像、商品推荐)来理解每个术语。

2.1 特征(Feature)

特征是平台中最小的数据原子单元,代表一个实体的某种可度量属性。在机器学习场景下,特征通常是模型输入的数值化或类别化表示。

属性 说明 示例
特征名称 全局唯一的标识符,通常采用 snake_case 命名 user_30d_purchase_amount
特征类型 数据类型:int64、float64、string、bool、list、map float64
实体 ID 该特征所属的主体标识,如 user_id、item_id user_id
时间戳 特征值生成或采集的时间点 2025-03-15 10:30:00
值域/枚举 可选约束,用于校验和异常检测 [0, 100000]
关键原则: 特征必须可回溯、可复现。同一个实体 ID + 特征名称 + 时间戳,在任何时间点查询都应得到相同的结果(或可解释的差异)。

2.2 特征组(Feature Group)

特征组是特征的逻辑集合,通常对应一个业务主题或数据源。例如,“用户基础信息”特征组包含性别、年龄、注册渠道等特征;“用户近 7 天行为”特征组包含点击次数、加购次数、下单金额等特征。

  • 分组依据: 数据源表、业务域、更新频率、存储位置。
  • 组内特征: 共享相同的实体 ID 和主键粒度。
  • 版本管理: 特征组整体支持版本化,便于回滚和对比。
  • 元数据: 每个特征组包含描述、负责人、标签、SLA 等元信息。
# 特征组定义示例(YAML 格式)
feature_group:
  name: "user_behavior_7d"
  entity: "user_id"
  description: "用户近7天行为聚合特征"
  features:
    - name: "click_cnt_7d"
      type: "int64"
    - name: "cart_cnt_7d"
      type: "int64"
    - name: "order_amt_7d"
      type: "float64"
  tags: ["behavior", "online"]
  owner: "team_recommendation"

2.3 特征视图(Feature View)

特征视图是面向模型训练和在线推理的“特征组装层”。它从一个或多个特征组中选取特征,并定义时间窗口、回溯逻辑、变换函数等。特征视图是特征平台对外暴露的核心接口。

维度 特征组 特征视图
粒度 按数据源/业务域组织 按模型/场景需求组织
时间逻辑 通常不包含时间窗口 必须定义时间回溯窗口
变换 原始特征 可包含聚合、归一化、分桶
使用方 特征工程师、数据开发 算法工程师、在线服务
常见误区: 不要把特征视图和特征组混为一谈。特征组是“有什么数据”,特征视图是“模型需要什么数据”。一个特征视图可以跨多个特征组进行 Join 和窗口计算。

2.4 特征存储(Feature Store)

特征存储是特征平台的数据底座,通常分为离线存储和在线存储两层。离线存储用于批量写入和历史回溯,在线存储用于毫秒级实时读取。

特征存储分层架构 离线存储(Offline Store) HDFS / Hive / Iceberg / Delta Lake 批量写入 · 历史回溯 · 大规模训练 吞吐优先 · 分钟级延迟 在线存储(Online Store) Redis / HBase / Cassandra / DynamoDB 实时写入 · 毫秒级读取 · 高并发 延迟优先 · 亚毫秒级响应 同步 统一特征访问层(Feature Serving API) 自动路由:离线查询 → Offline Store · 在线查询 → Online Store 模型训练 · 在线推理 · 特征回溯 · 数据探查
存储选型建议: 离线存储优先选择支持 ACID 和 Time Travel 的湖格式(如 Iceberg);在线存储根据 QPS 和延迟要求选择 Redis(缓存型)或 HBase(大容量型)。批流一体平台通常还会引入“统一存储抽象层”来屏蔽底层差异。

2.5 在线特征与离线特征

在线特征与离线特征并非两种不同的特征,而是同一特征在不同时间窗口和不同存储介质中的表现形式。这是批流一体特征平台的核心设计理念。

对比维度 离线特征 在线特征
计算时间 T+1 或小时级批量计算 实时流计算或近实时微批
数据新鲜度 截止到昨天/上一小时 截止到当前秒级
存储位置 离线存储(HDFS/湖) 在线存储(KV 数据库)
访问模式 批量扫描、全量导出 单点查询、小批量点查
典型用途 模型训练、特征回溯、离线评估 实时推理、AB 实验、在线监控
一致性要求 最终一致,允许延迟 强一致或最终一致(视场景)
批流一体核心: 同一个特征(如 user_30d_purchase_amount)在离线训练时使用 T-1 的批量计算结果,在在线推理时使用实时流计算结果。平台保证两者计算逻辑完全一致,仅时间窗口不同。

2.6 特征血缘(Feature Lineage)

特征血缘记录了特征从原始数据源到最终特征值的完整加工链路。它是特征平台的可观测性和治理基础。

特征血缘链路示例 原始数据源 click_log · order_db 特征加工 Spark SQL · Flink 作业 特征存储 Offline + Online Store 特征消费 训练 · 推理 · 分析 血缘元数据 SQL 解析 · 作业 DAG 血缘记录内容: ① 原始表/字段 → ② 加工 SQL/代码版本 → ③ 特征组/特征视图 → ④ 消费模型/服务 ⑤ 数据质量规则 · ⑥ 更新时间 · ⑦ 负责人 · ⑧ 依赖关系
血缘的价值:
  • 问题排查: 特征值异常时,快速定位是数据源问题、加工逻辑问题还是存储同步问题。
  • 影响分析: 修改某个原始字段时,自动通知所有下游特征和模型。
  • 合规审计: 追溯每个特征的数据来源和加工过程,满足监管要求。
  • 成本优化: 识别重复加工的特征,合并计算链路。

2.7 概念关系总结

六个核心概念之间的层级关系可以用以下结构表示:

原始数据源(Kafka / MySQL / HDFS)
    │
    ▼
特征组(Feature Group)—— 按业务主题组织特征
    │
    ├── 特征(Feature)—— 最小原子单元
    │
    ▼
特征视图(Feature View)—— 按模型需求组装特征 + 定义时间窗口
    │
    ├── 离线特征(Offline Feature)—— 批量计算,存入离线存储
    ├── 在线特征(Online Feature)—— 实时计算,存入在线存储
    │
    ▼
特征存储(Feature Store)—— 统一读写接口
    │
    ▼
特征消费(训练 / 推理 / 回溯)
    │
    ▼
特征血缘(Lineage)—— 贯穿全链路的元数据追踪
实践建议: 在搭建特征平台初期,先定义好这六个概念的元数据模型和 API 规范。后续所有功能(数据接入、特征加工、存储同步、服务发布)都围绕这个元模型展开,避免出现“特征孤岛”和“语义混乱”。