1. ProducerIntercptor对消息进行拦截
2. Serialzer对key和value进行序列化
3. Partitioner对消息选择合适的分区
4. RecordAccumulator收集消息,实现批量发送
5. Sender从RecordAccumulator获取消息
6 构造ClientRequest
7 将ClientRequest交给Network,准备发送
8 Network将请求放入KafkaChannel的缓存
9 发送请求
10 收到响应,调用ClientRequest
11 调用RecordBatch的回调函数,最终调用到每一个消息上注册的回调函数
在这里主要涉及到两个线程:
主线程主要负责封装消息成ProducerRecord对象,之后调用send方法将消息放入RecordAccumulator中暂存
Sender线程负责将消息构造成请求,并从RecordAccumulator取出消息消息并批量发送