第1章 项目需求及架构
1.1 项目需求分析
一、数据采集平台搭建
二、Kafka中间件准备
三、下游Spark Streaming对接Kafka接收数据,实现vip个数统计、页面之间的跳转率、做题正确率与掌握度、播放时长统计及历史区间统计的实时计算功能。
1.2 项目框架
1.2.1 技术选型
一、数据存储:Kafka、MySQL
二、数据处理:Spark
三、其他组件:Zookeeper
1.2.2 流程设计
第2章 需求
2.1环境准备
在本机三台虚拟机上分别搭建好zookeeper和kafka,创建所需topic(注:CDH6.3.2中kafka的版本为2.2.1)
kafka-topics --bootstrap-server hadoop102:9092 --create --replication-factor 2 --partitions 10 --topic register_topic
kafka-topics --bootstrap-server hadoop102:9092 --create --replication-factor 2 --partitions 10 --topic qz_log
kafka-topics --bootstrap-server hadoop102:9092 --create --replication-factor 2 --partitions 10 --topic page_topic
kafka-topics --bootstrap-server hadoop102:9092 --create --replication-factor 2 --partitions 10 --topic course_learn
如果使用--bootstrap-server hadoop102:9092创建,则消费者的offset保存在kafka中,如果使用--zookeeper hadoop:2181创建,则消费者的offset保存在zk中
2.2原始数据格式及kafka对应topic
2.2.1实时统计注册人数 - register.log
kafka对应topic:register_topic
数据格式:
列 |
字段 |
字段说明 |
1 |
用户id |
|
2 |
平台id |
1:PC 2:APP 3:Other |
3 |
创建时间 |
|
数据示例:
# 数据使用/t作为分隔符
7188 2 2019-07-16 16:01:55
7189 1 2019-07-16 16:01:55
7190 1 2019-07-16 16:01:55
7191 1 2019-07-16 16:01:55
7192 1 2019-07-16 16:01:55
7193 3 2019-07-16 16:01:55
7194 1 2019-07-16 16:01:55
7195 3 2019-07-16 16:01:55
2.2.2做题正确率数与知识点掌握度数据格式 - qz.log
kafka对应topic:qz_log
数据格式:
列 |
字段 |
字段说明 |
1 |
用户id |
|
2 |
课程id |
|
3 |
知识点id |
|
4 |
题目id |
|
5 |
是否正确 |
0错误 1正确 |
6 |
创建时间 |
|
数据示例:
# 数据使用/t作为分隔符
1006 504 8 7 0 2019-07-12 11:17:45
1007 505 16 9 1 2019-07-12 11:17:45
1002 505 29 3 0 2019-07-12 11:17:45
1006 504 10 5 0 2019-07-12 11:17:45
1001 502 28 8 0 2019-07-12 11:17:45
1006 505 27 0 1 2019-07-12 11:17:45
1004 503 25 3 0 2019-07-12 11:17:45
1007 504 12 1 0 2019-07-12 11:17:45
1006 501 7 6 0 2019-07-12 11:17:45
2.2.3商品页面到订单页,订单页到支付页数据格式 - page.log
kafka对应topic:page_topic
数据格式:
序号 |
字段 |
字段说明 |
1 |
app_id |
平台id 1:PC 2:APP 3:Other |
2 |
device_id |
平台id |
3 |
distinct_id |
唯一标识 |
4 |
ip |
用户ip地址 |
5 |
last_event_name |
上一事件名称 |
6 |
last_page_id |
上一页面id |
7 |
next_event_name |
下一事件名称 |
8 |
next_page_id |
下一页面id |
9 |
page_id |
当前页面id 1:商品课程页 2:订单页面 3:支付页面 |
10 |
server_time |
服务器时间 |
11 |
uid |
用户id |
数据示例:
# 数据为json格式
{"app_id":"2","device_id":"100","distinct_id":"23a6d4a7-6903-46a4-bce2-a8317693da45","event_name":"-","ip":"123.235.113.225","last_event_name":"-","last_page_id":"0","next_event_name":"-","next_page_id":"2","page_id":"1","server_time":"-","uid":"0"}
# json格式化之后 { "app_id": "2", "device_id": "100", "distinct_id": "23a6d4a7-6903-46a4-bce2-a8317693da45", "event_name": "-", "ip": "123.235.113.225", "last_event_name": "-", "last_page_id": "0", "next_event_name": "-", "next_page_id": "2", "page_id": "1", "server_time": "-", "uid": "0" }
2.2.4实时统计学员播放视频各时长 - course_learn.log
Kafka对应topic:course_learn
数据格式:
序号 |
字段 |
字段说明 |
1 |
biz |
唯一标识 |
2 |
chapterid |
章节id |
3 |
cwareid |
课件id |
4 |
edutypeid |
辅导id |
5 |
pe |
视频播放结束区间 |
6 |
ps |
视频播放开始区间 |
7 |
sourceType |
播放平台 |
8 |
speed |
播放倍速 |
9 |
subjectid |
主题id |
10 |
te |
视频播放结束时间(时间戳) |
11 |
ts |
视频播放开始时间(时间戳) |
12 |
uid |
用户id |
13 |
videoid |
视频id |
数据示例:
# 数据为json格式
{"biz":"34e4b8fe-476c-4c7e-8e2c-274ec00bb5c9","chapterid":"2","cwareid":"2","edutypeid":"1","pe":"56","ps":"24","sourceType":"PC","speed":"2","subjectid":"1","te":"1563352144131","ts":"1563352128131","uid":"219","videoid":"6"}
# json格式化之后 { "biz": "34e4b8fe-476c-4c7e-8e2c-274ec00bb5c9", "chapterid": "2", "cwareid": "2", "edutypeid": "1", "pe": "56", "ps": "24", "sourceType": "PC", "speed": "2", "subjectid": "1", "te": "1563352144131", "ts": "1563352128131", "uid": "219", "videoid": "6" }
2.3模拟数据采集
将准备好的log文件使用kafka生产者代码发送信息到对应的topic中(log文件均在资料包的.2.资料