相较生产端和服务端,消费端提升吞吐量的策略就没那么复杂了。
消费端拉取消息的过程
一般来讲,消费端提升吞吐量的方式主要就是通过解耦,消费者在消费消息的时候,也是有两个线程分别来拉取消息任务线程和网络 IO 任务线程。下图描述了拉取消息的过程:
通过该图可以看到,消费者拉取完消息后并不是直接处理,而是放到一个缓存里,等待其他任务处理。
拉取消息任务和网络 IO 任务的关系
那消费者为什么不直接从 Broker 拉取消息,而是先把消息拉取过来放入缓存再等着获取呢?可以看下面的关系图:
如图所示,拉取消息任务和网络 IO 任务是解耦的,网络 IO 任务会事先把消息拉取到消费者缓存里,然后等待拉取消息任务读取缓存里的消息。这样做的好处是拉取消息任务拉取消息的时候不会造成 IO 阻塞,可以提高拉取消息任务的效率,并最终提升整体的吞吐量。