> Что такое consumer group в брокерах сообщений (Go)

Уровень: junior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Wildberries

Стек: Go

> Пример ответа

Consumer group (группа потребителей) - это логическое объединение нескольких consumer-инстансов, которые совместно обрабатывают сообщения из одного или нескольких топиков (partition). Основная цель - горизонтальное масштабирование потребления и обеспечение отказоустойчивости.

Внутри группы каждое сообщение из partition доставляется ровно одному consumer-у. Если consumer выходит из строя, его partition перераспределяются между оставшимися участниками группы (rebalancing). Это гарантирует, что сообщения не будут потеряны, но порядок обработки внутри partition сохраняется.

Пример на Go с использованием библиотеки segmentio/kafka-go:

GO
package main
import (
"context"
"log"
"github.com/segmentio/kafka-go"
)
func main() {
// Настройка consumer для группы "my-group"
r := kafka.NewReader(kafka.ReaderConfig{
Brokers: []string{"localhost:9092"},
Topic: "my-topic",
GroupID: "my-group", // идентификатор consumer group
MinBytes: 10e3, // 10KB
MaxBytes: 10e6, // 10MB
})
defer r.Close()
for {
msg, err := r.ReadMessage(context.Background())
if err != nil {
log.Fatal("failed to read message:", err)
}
log.Printf("message at offset %d: %s = %s\n", msg.Offset, string(msg.Key), string(msg.Value))
}
}

При запуске нескольких экземпляров этого кода с одинаковым GroupID они автоматически распределят между собой партиции топика. Если один экземпляр упадёт, остальные подхватят его партиции после ребалансировки.

Ключевые моменты:

  • Каждая партиция принадлежит ровно одному consumer в группе.
  • Количество consumer-ов в группе не должно превышать количество партиций (иначе часть consumer-ов будет простаивать).
  • Ребалансировка может вызывать задержки и временную недоступность, поэтому для критичных сценариев используют статическое членство или Cooperative Sticky Assignor.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью