项目采用kafku + storm, 当kafka堆积数据过多,或消息生产数据量过大,bolt处理不过来,导致spout超时,消息重发
由于项目bolt处理是做统计数量用,虽然在处理时,一分钟内的重复数据会做处理,但消息过多时,spout超时很多,导致统计的数据大于实际数据(部分数据在一分钟后才处理)
解决方案如下:
1.topology.max.spout.pending值减小,对于我的应用,取1000时,能处理目前生产峰值20倍数据
2.将原先一分钟处理重复消息的时间放大
3.加大bolt处理的线程数
4.将spout超时时间取消(但无法统计或告警fail的数量)
但这个还是不能根本上解决问题,目前应用可能要接入日志系统,消息量会是原先数据量的几十倍甚至几百倍,最后统计可能会出现严重的误差,有朋友能给个更好的解决方案么