1.client
创建producer或consumer时,都会创建一个client与之关联,client负责获取metadata信息,并且client会启动一个backgroundMetadataUpdater,定期获取metadata。
client维护一个broker表,client在创建时,就连接到kafka broker,并启动broker的responseReceiver,用于接收kafka server返回的响应。
broker负责与kafka server的网络通信。
2. producer
数据流
asyncProducer->topicProducer->partitionProducer->aggregator->flusher->broker
asyncProducer:无缓冲
topicProducer:有缓冲
partitionProducer:有缓冲
aggregator:无缓冲
flusher:无缓冲
broker:无channel,在flusher里发送。
aggregator:对消息作批量聚集,一批消息最少有batch.num.messages,最多有queue.buffering.max.messages。
flusher:每次把一批消息传递给brokerProduer。如果因为网络延时导致当前这批消息无法及时发送出去,那么就进一步导致aggregator正在做聚合的后一批消息数量堆积增多,直到达到queue.buffering.max.messages后,aggregator阻塞