题目中之所以用双引号标注”hang", 是因为自己碰到的问题并不是Topology程序真的hang住了,而是有其他原因。
我曾经碰到的问题大致如下: 提交Topology之后,刚开始的几小时是正常运行的,但系统处理的数据量之后会越来越少,直至变为0,就像Topology hang住一样。
总结下自己在分析解决该问题时的思路:
由于特殊原因,刚开始没条件部署Storm UI,所以走了一些弯路。
1> 数据量变为0,首先想到的是后台数据采集和缓存平台是不是有问题,包括CPU、内存和网络流量资源是否有瓶颈。
2> 若1没问题,就看Storm计算资源CPU及内存是否有瓶颈。
3> 排除1和2之后,我通过添加日志分析Topology内部逻辑,确保功能没有bug
4> 通过Storm UI, 最终发现Spout在若干小时后不能继续读取Kafka中的数据,才导致问题出现。进一步分析,是有些消息size过大,超过了storm kafka spout插件中的默认限制,才导致Spout渐渐停止工作(因为我有并发的多个Spout)。