1. 项目背景
1.1. 项目简介
公司有一个正在运营中的电商网站,名称叫做【京京购】。这是一个B2B2C的电商平台,类似京东。
现在我们想了解一下该电商网站的各种用户行为(访问行为、购物行为、点击行为等),统计出PV、UV等数据。
针对这样的大数据分析项目,我们可以采用MapReduce、Spark或者Flink来进行开发。
由于本项目会对实时数据和静态数据进行分析,所以我们采用性能更加优越的Flink来开发。
业务目标
- 帮助产品经理、数据分析师以及管理人员分析现有产品的情况
- 根据用户行为分析结果持续改进产品的设计
- 调整公司战略和业务
- 用大数据技术来帮助提升业绩、营业额以及市场占有率
常见电商模式
C2C–个人对个人 案例:淘宝、瓜子二手车
B2B–企业对企业 案例:阿里巴巴、慧聪网
B2C–企业对个人 案例:唯品会、乐蜂网
B2B2C -企业-企业-个人 案例:京东商城、天猫商城
C2B–个人对企业 案例:海尔商城、 尚品宅配
O2O–线上到线下 案例:美团、饿了么
1.2. 多维度指标分析
用户指标
商品指标
**电商小概念: **
SPU = Standard Product Unit (标准产品单位)SPU是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。 例如:iPhone X 可以确定一个产品即为一个SPU。
**SKU **= Stock Keeping Unit(库存量单位)。一款商品有多个颜色,则是有多个SKU,例:一件衣服,有红色、白色、蓝色,则SKU编码也不相同,如相同则会出现混淆,发错货。 例如:iPhone X 64G 银色 则是一个SKU。
2. 项目整体介绍
2.1. 使用到的技术
-
语言
Java、scala
-
框架
Spring Boot、Hadoop、HBase、Kafka、Flink、Canal
2.2. 项目整体流程
上报服务系统
将商城访问日志推送到kafka
数据库同步系统
将mysql数据推送到kafka
实时分析系统
消费kafka
数据,经过分析后,下沉到HBase
实时同步系统
消费kafka数据,下沉到HBase
批处理分析系统
从hbase取出数据,进行数据分析web可视化平台
展示HBase中的分析结果数据
3. 项目的技术选型
为什么要选择架构中的技术?
- Kafka
- Hbase
- Canal
- Flink
3.1. Kafka
Kafka是一种高吞吐量的分布式发布订阅消息系统。
- 吞吐量高
- 每秒达到几十万的数据
- 速度快
- 内存接力(消费者直接消费PageCache内存区数据)
- 数据安全
- 冗余机制可以有效避免消息丢失错误
- 其中几台实例挂掉也可以继续工作
- 高并发
- 突发型流量可以将峰值的数据持久化,等到流量正常或低估时再取出消费
3.2. HBase
HBase是一个分布式的、面向列的开源数据库。
-
业务不复杂
- PV/UV、页面点击量、新鲜度(没有复杂SQL查询)
-
实时电商平台
- 存取海量的数据,一个表可以有上亿行,上百万列
-
社区活跃
Hbase社区非常大,Facebook、小米、网易等公司都在使用HBase
-
高可用
没有单点故障,高可用性高
3.3. Canal
数据库同步常用的有两种方案:
-
方案1
mysql --> logstash --> kafka --> flink --> hbase
-
方案2
mysql --> sqoop --> kafka --> flink-->hbase
上述方案存在的问题
logstash、sqoop还是需要使用SQL语句查询mysql
,会给mysql增加压力,如果要跑大量数据的同步,会拖垮mysql
-
解决方案
mysql --> cannal(binlog) --> kafka --> flink --> hbase
cannal
Canal可以实时解析mysql的binlog
日志,通过读取binlog日志,将数据输出到Kafka。不需要执行SQL语句
,不会增加mysql压力
3.4. Flink
- 速度要比Spark、MapReduce更快
- 保证EXACTLY_ONCE
- 容错更轻量级
- 自动程序调优,自动避免性能消耗较大的操作(例如:shuffle、sort)
- 高吞吐