Какую функцию выполняет Consumer Group в Apache Kafka?

«Какую функцию выполняет Consumer Group в Apache Kafka?» — вопрос из категории Брокеры сообщений, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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, и партиции распределятся примерно поровну.

Почему это важно?

  1. Горизонтальное масштабирование: Чтобы увеличить скорость обработки, достаточно добавить новых потребителей в группу (до количества партиций).
  2. Обработка «каждый-один раз» (exactly-once): Гарантирует, что сообщение из партиции будет обработано лишь одним потребителем группы.
  3. Отказоустойчивость: Если потребитель отключается, его партиции автоматически перераспределяются между другими, и обработка продолжается.

Важно: Потребители из разных групп независимо потребляют одни и те же сообщения, реализуя шаблон "публикация-подписка".