Какое оптимальное количество потребителей (consumers) в одной группе для топика Kafka?

Ответ

Оптимальное количество потребителей в одной consumer group напрямую зависит от количества партиций в топике, который они читают.

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

Рассмотрим сценарии для топика с N партициями:

  • Кол-во потребителей < N: Некоторые потребители будут обрабатывать сообщения из нескольких партиций. Это нормальная ситуация, если нагрузка позволяет.
  • Кол-во потребителей = N: Это идеальный сценарий для максимальной параллельной обработки. Каждый потребитель обрабатывает сообщения из одной партиции.
  • Кол-во потребителей > N: Лишние потребители (Кол-во потребителей - N) будут простаивать и не получат ни одной партиции для обработки. Это бесполезная трата ресурсов.

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

Ответ 18+ 🔞

А, слушай, вот это тема, про которую все так загадочно молчат, а на деле всё проще пареной репы, ей-богу. Смотри, есть у тебя топик в Кафке, да? И есть в нём эти самые партиции — ну, типа отдельные очереди внутри одной большой очереди. Так вот, вся магия потребителей в одной группе крутится вокруг них.

Главное правило, которое надо выжечь на подкорке: сколько у тебя партиций в топике — столько максимум и может быть рабочих потребителей в группе. Больше — нихуя не выйдет. Одна партиция — один потребитель в группе. Второму туда уже не пролезть, он будет сидеть, как лох, и смотреть, как первый работает.

Допустим, у тебя в топике N партиций. Что будет?

  • Потребителей меньше, чем N: Ну, тут всё ясно. Кому-то из них достанется по две, а то и три партиции. Работать будет, если, конечно, не сдохнет от нагрузки. Ничего криминального.
  • Потребителей ровно N: О, ёперный театр, вот это красота! Идеальный расклад, мечта архитектора. Каждый потребитель — царь и бог в своей единственной партиции. Параллельная обработка на максимум, всё летит, как по маслу.
  • Потребителей больше, чем N: А вот тут начинается цирк. Эти лишние, понимаешь, Кол-во потребителей - N штук — они будут просто висеть балластом. Ни одной партиции им не светит, будут они там свои poll() вызывать в пустоту, ресурсы жрать и на сервера Кафки глаза строить. Бесполезные, блядь, мартышлюшки.

Хочешь масштабироваться? Логика проще некуда, но все почему-то тупят. Нельзя просто взять и накрутить потребителей, надеясь, что станет быстрее. Хуй с горы! Сначала ты лезешь в топик и увеличиваешь количество партиций в нём. А уж потом, как паровоз за сцепкой, добавляешь новых потребителей в группу под это новое количество. Всё, иначе нихуя не выйдет.