1. 课程导学与架构总览:实时特征平台的价值、技术选型与整体架构

大家好,欢迎来到《从零搭建实时特征平台》的第一章。

做实时特征这件事,我最早接触是在几年前的一个风控项目里。当时业务方提了个需求:用户点击按钮后,500 毫秒内要判断这笔交易是不是欺诈。传统的离线特征根本来不及,等特征算出来,钱早就转走了。嗯,从那时起我就意识到——实时特征不是锦上添花,而是很多场景的刚需。

1.1 为什么需要实时特征平台?

说白了,实时特征就是「数据还在路上,特征就已经算好了」。它跟离线特征最大的区别在于时效性。

对比维度 离线特征 实时特征
计算延迟 小时级 / 天级 秒级 / 毫秒级
数据范围 全量历史数据 滑动窗口 + 最新事件
典型场景 用户画像、推荐召回 实时风控、动态定价、在线推荐
存储介质 Hive / HDFS Redis / 内存 KV

你想想看,一个推荐系统如果只能每天更新一次用户兴趣,那用户上午搜了「机械键盘」,下午还在推「办公鼠标」——体验能好吗?实时特征就是来解决这类问题的。

核心价值总结:

  • 降低决策延迟:从小时级降到秒级
  • 提升模型效果:特征新鲜度直接影响 AUC
  • 支撑在线业务:风控、推荐、搜索都离不开

1.2 技术选型:为什么是 Flink + Kafka + Redis?

选型这件事,我踩过不少坑。最开始我们试过用 Spark Streaming 做实时特征,但延迟始终压不到 100ms 以内。后来换了 Flink,才真正把端到端延迟降下来。

下面说说我这套选型的理由:

1.2.1 Kafka —— 消息队列的「硬通货」

Kafka 在实时数据管道里几乎是标配。它提供高吞吐、持久化、可重放的消息队列。我个人习惯把 Kafka 当作实时特征的「数据总线」——所有原始事件先进 Kafka,下游各取所需。

1.2.2 Flink —— 真正的流计算引擎

Flink 跟 Spark Streaming 最大的区别在于:Flink 是真正的逐条处理,而不是微批次。这意味着延迟更低,而且支持精确一次语义。我在项目中遇到过因为 checkpoint 配置不当导致特征重复计算的问题,后来调整了 Flink 的 exactly-once 模式才解决。

1.2.3 Redis —— 特征存储的「快车道」

特征算出来之后放哪?不能放 HBase,延迟太高。Redis 的纯内存操作,单次读写通常在 1ms 以内。我们通常用 Redis 的 Hash 结构存储用户特征,用 Sorted Set 存储滑动窗口计数。

组件 选型理由 替代方案
Kafka 高吞吐、持久化、可重放 Pulsar、RocketMQ
Flink 真正流计算、低延迟、状态管理 Spark Streaming、Storm
Redis 毫秒级读写、丰富数据结构 Memcached、Tair

避坑指南: 我曾经在选型时忽略了 Redis 的内存容量规划,结果上线后特征数据量暴涨,Redis 内存被打满,导致服务 OOM。后来加了淘汰策略和容量预警才稳住。

1.3 整体架构图

下面这张图展示了我们这门课要搭建的实时特征平台的整体架构。它分为四层:数据接入层、计算层、存储层和服务层。

实时特征平台整体架构 数据接入层 业务日志 / 埋点 / 数据库 CDC / 外部 API 消息队列 (Kafka) 原始事件流 / 实时数据总线 计算层 (Flink) 滑动窗口聚合 / 特征拼接 / 状态管理 / 维表关联 存储层 (Redis) 特征 KV 存储 / 滑动窗口计数 / 缓存 服务层 (API / SDK) 数据流向:从左到右 延迟目标:端到端 < 200ms

这张图看起来简单,但每一层都有不少细节。比如 Kafka 的 topic 分区策略怎么设计?Flink 的 state backend 选 RocksDB 还是 Heap?Redis 的 key 结构怎么规划才能避免热 key 问题?这些我们后面都会一一展开。

1.4 课程内容概览

这门课一共 30 章,我把它分成了四个阶段:

  1. 基础搭建(第 1-8 章):环境准备、Kafka 集群部署、Flink 开发环境、Redis 配置
  2. 核心开发(第 9-18 章):实时特征计算逻辑、滑动窗口实现、维表关联、状态管理
  3. 性能优化(第 19-25 章):反压处理、checkpoint 调优、Redis 性能优化、数据倾斜解决
  4. 生产实践(第 26-30 章):监控告警、灰度发布、容量规划、线上问题排查

注意: 这门课不是纯理论,每一章都有可运行的代码和配置。我建议你跟着动手敲一遍,光看是学不会的。我曾经带过的新人里,动手实践的和只看不练的,三个月后差距非常明显。

1.5 你需要准备什么?

硬件方面,一台 8G 内存的电脑就够了。我们会用 Docker Compose 搭建集群,所以不需要多台服务器。

软件方面,你需要安装:

  • JDK 8 或 11
  • Maven 3.6+
  • Docker & Docker Compose
  • IntelliJ IDEA 或 VS Code