Kafka — разница между DefaultPartitioner с MessageKey и Custom Partitioner?

Я пытаюсь отправить сообщение KafkaProducer с помощью ProducerRecord.

new ProducerRecord(topicName,messageKey,message)

Здесь используется DefaultPartitioner, DefaultPartitioner будет использовать хэш ключа, чтобы гарантировать, что все сообщения для одного и того же ключа отправляются в один и тот же раздел.

В чем разница между этим и использованием CustomPartitioner? Я надеюсь, что Custom Partitioner также использовал для отправки сообщения в тот же раздел на основе ключа.


person Shankar    schedule 05.10.2016    source источник


Ответы (1)


Стратегия разделения по умолчанию:

  1. Если в записи указан раздел, используйте его
  2. Если раздел не указан, но ключ присутствует, выберите раздел на основе хэша ключа.
  3. Если нет раздела или ключа, выберите раздел в циклическом режиме.

(Это взято из исходного кода DefaultPartitioner)

Пользовательский разделитель просто позволяет вам установить свою собственную стратегию. Таким образом, вы можете, например, назначать разделы случайным образом или, если вы каким-то образом заранее знаете, насколько большим будет раздел, назначайте его на основе этого. Часть по умолчанию DefaultPartitioner больше касается стратегии циклического перебора. Я полагаю, что в большинстве/всех ситуациях варианты 1 и 2 будут считаться нормой.

person William Hammond    schedule 05.10.2016