kafka 生产者源码分析(一)- 生产者发送消息过程

基于kafka 0.10版本源码分析   

早期kafka 0.8.22,0.9.X 版本kafka 生产者消费者服务端都是用scala编写。而且放在cores包下,新版本的客户端使用java实现,放在clients包下。

     新的生产者客户端是一个进程,使用KafkaProducer对象实例化。这个生产者客户端,不直接发送消息给服务端,而是使用了一个名叫 RecordAccumulator队列收集要发送的消息,然后有个叫Sender的发送线程读取RecordAccumulator的消息,批量发送。

     为了保证生产者客户端网络请求的快速响应,客户端使用了NIO的选择器selector,处理网络连接和读写。而网络连接NetworkClient处理网络请求。

源码就不粘贴出来了,纯文字手打记录自己的理解。

当我们调用了producer的send方法后,打开源码看,send方法调用了doSend方法,首先总结producer doSend都做了哪些操作:

key、value的序列化、给消息体producerRecord分配要发送的topic 分区号、加入到消息收集器RecordAccumulator当中、最后是判断是否要发送。

1、消息收集器,RecordAccumulator。

1.1 生产发送消息同步和异步的区别

      

猜你喜欢

转载自blog.csdn.net/aa5305123/article/details/81610033