water8394/flink-recommandSystem-demo
:helicopter::rocket:基于Flink实现的商品实时推荐系统。flink统计商品热度,放入redis缓存,分析日志信息,将画像标签和实时记录放入Hbase。在用户发起推荐请求后,根据用户画像重排序热度榜,并结合协同过滤和标签两个推荐模块为新生成的榜单的每一个产品添加关联产品,最后返回新的用户列表。
解决的问题
该项目是一个完整的、可运行的实时产品推荐系统演示,适用于电子商务。它展示了如何组合多种推荐策略——流行度、基于物品的协同过滤、产品画像相似度和用户兴趣上下文——并通过网页提供服务。它不仅展示一种算法,还演示了如何将不同的信号合并,并在用户操作流式传入时实时刷新。
工作原理
系统将用户操作日志(浏览、收藏、购买)流式传输到 Kafka。六个 Flink 作业消费这些日志,并将派生数据写入 HBase 和 Redis。一个单独的调度作业计算物品间相似度分数。一个 Spring Boot Web 模块从这些存储中读取数据,并显示三个推荐列:实时流行度排名、协同过滤建议和基于产品画像的建议。
六个 Flink 作业各自处理一部分逻辑:原始日志存储、用户-产品历史、用户兴趣检测(基于操作之间的时间间隔)、用户画像(颜色/国家/风格偏好)、产品画像(年龄段和性别),以及存储在 Redis 中的 60 秒滑动窗口流行度面板。
产品之间的相似度通过两种方式计算:产品画像特征(颜色、国家、风格)的余弦相似度,以及基于用户-产品历史的协同过滤公式。Web UI 还提供了一个管理仪表板,显示实时指标,如流行度面板和每小时日志量。
该仓库包含 Docker Compose 文件和 shell 脚本,用于启动所有依赖项(MySQL、HBase、Kafka、Redis、Flink)、编译、运行作业、注入测试数据以及启动网站。README 还记录了常见问题,例如 localhost 的 IPv6 问题、JDK 版本限制,以及为什么不能在 Docker 网络内运行 Flink 作业。
适用人群
希望看到使用 Apache Flink 和现代数据存储的完整、可运行的实时推荐管道示例的开发人员和数据工程师。对于任何学习如何将流式分析与离线式推荐算法结合在单个项目中的人,它也很有用。
亮点
- 六个不同的 Flink 作业各自处理一个特定的推荐子任务(历史、兴趣、画像、流行度)。
- 实现了两种相似度方法:产品画像余弦相似度和基于物品的协同过滤。
- 实时流行度计算使用 60 秒事件时间窗口,每 5 秒滑动一次。
- Docker Compose 通过一个脚本启动整个技术栈(MySQL、HBase、Kafka、Redis、Flink)。
- Shell 脚本自动化编译、作业提交、测试数据生成和网站启动。
- 详细的故障排除部分涵盖网络、JDK 和初始化问题。
- 推荐页面并排显示三列:流行度、协同过滤和基于产品画像的结果。
- 管理仪表板在单独的页面上显示实时推荐指标。
相关
- 项目
- 项目
- 项目
- 项目