В чем разница между Consumer и Consumer Group

«В чем разница между Consumer и Consumer Group» — вопрос из категории Брокеры сообщений, который задают на 24% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Consumer — это отдельный клиент, читающий сообщения из топика Kafka. Он управляет своим offset и обрабатывает данные независимо.

Consumer Group — это группа Consumers, совместно обрабатывающих один топик. Kafka распределяет партиции между участниками группы для параллельной обработки. Каждая партиция назначается только одному Consumer в группе.

Пример:

// Consumer
consumer, _ := sarama.NewConsumer([]string{"localhost:9092"}, nil)
partitionConsumer, _ := consumer.ConsumePartition("topic", 0, sarama.OffsetNewest)

// Consumer Group
group, _ := sarama.NewConsumerGroup([]string{"localhost:9092"}, "group-id", nil)
handler := &consumerGroupHandler{}
err := group.Consume(context.Background(), []string{"topic"}, handler)

Ключевые отличия:

  • Группа обеспечивает балансировку нагрузки
  • В группе offset хранится в Kafka, у одиночного Consumer — локально
  • Группа поддерживает ребалансировку при добавлении/удалении Consumers