Как объяснено здесь или также в исходном коде
Вам нужен byte[] keyBytes
, если он не равен нулю, затем, используя org.apache.kafka.common.utils.Utils
, вы можете выполнить следующее.
Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;
Для строк или JSON он кодируется в UTF8, а класс Utils имеет вспомогательные функции для его получения.
Для Avro, такой как Confluent serialized значения, это немного сложнее (магический байт, затем идентификатор схемы, затем данные). См формат провода
идет только на 1 раздел
Это не гарантия. Хеши могут сталкиваться.
Имеет смысл сказать, что данный ключ находится не более чем в одном разделе.
если кластер не перебалансирован
Перебалансировка сохранит значение раздела.