当用户点赞某一商品时,数据会通过以下流程实时流向推荐系统,最终影响推荐结果。以下是详细的数据流向和关键处理环节:
1. 用户触发点赞行为
- 场景:用户在APP/网页点击商品详情页的「点赞」按钮。
- 数据生成 :
-
客户端 :记录事件类型(
like
)、商品ID(item_id=123
)、用户ID(user_id=456
)、时间戳(timestamp=2025-07-07T12:00:00
)、设备信息等。 -
示例JSON :
json{ "event": "like", "user_id": "u456", "item_id": "i123", "timestamp": "2025-07-07T12:00:00Z", "device": "iOS/Chrome", "geo": {"lat": 39.9, "lng": 116.4} }
-
2. 数据实时采集
(1)客户端上报
- 方式 :
- 直接上报 :通过HTTP API(如
POST /tracking
)发送到服务端。 - 批量上报:SDK本地缓存多条事件后压缩上传(减少网络请求)。
- 直接上报 :通过HTTP API(如
- 容错:若网络失败,数据暂存本地,下次启动时重试。
(2)服务端接收
-
API服务:接收请求后,验证数据合法性(如用户鉴权、字段校验)。
-
写入消息队列 :将事件投递到Kafka的
user_behavior
Topic(分区键通常按user_id
哈希,保证同一用户事件有序)。python# 伪代码:Kafka生产者 producer.send( topic="user_behavior", key="u456", # 按user_id分区 value=json.dumps(click_event) )
3. 实时流处理
(1)消费行为数据
-
流处理任务 (如Flink Job)订阅
user_behavior
Topic,实时处理点赞事件:java// 伪代码:Flink处理点赞 DataStream<LikeEvent> likes = env .addSource(KafkaSource.forTopic("user_behavior").build()) .filter(event -> event.getType().equals("like"));
(2)实时特征计算
- 用户画像更新 :
- 更新用户近期兴趣标签(如
user:456
的favorite_tags: ["electronics", "gadgets"]
)。 - 计数器:
user_likes_total{u456} += 1
(存储到Redis)。
- 更新用户近期兴趣标签(如
- 物品热度统计 :
- 实时排行榜:
item:123
的点赞数+1(通过Redis的ZINCRBY hot_items 1 i123
)。
- 实时排行榜:
- 关联规则 :
- 若用户同时点赞商品A和B,更新协同过滤的共现矩阵(如
A->B
权重+1)。
- 若用户同时点赞商品A和B,更新协同过滤的共现矩阵(如
(3)实时写入特征库
- 存储目标 :
- Redis:存储实时特征(如用户最近10次点赞的商品ID)。
- HBase/Cassandra:长期用户画像(如历史点赞总数)。
- 图数据库(如Neo4j):构建用户-商品交互关系(用于图推荐算法)。
4. 推荐系统响应
(1)在线推理
-
触发时机 :
- 即时反馈:用户点赞后,页面立刻刷新「猜你喜欢」列表。
- 下次请求:用户进入推荐页时拉取新结果。
-
排序模型输入 :
- 实时特征(用户最新点赞的商品ID)。
- 上下文特征(当前时间、地理位置)。
python# 伪代码:生成推荐 rec_results = model.predict( user_id="u456", context={"time": "afternoon", "location": "Beijing"}, realtime_features={"last_liked": "i123"} )
(2)结果调整
- 策略规则 (AB测试):
- 提升同类商品权重(如
category=electronics
的分数×1.2)。 - 社交推荐:若好友也点赞过该商品,则优先展示。
- 提升同类商品权重(如
- 冷启动处理 :若商品
i123
是新发布,通过内容相似性推荐(如标签匹配)。
5. 数据闭环与反馈
- 后续动作 :
- 模型训练:点赞数据进入数仓(如Hive),次日增量更新深度学习模型(如TensorFlow)。
- 效果评估:监控「点赞后推荐商品的点击率」是否提升。
- 负反馈处理:若用户取消点赞,立即降权相关推荐。
关键架构图
sequenceDiagram
participant 用户
participant 客户端
participant API服务
participant Kafka
participant Flink
participant Redis/HBase
participant 推荐模型
用户->>客户端: 点赞商品i123
客户端->>API服务: 发送点赞事件
API服务->>Kafka: 写入user_behavior
Flink->>Kafka: 订阅Topic
Flink->>Flink: 实时计算特征
Flink->>Redis/HBase: 更新用户画像/物品热度
推荐模型->>Redis/HBase: 读取实时特征
推荐模型->>用户: 返回新推荐列表
性能优化点
- 降低端到端延迟 :
- 客户端预加载推荐结果(如点赞后本地先调整UI)。
- 使用WebSocket保持长连接,避免HTTP握手开销。
- 数据一致性 :
- 通过Kafka事务保证事件仅被处理一次(Exactly-Once)。
- 扩展性 :
- Kafka分区数按吞吐量动态调整。
- Flink作业动态扩缩容(如K8s弹性调度)。
通过以上流程,用户的点赞行为可在毫秒级影响推荐结果,实现真正的实时个性化。实际应用中需根据业务规模权衡复杂度(如小型系统可能直接用Redis Pub/Sub替代Kafka+Flink)。