共计 2662 个字符,预计需要花费 7 分钟才能阅读完成。
FlinkCommodityRecommendationSystem
Recs FlinkCommodityRecommendationSystem(基于 Flink 的商品举荐零碎)
1. 前言
零碎取名为 Recs
,灵感源于 Recommendation System
。logo 应用在线 logo 网站制作。作者开发该我的项目,是为了学习 Flink
以及相干大数据中间件。出于展现目标,应用 Springboot + Vue 开发了配套的 web。作者有过 python + django + JavaScript 的 web 开发的经验,思考到我的项目应用 java 开发,为了技术栈的对立,现学了 Springboot 框架以及 Vue。
本我的项目借鉴了 ECommerceRecommendSystem 开源学习我的项目,前端局部借鉴较多,在作者搭建好的框架根底上进行优化。批改了 ui 以及局部 bug,并且新增局部性能。通过本我的项目的开发锤炼,作者对大数据相干的技术有了较为零碎的了解,播种较大。在开发过程中,遇到过很多问题,但都逐个攻克了。作者的教训是,解决问题最好的方法就是浏览官网文档和踊跃应用 Google。最初,相干的技术都是现学现用,常识比拟全面,因而本我的项目存在很多待优化的中央,欢送大家 issue,一起学习,一起提高。
2. 我的项目简介
2.1 Recs 零碎架构
零碎次要工作流程:
- 用户登录 / 注册零碎。
- 用户对商品进行评分。
- 评分数据通过 Kafka 发送到举荐模块的实时举荐工作中。
- 零碎执行实时举荐工作,并且将数据存储到 hbase 的 rating 和 userProduct 表中。实时工作包含:实时 topN 以及 基于用户行为举荐。
- 实时 topN 将计算结果存储到 hbase 的 onlineHot 表中,基于用户行为举荐将计算结果存储到 hbase 的表 onlineRecommend 中。
- web 端通过查问 hbase 获取相干模块所需数据并展现后果。
2.2 首页
共有四个模块:
- 猜你喜爱:基于用户行为举荐,当用户对商品进行评分时,Flink 依据用户历史评分商品,联合 itemCF 计算举荐后果。
- 热门商品:历史热门商品
- 好评商品:评分较高的商品
- 实时热门商品:应用 Flink 工夫滑动窗口,对过来一个小时热门商品进行统计,每 5 分钟滑动一次。
2.3 商品详情
- 展现商品详细信息
- 看过该商品的人还看了:基于 itemCF 进行举荐
2.4 登录
3. 模块阐明
3.1 举荐模块 (recommendation)
开发环境: IDEA + Maven + git + windows && wsl
软件架构:flink + hbase + kafka + mysql + redis
开发领导: flink 的计算工作都寄存在 task 包下,DataLoader 为加载数据工作,OfflineRecommender 为离线举荐工作,OnlineRecommender 为实时举荐工作。以模块为单位浏览代码。
3.1.1 猜你喜爱
实时举荐:
- 从 redist 中查问用户最近评分商品列表,redis key 为
“ONLINE_PREFIX_”+ userId
- 从 hbase 表
userProduct
中查问用户历史评分商品列表。 - 依据用户刚评分的
productId
从 hbase 表itemCFRecommend
表中查问相干的商品列表 - 对相干商品列表依据之前查出的最近评分商品列表和历史评分商品列表过滤。
- 依据最近评分商品与本次商品的类似度以及用户历史评分对举荐商品从新排序。
3.1.2 热门商品
对所有工夫用户评分的商品依据评分次数进行逆序排序,选出热门商品。
- flink 将 hbase
rating
表加载到内存中,依据 productId group,并且统计呈现次数 - 依据呈现次数逆序排序。
3.1.3 好评商品
依据商品评分均分逆序排序,
3.1.4 实时热门商品
采纳 flink timeWindow
对过来一个小时的数据进行排序,选出热门的商品。工夫窗口每五分钟滑动一次。
3.1.5 看过该商品的人还看了
基于物品举荐(itemCF)
3.1.6 数据装载模块
生产 kafka topic 为 rating
的数据,并且将数据存储到 hbase rating
表中,为了保证数据的唯一性 rowKey
格局为:
userId_productId_timestamp
3.2 后端 (recommend_backend)
开发环境: IDEA + Maven + git + windows && wsl(ubuntu 20.4)+ postwomen
技术架构: Springboot + hibernate + mysql + hbase
开发领导: Controller 模块是后端的外围,从 restFul api 动手。
我的项目架构:
3.3 前端 (recommend_front)
开发环境: VScode + nodejs + windows && wsl
技术架构: Vue + typescript + element-ui
4. 开发运行步骤
4.1 环境搭建
- mysql
- hbase
- flink
- redis
- kafka
- zookeeper
4.2 创立数据表
- mysql
共有两张表,一个是 product
用于存储商品的详细信息,另一个是 user
用于存储用户信息。
建表 sql 脚本在 recommendation/src/main/resources/mysql.sql
中
hbase
- rating
- userProduct
- itemCFRecommend
- goodProducts
- historyHotProducts
- onlineRecommend
- onlineHot
建表语句在 recommendation/src/main/resources/hbase.txt
中
4.3 数据入库
商品信息存储在 recommendation/src/main/resources/product.csv
文件里,咱们运行一个 flink 工作将数据装载到 mysql 中。对应的表是咱们之前创立的 product
表
- 启动 flink , 运行
recommendation/.../task/DataLoader/DataLoaderTask.java
- 商品信息存储到 mysql 中
4.4 启动开发环境
- 执行启动脚本
启动脚本是为了一键启动之前部署的 hbase、kafka、flink、redis、zookeeper 等
为了不便开发,作者写了启动和进行环境的 shell 脚本,在 recommendation/main/resources
目录下, 别离为 startAll.sh 和 stopAll.sh
- 启动 springboot 后端我的项目
- 启动 vue 前端
- 启动实时举荐工作
- 离线工作定时启动
最初,作者正在经验 2020 秋招,如果您感觉本我的项目不错,欢送给个 star!