Ответ
Основное правило: количество активных Consumer в группе не может превышать количество Partition в топике, на который они подписаны. Лишние Consumer будут бездействовать.
Почему это важно:
- Каждая Partition может быть назначена только одному Consumer в рамках группы для гарантии порядка обработки сообщений.
- Это ограничение определяет максимальный параллелизм чтения из топика.
Пример:
Если топик orders имеет 3 партиции, а в группе processor-group 5 консьюмеров, то только 3 консьюмера получат назначение на партиции и будут обрабатывать данные. Остальные 2 останутся в idle-состоянии.
Рекомендации:
- Для максимального параллелизма устанавливайте количество Consumer равным количеству Partition.
- Чтобы увеличить пропускную способность обработки, сначала увеличьте количество партиций в топике (это требует пересоздания топика или использования специальных инструментов).
Ответ 18+ 🔞
А, слушай, смотри, тут есть одна простая, но пиздец как важная штука, которую все сначала проёбывают. Запоминай раз и навсегда, чтобы потом не выть.
Вот представь себе очередь в столовую. Партиция — это одна касса. А консьюмер в группе — это кассирша, одна такая тётка с половником. Так вот, правило железобетонное, ёпта: больше кассирок, чем касс, быть не может. Иначе они друг другу будут по рукам этим половником биться, пытаясь одну котлету на двоих выдать.
Если у тебя в топике orders всего 3 кассы (партиции), а ты нанял аж 5 кассирок (консьюмеров) в бригаду processor-group, то что будет? Правильно, две тётки будут просто стоять, чесать жопу и курить в подсобке. Работы им не дадут. Потому что одна касса — одна ответственная тётка с половником, иначе начнётся пиздец и бардак, кто кому что уже выдал.
К чему это всё, спросишь? А к тому, что твой максимальный параллелизм, то есть скорость, с которой ты жрёшь сообщения из топика, упирается в количество этих самых партиций. Хоть тысячу консьюмеров запусти — работать будут только столько, сколько партиций.
Так что делать, если не успеваешь обрабатывать? Первое и главное — не плоди лишних бездельников-консьюмеров, они тебе не помогут, только ресурсы жрать будут. А чтобы реально ускориться, надо добавить касс (партиций) в топик. Но это, блядь, целая история, часто топик заново создавать надо, так что думай об этом заранее, а не когда уже всё ебёт кипятком.
Короче, золотое правило: количество рабочих консьюмеров в группе <= количеству партиций в топике. Всё, запомнил и иди делай.