Как проверить, к какому разделу относится ключ в kafka? - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь отладить проблему, для которой я пытаюсь доказать, что каждый отдельный ключ идет в 1 раздел, только если кластер не перебалансирован.

Итак, мне было интересно, для какой темы, есть ли способ определить, в какой раздел посылается ключ?

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

при отправке сообщения, Разделы определяются по следующим классам

https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/clients/producer/internals/DefaultPartitioner.java

Если вы хотите изменить логику, внедрите интерфейс org.apache.kafka.clients.producer.Partitioner и, установить ProduceConfig 'partitioner.class'

справочный документ: https://kafka.apache.org/documentation/#producerconfigs

0 голосов
/ 04 мая 2018

Как объяснено здесь или также в исходном коде

Вам нужен byte[] keyBytes, если он не равен нулю, затем, используя org.apache.kafka.common.utils.Utils, вы можете выполнить следующее.

Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;

Для строк или JSON он кодируется в UTF8, а класс Utils имеет вспомогательные функции для его получения.
Для Avro, такой как Confluent serialized значения, это немного сложнее (магический байт, затем идентификатор схемы, затем данные). См формат провода

идет только на 1 раздел

Это не гарантия. Хеши могут сталкиваться.

Имеет смысл сказать, что данный ключ находится не более чем в одном разделе.

если кластер не перебалансирован

Перебалансировка сохранит значение раздела.

...