Ответ
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