在客戶端調用send方法時,須要先構造好ProducerRecord對象,其包含如下字段html
- 若是在發送時指定了partition,則消息將被保存到指定的tp分區隊列,
- 若是沒有指定分區,將對key散列後來計算分區,相同key的消息將被寫到同一個分區隊列中,
- 若是key是null,且使用默認的分區器,
- 則分區器將用輪詢的方法(Round Robin)將序列化後的消息均衡分佈到不一樣的隊列中

- sender線程從Accumulator中取出批量數據組成一個batch發送
若是想使用同步方式,併發
- 實際上是經過異步方式間接實現,
- 由於異步方式返回的是一個future對象,
- 在這對象上調用get方法,將被阻塞直到返回結果。

下圖詳細描述了數據發送到accumulator及sender線程從accumulator取出併發送到broker的過程異步

https://www.cnblogs.com/benfly/p/10000034.html線程