大家好,我是 华仔, 又跟大家见面了。 上篇主要带大家深度剖析了「Kafka 网络层收发总流程」,今天主要聊聊 「Kafka 客户端消息缓存架构设计」,深度剖析下消息是如何进行缓存的。 认真读完这篇文章,我相信你会对 Kafka 客户端缓存架构的源码有更加深刻的理解。 这篇文章干货很多,希望你可以耐心读完。 01 总体概述 通过场景驱动的方式,当被发送消息通过网络请求封装、NIO多路复用器监听网络读写事件并进行消息网络收发后,回头来看看消息是如何在客户端缓存的? 大家都知道 Kafka 是一款超高吞吐量的消息系统,主要体现在「异步发送」、「批量发送」、「消息压缩」。 跟本篇相关的是「批量发送」即生产者会将消息缓存起来,等满足一定条件后,Sender 子线程再把消息批量发送给 Kafka Broker。 这样好处就是「尽量减少网络请求次数,提升网络吞吐量」。 为了方便大家理解,所有的源码只保留骨干。 02 消息如何在客户端缓存的 既然是批量发送,那么消息肯定要进行缓存的,那消息被缓存在哪里呢?又是如何管理的? 通过下面简化流程图可以看出,待发送消息主要被缓存在...