如果客户端的存储影响消费速度,说明存储是在处理消息的主线程里同步操作的,这会阻塞拉取和处理消息。

建议考虑把处理消息和存储处理结果用独立的且不同的线程,拉取消息只管消费,把消息转给缓存处理后就继续消费消息,这样可以保证消费较快。

需要注意,NFS有两方面影响性能:

  • NFS本身速度就不太理想。

  • NFS是网络共享存储,虽然有多机器共享访问的能力优势,但是多台机器和进程访问是争抢的,效率会降低。这解释了为什么消费者个数多了,性能反而下降。这一方面,可以考虑采用云盘,给每台消费端处理机挂载自己的云盘,独立存储,这样增加消费端不会因为争抢NFS而降低性能。

挂载云盘的存储是各自独立的。如果您需要把最终的处理结果集中到同一个NFS上保存,仍然可以通过一个异步的工具或者线程,把云盘上的结果再转发到NFS上,而不要让同步存储NFS阻塞消息处理。

总之,对于资源访问造成的处理低效,总是可以用异步处理的方式解决。