Как увеличить Потребителей Кафки нет

Скажем, например - название темы Kafka - topic_X topic_X имеет 500 разделов в брокере Kafka

Теперь мы установили 500 потребителей для группы Consumer_X для обработки каждого раздела.

Куда Бежать этим 500 потребителям? В одной машине 500 ниток? Возможно ли это - потому что поток против ядра имеет отношение

Как этого добиться?

Даже если мы уменьшаем количество потребителей до 100 в группе Consumer_X (1 потребитель = 5 разделов), то те же самые вопросы действительны.

Пожалуйста, объясните это


person omg    schedule 28.07.2020    source источник


Ответы (2)


Основная цель группы потребителей - разделить работу между несколькими машинами. Запуск одного потребителя на поток также возможен, но в сценарии с высокой нагрузкой это не приносит никакой пользы.

Записи опроса от Kafka очень эффективны. Обычно их обработка является узким местом. Итак, основная идея состоит в том, чтобы разделить эту работу между несколькими машинами, чтобы каждое пользовательское приложение могло справляться с рабочей нагрузкой.

person BogdanSucaciu    schedule 28.07.2020

Отношение 1: 1 между разделами и потребителями возможно только в том случае, если в вашем случае использования:

  1. Записи распределяются равномерно: это означает, что ваш производитель должен иметь минимальный контроль над тем, какие разделы записываются при отправке записей. После Kafka 2.4 это много значит, потому что разделителем по умолчанию больше не RoundRobin, а Sticky. Поэтому вам нужно явно указать RoundRobin в производителе, чтобы это произошло.
  2. Равномерное назначение разделов. В последних версиях Kafka изменилось поведение по умолчанию, в котором разделы назначаются потребителям. После введения протокола инкрементной / кооперативной перебалансировки наблюдается тенденция, когда разделы назначаются одним и тем же потребителям, чтобы уменьшить паузы остановки во время перебалансировки. Использование более равномерного распределения означает отказ от нововведений нового протокола и, таким образом, побуждает ваших потребителей делать паузу, если жизнеспособность одного из них будет нарушена.

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

Я бы измерил эффективность 100: 1. Это кажется разумным, особенно если входящая пропускная способность невысока и некоторая задержка потребителя допустима.

person Ricardo Ferreira    schedule 04.08.2020