哔哩哔哩直播统计项目

b站弹幕是用的ws与服务器连接来接收/发送消息的
这个弹幕和礼物的推送我感觉并不是很可靠,很有可能会有网络波动或连接断开的情况,所以我选择多个线程同时监听弹幕服务器的推送(当然多个线程可以选择跑在不同的进程跑在不同的机器上).

然后的问题是, 把消息往mq里塞, 还要消息不重复传. 这里我mq是用的kafka(毕竟kafka性能和多语言客户端支持比rocketMQ好), 三个Producer往mq里写消息之前, 先试图往Redis里SetNX一个键值对, 这个键就根据消息内容生成的, 值为空字符串就好, 如果写入成功, 就由该线程将消息写入mq, 如果没有写入成功, 则表示有其他线程来往mq里写消息, 自己直接返回即可. 这里往redis里写的时候 过期时间我也不晓得应该设多少合适…多了占内存少了可能起不到作用…我现在是设的5s

然后mq的消息广播机制就很有作用了,我们可以有多个consumer,比如我服务器一直跑着一个consumer来往db里记录数据,然后我自己桌面可以开一个客户端来看实时弹幕(我这b站web端看直播经常弹幕抽风…)

大概画个图如下
20191212010837.png