:whale:基于 Flink 的商品实时推荐系统。当用户产生评分行为时,数据由 kafka 发送到 flink,根据用户历史评分行为进行实时和离线推荐。实时推荐包括:基于行为和实时热门,离线推荐包括:历史热门、历史优质商品和 itemcf 。
No Data
Recs FlinkCommodityRecommendationSystem(基于 Flink 的商品推荐系统)
系统取名为
Recs,灵感源于
Recommendation System。logo 使用在线 logo 网站制作。 作者开发该项目,是为了学习
Flink以及相关大数据中间件。出于展示目的,使用 Springboot + Vue 开发了配套的 web。 作者有过 python + django + JavaScript 的 web 开发的经历,考虑到项目使用 java 开发,为了技术栈的统一,现学了 Springboot 框架以及 Vue。
本项目借鉴了 ECommerceRecommendSystem 开源学习项目,前端部分借鉴较多,在作者搭建好的框架基础上进行优化。修改了 ui 以及部分 bug,并且新增部分功能。 经过本项目的开发锻炼,作者对大数据相关的技术有了较为系统的理解,收获较大。在开发过程中,遇到过很多问题,但都逐一攻克了。作者的经验是,解决问题最好的办法就是阅读官方文档和积极使用 Google。 最后,相关的技术都是现学现用,知识比较片面,因此本项目存在很多待优化的地方,欢迎大家 issue,一起学习,一起进步。
系统主要工作流程:
实时 topN 将计算结果存储到 hbase 的 onlineHot 表中,基于用户行为推荐将计算结果存储到 hbase 的表 onlineRecommend 中。
web 端通过查询 hbase 获取相关模块所需数据并展示结果。
共有四个模块:
展示商品详细信息
看过该商品的人还看了:基于 itemCF 进行推荐
开发环境: IDEA + Maven + git + windows && wsl
软件架构:flink + hbase + kafka + mysql + redis
开发指导: flink 的计算任务都存放在 task 包下,DataLoader 为加载数据任务,OfflineRecommender 为离线推荐任务, OnlineRecommender 为实时推荐任务。以模块为单位阅读代码。
实时推荐:
“ONLINE_PREFIX_” + userId
userProduct中查询用户历史评分商品列表。
productId从 hbase 表
itemCFRecommend表中查询相关的商品列表
对所有时间用户评分的商品根据评分次数进行逆序排序,选出热门商品。
rating表加载到内存中,根据 productId group,并且统计出现次数
根据商品评分均分逆序排序,
采用 flink
timeWindow对过去一个小时的数据进行排序,选出热门的商品。时间窗口每五分钟滑动一次。
基于物品推荐 (itemCF)
消费 kafka topic 为
rating的数据,并且将数据存储到 hbase
rating表中,为了保证数据的唯一性
rowKey格式为:
userId_productId_timestamp
开发环境: IDEA + Maven + git + windows && wsl(ubuntu 20.4)+ postwomen
技术架构: Springboot + hibernate + mysql + hbase
开发指导: Controller 模块是后端的核心,从 restFul api 入手。
项目架构:
开发环境: VScode + nodejs + windows && wsl
技术架构: Vue + typescript + element-ui
共有两张表,一个是
product用于存储商品的详细信息,另一个是
user用于存储用户信息。
建表 sql 脚本在
recommendation/src/main/resources/mysql.sql中
hbase
建表语句在
recommendation/src/main/resources/hbase.txt中
商品信息存储在
recommendation/src/main/resources/product.csv文件里,我们运行一个 flink 任务将数据装载到 mysql 中。对应的表是我们之前创建的
product表
recommendation/.../task/DataLoader/DataLoaderTask.java
启动脚本是为了一键启动之前部署的 hbase、kafka、flink、redis、zookeeper 等
为了方便开发,作者写了启动和停止环境的 shell 脚本,在
recommendation/main/resources目录下,分别为 startAll.sh 和 stopAll.sh
最后,作者正在经历2021秋招,如果您觉得本项目不错,欢迎给个 star!