在线人数需求
- 当天总在线人数
- 同时在线人数
- 同时在线人数统计周期1分钟
用户心跳数据采集
- 登陆后前30秒每10秒汇报一次心跳
- 登陆超过30秒每30秒汇报一次心跳
- Max心跳QPS=500W/30s=170W+
Strom任务设计
- 使用Hyperloglog结构代替HashMap做过滤
- spout发送bolt使用localOrShuffleGrouping减少网络传输
- spout与bolt数量是worker数量N倍,让worker处理量保持均衡
- Kafka partition与worker数量相等消除热点
- countbolt使用ticktuple定时将hyperloglog发送至sumbolt进行汇总【HyperLogLog.merge(HyperLogLog)】
- sumbolt负责汇总并定期持久化至DB,worker重启首先装载DB数据
- 关闭ACK消息跟踪,提升性能
Strom任务拓扑结构
压力测试
模拟170W QPS心跳信息
HyperLogLog: http://woodding2008.iteye.com/blog/2332505