实时特征工程概述
好,咱们正式进入实时特征工程这个领域。说实话,这个章节是整个课程的地基。你想想看,如果连“实时特征”到底是什么、跟离线特征差在哪、用在哪儿都搞不清楚,后面谈治理、谈保障,那都是空中楼阁。
我个人习惯,在讲任何技术概念之前,先把它最朴素的定义说清楚。别一上来就堆术语,那没意思。
什么是实时特征
实时特征,说白了就是从数据产生到特征可用,延迟在秒级甚至毫秒级的特征。它不像离线特征那样等一天、等一小时,而是数据一进来,特征马上就出来。
举个例子。你在电商App上点了一个商品,系统立刻就知道“这个用户刚刚点击了某类商品”,然后下一秒推荐流就变了。这个“刚刚点击”就是一个实时特征。
核心定义:实时特征 = 数据产生时间 + 特征计算时间 + 特征生效时间 ≤ 秒级/毫秒级
嗯,这里要注意。实时不是的“零延迟”,而是业务可接受的延迟。我在项目中遇到过,有的业务说“实时”就是100毫秒以内,有的说5秒也行。所以,实时是一个相对概念,取决于你的业务场景。
实时特征与离线特征的区别
很多刚接触实时计算的同学,容易把实时特征和离线特征混为一谈。其实它们从根上就不一样。我整理了一个对比表,你看完就清楚了。
| 对比维度 | 离线特征 | 实时特征 |
|---|---|---|
| 计算延迟 | 小时级 / 天级 | 秒级 / 毫秒级 |
| 数据源 | Hive / HDFS / 离线数仓 | Kafka / Pulsar / 实时流 |
| 计算引擎 | Spark / Hive / MapReduce | Flink / Spark Streaming / Kafka Streams |
| 数据量级 | 全量历史数据(TB ~ PB) | 窗口内数据(MB ~ GB) |
| 特征时效 | 反映历史趋势 | 反映当前状态 |
| 存储介质 | HDFS / 对象存储 | Redis / HBase / 内存状态 |
| 容错方式 | 重跑任务 | 状态恢复 + 数据回放 |
| 典型场景 | 用户画像、报表分析 | 实时推荐、风控拦截 |
你看这个表,最核心的区别其实就两点:延迟和数据范围。离线特征看的是“过去”,实时特征看的是“现在”。
我曾经踩过一个坑。有个项目,团队把离线特征的计算逻辑直接搬到实时流上,结果发现窗口开得太大了,状态撑爆了内存。为什么?因为离线特征可以扫全量数据,实时特征只能处理一个时间窗口内的数据。这个思维不转过来,后面全是坑。
避坑指南:千万不要把离线特征的计算逻辑直接照搬到实时流上。我曾经见过一个团队,把离线计算用户30天点击量的SQL直接搬到Flink上,结果状态后端直接OOM。实时特征的计算逻辑必须针对流式场景重新设计。
实时特征的应用场景
聊完了区别,咱们看看实时特征到底用在哪。说实话,现在互联网业务,没有实时特征几乎寸步难行。我挑几个典型的场景说说。
1. 实时风控
这是实时特征最刚需的场景。用户一登录、一支付,系统必须在几百毫秒内判断“这笔交易是不是盗刷”。判断的依据是什么?就是实时特征:当前IP是否异常、过去5分钟登录失败次数、当前设备是否在黑名单里。这些特征,晚一秒都可能造成损失。
2. 实时推荐
你刷短视频,刷到一个美女跳舞的视频,点赞了。下一秒推荐流里就多了几条类似的。这就是实时特征在起作用——用户刚刚点赞了某类内容。离线特征只能告诉你“这个用户昨天喜欢看什么”,实时特征告诉你“这个用户现在喜欢看什么”。
3. 实时监控与告警
服务器CPU飙到90%了,你总不能等第二天看报表才知道吧?实时特征在这里就是滑动窗口内的平均值、环比增长率,一旦超过阈值立刻告警。我在项目中做过一个监控系统,用Flink计算每分钟的接口调用量,延迟控制在1秒以内,比传统轮询方案快了一个数量级。
4. 实时营销
用户把商品加到购物车,但5分钟没付款。这时候推送一张优惠券,转化率能提升不少。这个“5分钟未付款”就是一个实时特征。离线特征做不到这么精细的时机判断。
个人经验:实时特征的应用场景有一个共同点——决策窗口极短。如果业务允许你等5分钟再决策,那就不需要实时特征,用准实时(分钟级)就够了。别为了“实时”而实时,成本会翻好几倍。
实时特征的核心知识体系
为了让你对本章内容有个整体认知,我画了一张图。这张图把实时特征的定义、与离线特征的对比、应用场景串在了一起。你多看几遍,后面章节都会围绕这张图展开。
这张图你看懂了吗?中心是实时特征,三个分支分别对应定义、区别和场景。每个分支下面还有更细的子主题。后面几章,我们会逐一深入这些子主题。嗯,先把这张图印在脑子里,后面的路就好走了。
本章小结:实时特征就是低延迟的特征计算,与离线特征在延迟、数据源、计算引擎、存储介质等方面有本质区别。它的核心应用场景包括实时风控、实时推荐、实时监控和实时营销。理解这些基础概念,是后续学习数据契约治理的前提。