Как ведут себя кафки разделы

Можете ли вы объяснить, как kafka разделы работает для этого сценария

Если я произвожу 9 (1-9) сообщений, разбейте их на 1 тему и 3 раздела.

Означает ли это, что:

Раздел 1 содержит: [1,4,7]

Раздел 2 содержит: [2,5,8]

Раздел 3 содержит: [3,6,9]

?

Кроме того, сколько потребителей могут получить все данные 3? Зачем?

Вы можете объяснить?

Я думаю также, что группа потребителей может решить эту проблему, но не уверен, почему

3 ответа

Решение

Можете ли вы объяснить, как kafka разделы работает для этого сценария

Ваше понимание верно.

Кроме того, сколько потребителей могут получить все данные 3? Зачем?

Зависит от того, сколько потребителей у вас в группе потребителей.

Если в группе только 1 потребитель, он получит все сообщения со всех разделов.

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

Если в группе 3 потребителя, каждому будет назначен один раздел.

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

Распределение сообщений в разделах корректно, если и только если вы публикуете сообщения без ключей. В Kafka принято публиковать сообщения в виде пар (ключ, значение), и если вы создаете сообщения таким образом, то разделитель по умолчанию гарантирует, что все сообщения с одним и тем же ключом будут помещены в один и тот же раздел. Это делается с помощью функции хеширования для каждого из ключей, сопоставляемых с одним из доступных разделов. В крайнем случае, когда все ваши сообщения имеют один и тот же ключ, все они будут отправлены в один и тот же раздел. Если все ваши сообщения содержали либо строковый ключ "foo", либо ключ "bar", то все сообщения с ключом "foo" могут попадать в раздел 3, а все сообщения с ключом "bar" - в раздел 1.

Что касается вашего вопроса о потребителях, вы можете иметь неограниченное количество потребителей. Если у каждого потребителя есть уникальный group.id, то он считается независимым и каждый из них получает свой собственный полный набор сообщений от всех разделов.

Однако, если у вас есть потребители, которые используют один и тот же group.id, то говорят, что они входят в группу потребителей, и каждый получит эксклюзивное и примерно равное подмножество разделов. Если бы у вас было 3 потребителя в одной группе, они получили бы 1 раздел каждый. Если вы добавили более 3-х потребителей в одну группу, то первые 3 получат по 1 разделу каждый, а все остальные будут резервными, и станут активными, только если один из 3 активных потребителей покинет группу.

Распределение сообщений по разделам является правильным в идее. Перегородки являются подразделением паралелизма Кафки.

У вас может быть 3 потребителя, каждый из которых будет обрабатывать один раздел, но вы также можете иметь только одного потребителя, который будет получать данные из 3 разделов. Это зависит от пропускной способности, которую вы можете иметь / хотите для каждого потребителя.

Относительно групп потребителей:

  • Если все ваши потребители имеют одинаковую группу потребителей, сообщения будут сбалансированы по потребителям
  • Если ваши потребители имеют разные группы потребителей, то каждое сообщение будет транслироваться всем процессам потребителей.

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

Другие вопросы по тегам