2016-10-05 86 views
1

我試圖使用ProducerRecord將消息發送到KafkaProducerKafka - DefaultPartitioner與MessageKey與自定義分區程序的區別?

new ProducerRecord(topicName,messageKey,message) 

這使用DefaultPartitioner,DefaultPartitioner將使用密鑰的哈希值,以確保對於同一個密鑰的所有消息去同一個分區。

這和使用CustomPartitioner有什麼區別?我希望自定義分區程序也用於將消息發送到基於Key的同一分區。

回答

3

默認的分區策略是

  1. 如果記錄中指定一個分區,使用它
  2. 如果沒有指定分區,但關鍵是現在選擇一個分區基於密鑰
  3. 的散列
  4. 如果沒有分區或鍵存在選擇在循環方式

一個分區(這是從DefaultPartitioner源代碼拉動)

自定義分區程序只是讓您設置自己的策略。所以你可以例如隨機分配分區,或者如果你事先知道該分區將被分配多大的基礎。 DefaultPartitioner的默認部分更多地是關於循環策略。我想大多數情況下,選項1和2都被認爲是常態。