KafkaProducer
1.send方法
kafkaProducer端由两部分组成,一个为RecordAccumulator,一个是Sender,Sender实现Runnable,是一个后台线程.
用户调用producer发送消息是与RecordAccumulator进行交互.RecordAccumulator中的append方法负责将消息放入后台buffer中.具体操作为: 获得topic和partation获得一个双端队列,该队列内部节点为RecordBatch,RecordBatch表示一批消息.它内部会持有一个MemoryRecords,类似一个buffer. 若还有空间,则将消息放入buffer中.若没有空间,则创建一个新的RecordBatch,将消息放入并将改RecordBatch放入双端队列的尾部,最后将结果返回,该结果中包含了RecordBatch是否溢满的信息. 这里对溢满的判断是dq.size() > 1 || batch.records.isFull(),即双端队列含有大于1个的节点,说明上一个RecordBatch已经满了,或这当前的RecordBatch溢满. KafkaProducer会对返回的结果进行检查,若发下溢满,则调用Sender的wakeUp进行发送.
明天学习sender 线程