kafka消息生产流程

320 阅读1分钟

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.消息发送流程

消息生产时序图.jpg

  1. 用户发送消息,传入Callback回调方法;
  2. 序列化消息key,value,并选择发送的Partition消息分区;
  3. 消息追加到RecordAccumulator记录累加器对象中,发送第一阶段结束;
  4. IO线程轮询组装生产请求,获取累加满的批量消息,按发送的目标Node聚合组装成最终的请求,待发送;
  5. 轮询NIO Selector通道选择器,获取准备就绪的事件,写事件就发送请求,读事件就接收响应;
  6. 接收到响应,回调处理响应结果,并且完成用户注册的Callback回调方法,发送第二阶段完成。