面试官提问:Kafka 高吞吐架设计在消费端是如何体现的?

108 阅读1分钟

相较生产端和服务端,消费端提升吞吐量的策略就没那么复杂了。

消费端拉取消息的过程

一般来讲,消费端提升吞吐量的方式主要就是通过解耦,消费者在消费消息的时候,也是有两个线程分别来拉取消息任务线程和网络 IO 任务线程。下图描述了拉取消息的过程:

A0B54A3B-47C7-4820-9DAB-D05E680519E2.png  

通过该图可以看到,消费者拉取完消息后并不是直接处理,而是放到一个缓存里,等待其他任务处理。

拉取消息任务和网络 IO 任务的关系

那消费者为什么不直接从 Broker 拉取消息,而是先把消息拉取过来放入缓存再等着获取呢?可以看下面的关系图:

7C40AA1E-78B7-46CA-8F72-E07B8CC2A885.png      

如图所示,拉取消息任务和网络 IO 任务是解耦的,网络 IO 任务会事先把消息拉取到消费者缓存里,然后等待拉取消息任务读取缓存里的消息。这样做的好处是拉取消息任务拉取消息的时候不会造成 IO 阻塞,可以提高拉取消息任务的效率,并最终提升整体的吞吐量。