Как ведут себя кафки разделы
Можете ли вы объяснить, как 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 разделов. Это зависит от пропускной способности, которую вы можете иметь / хотите для каждого потребителя.
Относительно групп потребителей:
- Если все ваши потребители имеют одинаковую группу потребителей, сообщения будут сбалансированы по потребителям
- Если ваши потребители имеют разные группы потребителей, то каждое сообщение будет транслироваться всем процессам потребителей.
К вашему сведению: порядок сообщений хранится только внутри раздела, поэтому сообщения, приходящие из разных разделов, могут быть неупорядоченными.