Ответ
Оптимальное количество потребителей в одной consumer group напрямую зависит от количества партиций в топике, который они читают.
Основное правило: Количество потребителей в группе не должно превышать количество партиций. Каждая партиция может быть назначена только одному потребителю в рамках одной группы.
Рассмотрим сценарии для топика с N партициями:
- Кол-во потребителей < N: Некоторые потребители будут обрабатывать сообщения из нескольких партиций. Это нормальная ситуация, если нагрузка позволяет.
- Кол-во потребителей = N: Это идеальный сценарий для максимальной параллельной обработки. Каждый потребитель обрабатывает сообщения из одной партиции.
- Кол-во потребителей > N: Лишние потребители (
Кол-во потребителей - N) будут простаивать и не получат ни одной партиции для обработки. Это бесполезная трата ресурсов.
Масштабирование: Если вы хотите увеличить пропускную способность чтения из топика, вам нужно сначала увеличить количество партиций в этом топике, а затем добавить соответствующее количество экземпляров потребителей в группу.
Ответ 18+ 🔞
А, слушай, вот это тема, про которую все так загадочно молчат, а на деле всё проще пареной репы, ей-богу. Смотри, есть у тебя топик в Кафке, да? И есть в нём эти самые партиции — ну, типа отдельные очереди внутри одной большой очереди. Так вот, вся магия потребителей в одной группе крутится вокруг них.
Главное правило, которое надо выжечь на подкорке: сколько у тебя партиций в топике — столько максимум и может быть рабочих потребителей в группе. Больше — нихуя не выйдет. Одна партиция — один потребитель в группе. Второму туда уже не пролезть, он будет сидеть, как лох, и смотреть, как первый работает.
Допустим, у тебя в топике N партиций. Что будет?
- Потребителей меньше, чем N: Ну, тут всё ясно. Кому-то из них достанется по две, а то и три партиции. Работать будет, если, конечно, не сдохнет от нагрузки. Ничего криминального.
- Потребителей ровно N: О, ёперный театр, вот это красота! Идеальный расклад, мечта архитектора. Каждый потребитель — царь и бог в своей единственной партиции. Параллельная обработка на максимум, всё летит, как по маслу.
- Потребителей больше, чем N: А вот тут начинается цирк. Эти лишние, понимаешь,
Кол-во потребителей - Nштук — они будут просто висеть балластом. Ни одной партиции им не светит, будут они там своиpoll()вызывать в пустоту, ресурсы жрать и на сервера Кафки глаза строить. Бесполезные, блядь, мартышлюшки.
Хочешь масштабироваться? Логика проще некуда, но все почему-то тупят. Нельзя просто взять и накрутить потребителей, надеясь, что станет быстрее. Хуй с горы! Сначала ты лезешь в топик и увеличиваешь количество партиций в нём. А уж потом, как паровоз за сцепкой, добавляешь новых потребителей в группу под это новое количество. Всё, иначе нихуя не выйдет.