Как Кафка выбирает раздел для ключа? - PullRequest
0 голосов
/ 25 апреля 2019

Предположим, что количество разделов является фиксированным для темы.И предположим, что я предоставляю ключ - массив байтов - при публикации сообщения.Кафка отобразит ключ на тематический раздел 0,1,2,3, ... N-1.

Я хотел бы сделать функцию, которая делает то же самое: задано N, и ключ возвращает тот же номер раздела, что и Кафка.

Это просто (в псевдокоде)) murmur3 (ключ)% N?

TIA

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

Насколько я знаю, Kafka хэширует ключ и раздел в соответствии с этим значением хэша.Вот полезная диаграмма и пример того, как.

Utils.abs (java.util.Arrays.hashCode (key.asInstanceOf [Array [Byte])))% numPartitions

enter image description here

Только что нашел еще один хороший пример разбиения!

enter image description here

0 голосов
/ 25 апреля 2019

DefaultPartitioner использует функцию murmur3 для вычисления раздела для сообщений с ненулевыми ключами.

Вы можете просто извлечь алгоритм и добавить его в свой код:

import org.apache.kafka.common.utils.Utils;
Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;

Второй вариант - просто использовать DefaultPartitioner:

DefaultPartitioner partitioner = new DefaultPartitioner();
int partition = partitioner.partition(???, ???, ???, ???, ???, ???);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...