//返回结果 return new RecordAppendResult(future, dq.size() > 1 || batch.isFull(), true); } } finally { if (buffer != null) //释放之前申请的新空间 free.deallocate(buffer); //结束,并发数减1 appendsInProgress.decrementAndGet(); } } 上面的代码已经给出了注释,现将这段代码的流程总结如下: 首先根据TopicPartition参数获取到对应的Deque双端队列,没有则创建。 使用Synchronized关键字对追加消息的操作加锁。 调用tryAppend方法尝试往Deque中最后一个ProducerBatch中追加消息记录,如果成功则返回RecordAppendResult结果,Synchronized解锁。 如果上面追加消息失败,则从BufferPool中申请新的空间用于后面创建新的ProducerBatch。 使用Synchronized关键字对追加消息的操作加锁,然后再次尝试第三步。...