1.KafkaProducer初始化
KafkaProducer是生产者客户端的核心类,在其构造方法中,完成了一些重要组件对象的初始化,简单介绍如下:
1.1.Sender
Sender对象主要负责组装发送到kafka集群的生产请求,其实现了Runnable接口。在run()方法中,定义了Sender对象的具体操作,组装消息请求,轮询发送。
1.2.KafkaThread
KafkaThread类继承了Thread,它主要功能是作为IO线程,单线程轮询发送消息。在KafkaProducer构造方法初始化中,它就已经调用start()方法,完成了启动。
1.3.RecordAccumulator
RecordAccumulator记录累加器对象,它的功能是批量打包消息记录(kafka生产者发送消息是批量发送的)。
1.4.NetworkClient
NetworkClient对象封装了IO相关操作,负责和kafka集群交互,发送请求,接收响应。
2.消息发送流程
- 用户发送消息,传入Callback回调方法;
- 序列化消息key,value,并选择发送的Partition消息分区;
- 消息追加到RecordAccumulator记录累加器对象中,发送第一阶段结束;
- IO线程轮询组装生产请求,获取累加满的批量消息,按发送的目标Node聚合组装成最终的请求,待发送;
- 轮询NIO Selector通道选择器,获取准备就绪的事件,写事件就发送请求,读事件就接收响应;
- 接收到响应,回调处理响应结果,并且完成用户注册的Callback回调方法,发送第二阶段完成。