1.业务背景
根据订单mq,快速计算双11当天的订单量、销售金额。
2.架构设计及思路
支付系统+kafka+storm/Jstorm集群+redis集群
1、支付系统发送mq
到kafka
集群中,编写storm程序消费kafka的数据并计算实时的订单数量、订单数量
2、将计算的实时结果保存在redis
中
3、外部程序访问redis
进群中的数据实时展示结果
3.数据准备
订单编号、订单时间、支付编号、支付时间、商品编号、商家名称、商品价格、优惠价格、支付金额。
4.业务口径
- 订单总数:一条支付信息当一条订单处理,假设订单信息不会重发(实际情况要考虑订单去重的情况,父子订单等多种情况),计算接收到MQ的总条数,即当做订单数。
- 销售额:累加所有的订单中商品的价格
- 支付金额:累加所有订单中商品的支付价格
- 用户人数:一条支付信息当一个人处理,假设订单一个人只下一单(实际情况要考虑用户去重的情况)。
整体淘宝的业务指标,每个品类,每个产品线,每个淘宝店
5.数据展示
读取redis中的数据,每秒进行展示,打印在控制台。
6.工程设计
- 数据产生:编写kafka数据生产者,模拟订单系统发送mq
- 数据输入:使用PaymentSpout消费kafka中的数据
- 数据计算:使用CountBolt对数据进行统计
- 数据存储:使用Sava2RedisBolt对数据进行存储,将结果数据存储到redis中
- 数据展示:编写java app客户端,访问redis,对数据进行展示,展示方式为打印在控制台。
1、获取外部数据源,MQSpout
----Open
(连接你的RMQ)—nextTuple()
-----emit(json)
2、ParserPaymentInfoBolt()
----execute(Tuple)
------解析Json
----JavaBean
- productId,orderId,time,price(原价,订单价,优惠价,支付价),user,收货地址 , total:原价、total:订单价、total:订单人数……
3、Save2ReidsBolt
:保存相关业务指标
- 问题: 在redis中存放整个网站销售的原价,b:t:p:20160410 —> value , redis: String----> value1+value2 + value3 + value4 incrBy
b:t:p:20160410
b:t:p:20161111
b:t:p:20160412