Каким должно быть подходящее значение для параллелизма потребителей Kafka (в отношении масштабирования)? - PullRequest
0 голосов
/ 06 февраля 2019

Я создаю новый сервис, который станет потребителем темы Kafka.Это приложение Spring, поэтому я использую spring-kafka.

В теме 20 разделов.В начале в Куберне есть два случая.В будущем, в зависимости от нагрузки, мы хотим масштабировать и запускать дополнительные экземпляры.Какое должно быть подходящее значение kafka.consumer.concurrency в моем случае?Бьюсь об заклад, что 10, но я прав?

Когда есть только два экземпляра службы, каждый запускает 10 потоков, и каждый поток читает из одного раздела.Но что, если я хотел бы масштабировать сервис?Что произойдет, если я запустлю два дополнительных экземпляра?Насколько я знаю, когда новый потребитель присоединяется к группе потребителей, группа потребителей пытается «перебалансировать» нагрузку, чтобы назначить разделы каждому потребителю.

  1. Означает ли это, что два существующих экземпляра уменьшат количество потоков до 5 и будут прослушивать только 5 разделов (и каждый экземпляр будет обрабатывать 5 разделов)?
  2. Правильно ли моё понимание?
  3. Если нет, какое значение должно быть в моем случае?

Документация гласит:

если у вас больше разделов, чем потоков, некоторые потоки будут получать данные из нескольких разделов

Просто чтобы убедиться: если я установлю параллелизм, например, на 5, каждый поток будет читать из двух разделов.Повлияет ли это на производительность сервиса?

1 Ответ

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

Когда новый потребитель добавляется в ту же группу, Кафка выполнит балансирование;если потребителей больше, чем разделов, нет гарантии, что каждый экземпляр получит 5 разделов - Kafka просто увидит 40 потребителей, и 20 разделов будут распределены.Тем не менее, это, вероятно, зависит от настроенного Assignor - похоже, что по умолчанию RangeAssignor делает это таким образом.

Однако при превышении количества разделов контейнеры будут иметь незанятые потоки (назначенные разделы не будут).

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

Если нет, то какое должно быть соответствующее значение в моем случае?

Это полностью зависит от вашего приложения.

Итог;если вы начинаете с 2x10 потребителей и ожидаете, что вам может потребоваться 10x10, вы должны начать с 100 разделов.

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