2. 特征工程基础回顾:离线特征与实时特征的区别、特征存储选型

在构建实时特征流系统之前,必须厘清离线特征与实时特征的本质差异。错误的特征抽象会导致回放验证失真、存储选型失误,最终影响线上推理效果。本节从计算模式、时效性、存储选型三个维度进行系统回顾。

2.1 离线特征 vs 实时特征:核心差异

离线特征与实时特征并非简单的“批处理 vs 流处理”对立,而是围绕 时间窗口、数据完整性、计算重复性 三个关键维度展开。

对比维度 离线特征 实时特征
计算模式 T+1 或小时级批处理,基于全量历史数据 秒级/毫秒级流处理,基于滑动窗口或事件触发
时间窗口 固定时间分区(如 2025-04-01 全天) 滑动窗口(如过去 5 分钟、最近 100 条事件)
数据完整性 强一致性,可回溯重算,数据最终完整 弱一致性,存在乱序、延迟、丢数据风险
计算重复性 幂等,相同输入始终得到相同输出 非严格幂等,依赖状态存储与水位线
存储特征值 通常只存最终结果,不存中间状态 需存储窗口状态、计数器、最近 N 条记录
典型场景 用户画像标签、历史 CTR 统计、天级聚合 实时点击率、滑动平均价格、在线推荐特征
关键认知: 离线特征适合“回顾性分析”,实时特征适合“即时决策”。在缺失回放验证中,必须将离线特征的时间窗口对齐到实时特征的事件时间,否则验证结果毫无意义。

2.2 特征存储选型:Redis vs HBase

特征存储是实时特征系统的核心基础设施。选型错误会导致特征读取延迟过高、存储成本失控或数据一致性无法保证。以下从 读写模式、数据结构、一致性要求 三个角度对比 Redis 与 HBase。

选型维度 Redis HBase
读写模式 纯内存读写,单次查询 < 1ms,适合高 QPS 点查 LSM-Tree 磁盘存储,单次查询 5-20ms,适合大吞吐扫描
数据结构 支持 String、Hash、Sorted Set、HyperLogLog 等丰富结构 仅支持 RowKey + ColumnFamily + Qualifier 的宽表模型
数据量 受内存限制,单机 GB~TB 级,集群可扩展但成本高 PB 级容量,基于 HDFS 自动扩展,存储成本低
一致性 单节点强一致,集群模式下最终一致(Cluster 模式) 强一致(基于 HDFS + WAL),支持 ACID 行级事务
TTL 过期 原生支持 Key 级别过期,适合滑动窗口特征 支持 ColumnFamily 级别 TTL,但粒度较粗
典型特征类型 实时计数器、最近 N 条行为、用户 session 特征 用户画像宽表、历史行为序列、大规模预计算特征
选型建议: 实时特征流中,Redis 适合存储“滑动窗口聚合值”和“最近事件缓存”,HBase 适合存储“用户长期画像”和“全量特征回溯数据”。在缺失回放场景中,通常使用 HBase 存储离线回放快照,Redis 存储实时在线特征。

2.3 特征存储架构:双存储协同模式

生产环境中,单一存储无法同时满足实时低延迟与大规模回溯的需求。下图展示典型的 Redis + HBase 双存储协同架构。

实时特征双存储协同架构 实时事件流 离线批处理 Flink 流处理 滑动窗口 / 状态管理 Redis 实时特征缓存 HBase 离线特征宽表 在线推理服务 缺失回放验证要点 离线快照写入 HBase 实时特征写入 Redis 回放时双路对比验证
架构要点: 实时事件流经过 Flink 处理后,滑动窗口聚合值写入 Redis 供在线推理低延迟读取;全量特征快照定期写入 HBase 用于离线回溯与缺失回放验证。两条链路在回放时通过事件时间对齐进行比对。

2.4 特征存储选型决策树

在实际项目中,可通过以下决策树快速确定特征存储方案:

  1. 特征是否需要毫秒级读取?
    • 是 → 优先考虑 Redis(内存型)
    • 否 → 进入下一步
  2. 特征数据量是否超过 100GB?
    • 是 → 优先考虑 HBase(磁盘型,可扩展)
    • 否 → 进入下一步
  3. 特征是否需要复杂数据结构(如 Sorted Set、HyperLogLog)?
    • 是 → 选择 Redis
    • 否 → 选择 HBase 或 Redis 均可,结合成本与运维能力
  4. 特征是否需要 TTL 自动过期?
    • 是 → Redis 原生支持,HBase 需额外配置
    • 否 → 两者皆可
常见陷阱: 不要将 Redis 当作“万能存储”存放全量历史特征。Redis 内存成本高昂,且在大数据量下频繁淘汰会导致缓存穿透。HBase 不适合高频点查(QPS > 10万),此时应在上层加 Redis 缓存层。

2.5 特征存储选型对比总结

场景 推荐存储 原因
实时滑动窗口计数(最近 5 分钟点击量) Redis Sorted Set / Hash 毫秒级读写,原生 TTL 过期
用户长期行为序列(最近 30 天浏览记录) HBase 海量数据低成本存储,支持范围扫描
在线推荐特征(用户实时兴趣标签) Redis String / Hash 高 QPS 点查,低延迟
缺失回放验证快照(全量特征回溯) HBase 数据量大,需按事件时间批量扫描
实时特征与离线特征交叉比对 Redis + HBase 双存储 实时特征走 Redis,离线快照走 HBase

特征存储选型没有银弹。在实时特征流缺失回放验证场景中,Redis 负责在线低延迟,HBase 负责离线大规模回溯,两者协同才能覆盖完整的验证链路。