Ответ
Consumer Group в Kafka — это логическая группа потребителей, которые совместно обрабатывают сообщения из одного или нескольких топиков, обеспечивая масштабируемость и отказоустойчивость.
Ключевые принципы:
- Распределение партиций: Все партиции топика распределяются между потребителями внутри одной группы. Каждая партиция потребляется только одним потребителем из группы.
- Балансировка нагрузки: При добавлении или удалении потребителя Kafka автоматически перераспределяет партиции между оставшимися участниками группы (rebalance).
Пример: Топик orders с 4 партициями и Consumer Group notification-service с 2 потребителями.
Партиция 0 -> Consumer-1
Партиция 1 -> Consumer-1
Партиция 2 -> Consumer-2
Партиция 3 -> Consumer-2
Если Consumer-3 присоединится к группе, произойдет rebalance, и партиции распределятся примерно поровну.
Почему это важно?
- Горизонтальное масштабирование: Чтобы увеличить скорость обработки, достаточно добавить новых потребителей в группу (до количества партиций).
- Обработка «каждый-один раз» (exactly-once): Гарантирует, что сообщение из партиции будет обработано лишь одним потребителем группы.
- Отказоустойчивость: Если потребитель отключается, его партиции автоматически перераспределяются между другими, и обработка продолжается.
Важно: Потребители из разных групп независимо потребляют одни и те же сообщения, реализуя шаблон "публикация-подписка".