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 用于离线回溯与缺失回放验证。两条链路在回放时通过事件时间对齐进行比对。
2.4 特征存储选型决策树
在实际项目中,可通过以下决策树快速确定特征存储方案:
- 特征是否需要毫秒级读取?
- 是 → 优先考虑 Redis(内存型)
- 否 → 进入下一步
- 特征数据量是否超过 100GB?
- 是 → 优先考虑 HBase(磁盘型,可扩展)
- 否 → 进入下一步
- 特征是否需要复杂数据结构(如 Sorted Set、HyperLogLog)?
- 是 → 选择 Redis
- 否 → 选择 HBase 或 Redis 均可,结合成本与运维能力
- 特征是否需要 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 负责离线大规模回溯,两者协同才能覆盖完整的验证链路。