Перегородка и пропускная способность Kafka - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть начальный опыт работы с kafka, и я пытаюсь изучить его детали.

Я пытаюсь понять, как разделы kafka могут помочь улучшить пропускную способность;во всей информации, которую я нашел в Интернете;объясняется, что больше разделов означает больше параллельных потоков;которые имеют смысл.

Как бы то ни было, с другой точки зрения это не так.

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

Мне кажется, что мне не хватает некоторых деталей о внутренней работе. Вы можете помочь мне объяснить, как разделы kafka (более одного) могут помочь улучшить пропускную способность для фиксированного числапотребители против одиночной кафки.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

https://kafka.apache.org/intro

Когда я начал изучать кафку;У меня такой же вопрос.Следующее объяснение поможет вам ответить на ваш вопрос:

Допустим, у вас есть тема A с 3 разделами: X, Y и Z.

Первое, что нужно понять, это то, как данные распределяются по разделам:

Производитель может выбрать, в какой раздел будет отправлено сообщение.Таким образом, ваш производитель может отправить сообщение № 1 в раздел-X, сообщение № 2 в раздел-Y и сообщение № 3 в раздел-Z.Таким же образом другие производители могут выбирать, в какой раздел будут записаны данные.Если ваш производитель не выберет раздел, то kafka выберет для вас.Для дополнительной информации;Пожалуйста, проверьте API производителя.Производитель никогда не должен отправлять сообщение № 1 в раздел-X, раздел-Y и раздел-Z.Вы можете создавать реплики для обеспечения отказоустойчивости. Разделы не являются репликами .

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

Kafka partition distribution

(на изображении; P0, P1, P2 и P3 - разделы. Группа потребителей Aимеет потребителей C1 и C2. C1 прослушивает P0, P3 и C2 слушает P1 и P2. В конце концов, ваша группа потребителей A получит данные из всех разделов.)

  1. Если ваша группа потребителей имела3 потребителя, и вы добавляете одного нового потребителя, тогда он будет сидеть идеально. Нет потребителей в группе потребителей <= количество разделов </strong>.
  2. Если в вашей группе потребителей было 2 потребителя, и вы добавили нового, то сработает перебалансировка.Kafka назначит один раздел вашему потребителю.
  3. Если это новая группа потребителей, то kafka назначит все разделы этому новому потребителю.

Теперь давайте предположим;ваш потребитель является однопоточным, и обработка сообщения занимает около 1 секунды, тогда ваша пропускная способность будет равна 1 мсг / с в случае № 3.

в случае № 2;это будет 3 мсг / сек.Потому что каждый потребитель слушает разные разделы и обрабатывает данные.

В случае № 1;Вы не получите никакой выгоды.

0 голосов
/ 26 февраля 2019

Я думаю, что ваше первое недоразумение заключается в

10 сообщений в секунду из данной темы.

В Кафке тема не совсем конкретная вещь.Вместо этого вы должны рассматривать его как набор разделов с одинаковыми именами и конфигурацией.

Затем в

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

Это не совсем правильно, особенно если учитывать Группы потребителей , что является ключевой особенностью Kafka.

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

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

Кроме того, разделы могут быть на разных посредниках, что опять-таки помогает для масштабируемости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...