> Что такое consumer group в брокерах сообщений (Go)
Уровень: junior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Wildberries
Стек: Go
> Пример ответа
Consumer group (группа потребителей) - это логическое объединение нескольких consumer-инстансов, которые совместно обрабатывают сообщения из одного или нескольких топиков (partition). Основная цель - горизонтальное масштабирование потребления и обеспечение отказоустойчивости.
Внутри группы каждое сообщение из partition доставляется ровно одному consumer-у. Если consumer выходит из строя, его partition перераспределяются между оставшимися участниками группы (rebalancing). Это гарантирует, что сообщения не будут потеряны, но порядок обработки внутри partition сохраняется.
Пример на Go с использованием библиотеки segmentio/kafka-go:
GOpackage mainimport ("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 groupMinBytes: 10e3, // 10KBMaxBytes: 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.
> Похожие задачи по Go
Как обеспечить идемпотентность запросов на создание виртуальных машин
Насколько знаком с Kubernetes на уровне пользователя
Как передать данные от одного сервиса к множеству читателей с брокером сообщений
Что происходит при передаче данных между сервисами с брокером сообщений если сервис недоступен
> Похожие задачи по backend
Как обеспечить идемпотентность запросов на создание виртуальных машин
Насколько знаком с Kubernetes на уровне пользователя
Как передать данные от одного сервиса к множеству читателей с брокером сообщений
Что происходит при передаче данных между сервисами с брокером сообщений если сервис недоступен
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью