Ответ
В Go существует несколько популярных библиотек для работы с Kafka. Выбор зависит от требований к производительности, простоте использования и функциональности.
Основные игроки на рынке:
Sarama (
github.com/IBM/sarama
)- Описание: Одна из самых старых и популярных библиотек. Полностью написана на Go (pure Go).
- Плюсы: Хорошо протестирована, богатый функционал, не требует CGO, что упрощает сборку.
- Минусы: API может быть сложнее для новичков по сравнению с аналогами.
- Когда использовать: Когда нужна стабильная, проверенная временем библиотека с широким набором функций и без внешних зависимостей.
Confluent-kafka-go (
github.com/confluentinc/confluent-kafka-go
)- Описание: Официальная обёртка от Confluent над высокопроизводительной C-библиотекой
librdkafka
. - Плюсы: Максимальная производительность и надёжность. Полная совместимость с экосистемой Confluent (Schema Registry, ksqlDB).
- Минусы: Требует CGO и установленной
librdkafka
, что может усложнить сборку и развёртывание. - Когда использовать: В высоконагруженных системах, где производительность является критическим фактором.
- Описание: Официальная обёртка от Confluent над высокопроизводительной C-библиотекой
Kafka-go (
github.com/segmentio/kafka-go
)- Описание: Более современная альтернатива Sarama, также написана на Go.
- Плюсы: Простой и интуитивно понятный API для продюсеров и консьюмеров.
- Минусы: Может быть менее функциональной в некоторых сложных сценариях по сравнению с Sarama.
- Когда использовать: Для быстрой разработки и в проектах, где важна простота API.
Пример с sarama
(синхронный продюсер):
producer, err := sarama.NewSyncProducer([]string{"kafka:9092"}, nil)
if err != nil {
log.Fatalf("Failed to start Sarama producer: %v", err)
}
defer producer.Close()
msg := &sarama.ProducerMessage{
Topic: "my-topic",
Value: sarama.StringEncoder("Hello, Kafka!"),
}
partition, offset, err := producer.SendMessage(msg)
if err != nil {
log.Fatalf("Failed to send message: %v", err)
}
fmt.Printf("Message sent to partition %d at offset %dn", partition, offset)