导图社区 电商云商数字仓库项目开发框架
电商云商数字仓库项目开发框架:DWS:dws_user_action 用户行为宽表(根据user_id聚合);用户购买商品明细宽表 dws_sale_detail_daycount。
编辑于2022-11-10 16:39:05 广东电商云商数字仓库项目开发框架
数仓架构
hdfs -> hive
User_Action_DB
ODS
ods_start_log
ods_event_log
DWD
dwd_start_log
dwd_base_event_log
商品事件
dwd_display_page_log
dwd_newsdetail_page_log
dwd_list_page_log
用户事件
dwd_active_foreground_log
dwd_active_background_log
dwd_ad_log
消息事件
dwd_notification_log
dwd_error_log
用户行为事件
dwd_praise_log
dwd_comment_log
dwd_favorite_log
宽表元素
DWS
select (fields) from dwd_start_log where dt = "date" group by mid_id
dws_uv_detail_day
dws_new_mid_day
select (fields) from dws_uv_detail_day ud left join dws_new_mid_day nd on ud.mid_id = nd.mid_id where ud.dt = "date" and nd.mid_id is null
dws_user_retention_day
select (fields) from dws_uv_detail_day ud join dws_new_mid_day nd on ud.mid_id = nd.mid_id where ud.dt = "date" and nd.create_date = date_add("date", -2)
dws_uv_detail_wk
dws_uv_detail_mn
ADS
ads_uv_count 【1. 活跃设备主题】
select (fields) from (日活 join 周活 join 月活)
dws_new_mid_count 【2. 用户新增主题】
两个字段 create_date, count(*)
ads_user_retention_day_count
ads_user_retention_day_rate 【3. 留存用户主题】
retention_count/new_mid_count
ads_slient_count 【4. 沉默用户主题 】
select (fields) from (select fields from dws_uv_detail_day) group by mid having count(*) = 1 and min(dt) < date_add("date", -7)
ads_back_count 【5. 本周回流用户】
本周活跃 left join 本周新增 left join 上周活跃 (时间用date_add)
ads_wastage_count【6. 流失用户】
新增用户占日活用户比率 ads_user_convert_day
new_mid_count / day_count
System_Business_DB
ODS {从original_data 把数据导入到ods层}
order_info
payment_info
order_detail
user_info
sku_info
base_category1
base_category2
base_category3
降维
DWD (判空过滤, 对商品分类表进行维度退化(降维))
采用sql进行清洗(大概1W条数据洗掉1条)
dwd_order_info
dwd_payment_info
dwd_order_detail
dwd_sku_info
dwd_user_info
dwd_store_info
dwd_goods_info
dwd_device_info
DWS
dws_user_action 用户行为宽表(根据user_id聚合)
从order_info获取下单次数和下单总金额
从payment_info中获取支付次数和支付总金额
从comment_log中获取评论次数
用户购买商品明细宽表 dws_sale_detail_daycount
访问统计表 dws_cookie_dau_visit_
物流宽表
商品宽表
购物车宽表
ADS
GMV成交总额表 ads_gmv_sum_day
select sum(orde_count), sum(order_count), sum(payment_count)
转化率
用户行为转化率 ads_user_action_convert_day
从dws_user_action中取下单人数和支付人数
从ads_uv_count中取活跃人数,对应相除
商品类指标
产品总量
SKU数
SPU数
上架商品SKU数
上架商品SPU数
上架商品数
投诉类指标
发起投诉数
投诉率
撤销投诉数
撤销投诉率
风控类指标
买家评价数
好评总数
差评总数
好评率
市场营销活动指标
新增访问人数
新增注册人数
广告投资回报率
UV订单转化率
交易类指标
交易成功订单数
交易成功金额
交易成功买家数
交易成功商品数
交易失败订单数
交易失败金额
交易失败买家数
交易失败商品数
退款总订单量
退款总金额
退款率
购物车类指标
加入购物车总次数
加入购物车买家次数
加入购物车商品数
购物车支付转化率
下单类指标
下单比数
下单总金额
下单买家数
浏览下单转化率
支付类指标
支付金额
支付买家数
支付商品数
下单-支付转化率
实时架构
三大分析类别
TopN
转化率
count数
Spark
ES
flume
关于flume
flume组成
Source
TailDir Source
断点续传,多目录。在1.7版本及以后使用
1.7之前都是自定义source记录offset
挂掉处理
直接kill进程再重启
Channel
File Channel
数据存储在磁盘,传输速度慢
Memory Channel
数据存储在内存中,传输速度快
Kafka Channel
数据存储在kafka内存中,速度快
Sink
Kafka Sink
三器
拦截器
ETL拦截器
轻度过滤
区分类型拦截器
可以是有多少个topic就设置多少个分类型拦截器
自定义拦截器
实现 Interceptor方法
重写4个方法
initialize
public Event Intercept
public list<event> intercept
close
Flume选择器
replicating Channel Selector(default)
分发所有的channel
multiplexing Channel Selector
选择性分发Channel
监控器
Gagnglia
支持查看put和take机制的尝试次数和成功次数 如果try的次数远远大于success的次数,说明事务 回滚次数过多,那么我们就需要优化flume 1) 增加单节点的内存,设置flume.env.sh, 将jvm heap 设为5G 2) 增加flume机器数 3) -Xms 和 -Xmx设置为一致,可以减少flume的内存抖动
Kafka
关于Kafka
1. kafka组成: producer, broker(topics(partition)), consumer, zk(只有broker和consumer的信息)
2. Kafka压测: 使用自带压测脚本测试(cpu, 内存,网络io),一般出问题的都是网络IO
3. Kafka机器数量 = 2 * (峰值生产速度(根据压测)* 副本数(2)/100)+ 1 【一般3台flume可以抗住50m/s的传输速度】
4. 日志保留时间为3天
5. kafka硬盘大小: 每天数据量* 3 / 70% 大概2.5个T
6. Kafka监控: KafkaMonitor
7. 日常每天数据量在150G左右
8. 分区数最好不要超过机器数,我们会有8个分区左右,根据主题的不同
9. 我做过的topic (关于用户: 点赞,收藏,评论,活跃;关于支付业务: 支付总额,支付买家数;风控: 评论数,好评数,差评数,好评率, 等)
10. 针对生产者,我们的ack设为1, leader收到数据就返回offset。 0不选是因为怕丢数据,也不需要1那么严格
11. 针对消费者,我们现则range的分区分配策略,分配比较均匀
12. In-synic-replicas(ISR) : 如果leader挂掉,会选择ISR中的一个server来作为leader,同时用replica.lag.time.max.ms来决定一个server是否可以进入ISR, 任何维度超过阈值, 都会被放入OSR(outof - Sync - Replica。 而且新的follower也会被放入OSR
13. kafka中的数据量计算: 3M-30M / s
14. kafka挂掉短期内没有问题,重启
15. Kafka消费能力不足: 增加topic的分区数,同时增加consumer的个数, 消费者数=分区数。 如果下游数据处理不及时,则要提高消息拉取的速度
16. 幂等性(相同的数据只在server端持久化一次,保证不丢不重)+ ack + 事务(生产消费跨分区和会话,要么都成功,要么都失败)【producer事务(transactionID + Producer PID)和 consumer事务】
17. Kafka数据重复, 可以到spark Streaming,redis,或者hive中dwd层去重(分组,按id开窗,只取第一个值)
18. Kafka参数优化
server.properties
producer.properties