小G最近在负责架构,做mq,所以看下kafka源码,
第一、生产者发送消息流程
1、流程图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612080813708.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2EzNzI2NjMzMjU=,size_16,color_FFFFFF,t_70)
总结
1、kafkaproducer 总共两个run,一个主线程的run,一个send的run
2、man的run,把数据放到recordAccumlator,当recordAccumlator满是,调用waitup,send线程
3、send的线程,batch数据进行分组,然后clientRequest,在进行封装为networkclientquest的send方法进行准备数据
4、调用send的poll数据发送出去
5、处理resqonse的数据
2、内存池
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210611163159514.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2EzNzI2NjMzMjU=,size_16,color_FFFFFF,t_70)
3、epoll
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210611163211754.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2EzNzI2NjMzMjU=,size_16,color_FFFFFF,t_70)
4、读取和写流程
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210611163227181.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2EzNzI2NjMzMjU=,size_16,color_FFFFFF,t_70)