1. 课程导论:实时特征服务的概念、应用场景与课程目标
1.1 什么是实时特征服务
实时特征服务(Real-Time Feature Service)是机器学习推理链路中的关键中间层,负责在毫秒至秒级延迟内,从原始数据流中提取、计算并输出结构化的特征向量,供在线模型进行预测。它区别于离线批处理特征工程,核心差异在于:
| 维度 | 离线特征工程 | 实时特征服务 |
|---|---|---|
| 计算触发 | 定时调度(小时/天) | 事件驱动(毫秒/秒) |
| 数据源 | Hive / HDFS 批量表 | Kafka / Pulsar 实时流 |
| 延迟要求 | 分钟级 ~ 小时级 | 毫秒级 ~ 秒级 |
| 状态管理 | 无状态或快照 | 有状态(窗口、计数器、LRU) |
| 输出方式 | 离线表 / 特征仓库 | KV 存储 / gRPC 接口 / 消息队列 |
实时特征服务的本质是将特征计算逻辑从模型训练代码中解耦,形成独立的、可复用的特征算子层。在 Flink 生态中,通常使用 DataStream API 或 SQL 定义特征逻辑,通过状态后端(RocksDB / Heap)维护窗口聚合、滑动计数、序列模式等有状态计算,最终将特征结果写入 Redis、HBase 或在线特征存储中。
关键指标: 生产级实时特征服务通常要求 P99 延迟 < 50ms,吞吐量 > 10万 QPS,特征一致性达到最终一致或读己写一致。
1.2 应用场景
1.2.1 推荐系统
推荐场景是实时特征服务最成熟的应用领域。用户行为(点击、收藏、购买、停留时长)以事件流形式进入 Flink,实时计算:
- 用户实时画像: 近 5 分钟点击类目分布、近 1 小时活跃度、实时兴趣衰减向量。
- 物品实时统计: 最近 10 分钟曝光量、点击率、转化率、热度衰减分。
- 交叉特征: 用户-物品共现次数、用户最近一次对该物品的行为类型。
这些特征在召回、粗排、精排阶段被模型消费,直接影响推荐结果的实时新鲜度。
1.2.2 风控系统
风控对实时特征的延迟和准确性要求最为严苛。典型实时特征包括:
- 设备指纹特征: 同一设备在 1 秒内的请求频次、IP 变化次数。
- 行为序列特征: 用户最近 10 笔交易的金额均值、标准差、最大间隔。
- 关联网络特征: 同一手机号关联的设备数、同一设备关联的账号数。
Flink 的 事件时间语义 和 精确一次状态一致性 保证了风控特征在乱序数据下的准确性,避免因数据延迟导致误杀或漏杀。
1.2.3 搜索排序
搜索引擎的实时排序模型依赖大量动态特征:
- Query 实时意图: 当前搜索词在过去 5 分钟的热度、同义词改写频次。
- 文档实时质量: 最近 1 小时文档的点击率、停留时长、反作弊标记。
- 上下文特征: 用户当前地理位置、时段、网络环境、设备类型。
实时特征服务使得搜索排序模型能够感知秒级变化的用户意图和内容质量,显著提升搜索体验。
场景对比: 推荐场景侧重用户长期兴趣与短期行为的融合;风控场景侧重高频事件下的异常检测与关联挖掘;搜索场景侧重 query-doc 的实时匹配信号。三者对延迟、吞吐、一致性的要求各有侧重,但都依赖 Flink 作为统一的实时计算引擎。
1.3 实时特征服务的架构位置
下图展示了实时特征服务在典型 ML 推理流水线中的位置:
1.4 课程目标
本课程旨在帮助学员系统掌握使用 Flink 构建生产级实时特征服务的完整技能栈。完成本课程后,学员将能够:
- 理解实时特征服务的核心概念:特征定义、特征生命周期、特征一致性、特征复用与版本管理。
- 掌握 Flink 实时特征计算的核心技术:事件时间与处理时间、状态后端选择、窗口算子、定时器、广播状态、CEP 模式匹配。
- 独立设计并实现实时特征管道:从 Kafka 数据接入、特征逻辑编码、状态调优到特征存储写入的完整流程。
- 具备生产环境调优与排障能力:反压处理、Checkpoint 调优、状态大小控制、数据倾斜解决、延迟监控。
- 了解实时特征服务的最佳实践:特征回填、在线/离线一致性校验、AB 测试特征隔离、灰度发布策略。
前置知识要求: 本课程要求学员具备 Java 或 Scala 基础编程能力,了解 Flink DataStream API 基本概念(如 Source、Transformation、Sink),熟悉 Kafka 的基本使用,对机器学习特征工程有基本认知。如果对 Flink 状态后端或时间语义尚不熟悉,建议先阅读 Flink 官方文档的前三章。
1.5 课程内容概览
下表列出了本课程 30 章的核心模块与对应主题:
| 模块 | 章节范围 | 核心内容 |
|---|---|---|
| 基础篇 | 第 1 ~ 5 章 | 实时特征概念、Flink 环境搭建、DataStream 基础、时间语义与 Watermark |
| 状态与窗口 | 第 6 ~ 10 章 | 状态后端、Keyed State、Operator State、窗口聚合、定时器 |
| 特征算子实战 | 第 11 ~ 18 章 | 滑动计数、比率特征、序列特征、Embedding 实时拼接、CEP 模式特征 |
| 存储与服务 | 第 19 ~ 23 章 | Redis/HBase 写入优化、特征缓存、gRPC 特征服务、特征版本管理 |
| 生产调优 | 第 24 ~ 27 章 | 反压、Checkpoint、状态大小控制、数据倾斜、监控告警 |
| 进阶与案例 | 第 28 ~ 30 章 | 特征回填、在线离线一致性、AB 测试、端到端推荐/风控案例 |
每个章节均包含可运行的代码示例、性能对比实验以及常见踩坑总结,帮助学员从理论到实践平滑过渡。
1.6 实时特征服务的核心挑战
在进入具体技术细节之前,有必要先了解实时特征服务面临的主要挑战,这些挑战将贯穿整个课程:
- 状态爆炸: 高基数 Key(如用户 ID、设备 ID)导致状态后端存储压力巨大,需要合理设计状态 TTL 和淘汰策略。
- 数据乱序: 网络延迟、客户端重试导致事件时间乱序,需要 Watermark 策略与迟到数据处理机制。
- 特征一致性: 在线特征与离线训练特征必须保持计算逻辑一致,否则模型效果会严重退化。
- 延迟与吞吐的平衡: 低延迟要求减少 batching,高吞吐要求增大 batching,需要在两者间找到最优配置。
- 特征复用与治理: 随着特征数量增长(数百到数千),特征定义、依赖关系、版本管理变得复杂,需要引入特征注册中心和元数据管理。
课程承诺: 本课程将针对上述每个挑战给出具体的 Flink 解决方案和代码实现,而非停留在理论层面。每章末尾的“避坑指南”小节会总结生产环境中常见的错误配置及其后果。