1.producer发送数据的总体流程
1.创建一个kafkaproducer对象
2.会有一个拦截器,拦截一些消息,实际用处不大
3.之后经过序列化
4.经过分区器,将消息发送到对应的分区
5.消息缓存到recordacuumulator,kafka实际不是一条一条去发送的,而是封装成一个批次一个批次去发送的,这样吞吐量会比较高
6.缓存这里会有很对Dqueue队列,队列与分区有关系,每一个分区会对应一个队列,每个队列里面会有多个批次recordbatch(默认16k)
7.真正去发送消息的是sender线程
8.sender线程去缓存读取数据
9.然后封装成一个一个的网络请求ClientRequest,这些网络请求会发送给NetworkClient这个组件
10.真正发送数据的时候会将这些请求发送给Selector组件
11.Selector里面封装了很多kafkachannel(nio)
12.Selector执行网络请求,把消息发送到kafka集群
13.kafka集群会返回响应