Kafka Java生产者模型
Producer初始化
初始化KafkaProducer实例,同时通过Config数据初始化MetaData、NetWorkClient、Accumulator和Sender线程。启动Sender线程。
MetaData信息
记录Cluster的相关信息,第一次链接使用Config设置,之后会从远端poll信息回来,比如host.name等信息。
Accumulator实例
Accumulator持有一个Map实例,key为TopicPartition(封装了topic和partition信息)对象,Value为RecordBatch的Deque集合。
NetworkClient实例
通过MetaData信息初始化NetworkClient实例,NetworkClient使用NIO模型。
Sender线程
sender持有NetworkClient和Accumulator实例,在Producer实例初始化完成之后,持续地将Accumulator中的Batch数据drain到一个List中,调用NetworkClient进行发送。
发送
调用Producer实例进行消息发送,首先将消息序列化之后追加到Accumulator的Deque的最后一个batch中,之后唤醒sender->client->Selector进行消息发送。