Ответ
В 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) Ответ 18+ 🔞
А, слушай, про Кафку на Go? Ну тут, блядь, как всегда — выбор есть, и он тебя ебёт, потому что каждая библиотека считает себя самой охуенной. Сейчас разложу по полочкам, чтобы ты не сдох от выбора.
Вот три главных претендента, которые все друг друга на хуй посылают:
-
Sarama (
github.com/IBM/sarama) — это типа наш ветеран, дед, который всё видел.- Что это? Старая, проверенная временем бандура, полностью на Go написана.
- Плюсы: Её все используют, функционала — овердохуища, и не требует никаких левых C-шных зависимостей. Собрал и поехал.
- Минусы: API у неё, блядь, местами такой, что хочется вилкой в глаз себе ткнуть. Не для слабаков.
- Брать, когда: Нужна надёжная рабочая лошадка, и тебе похуй на изящный код, лишь бы работало.
-
Confluent-kafka-go (
github.com/confluentinc/confluent-kafka-go) — это типа нарядный усатый официант из дорогого ресторана.- Что это? Официальная обёртка от самих создателей Кафки. Но под капотом у неё — здоровая C-шная библиотека
librdkafka. - Плюсы: Производительность — просто пиздец какая. Летит как угорелая. И со всей ихней экосистемой дружит идеально.
- Минусы: А вот тут, сука, подстава — нужен этот самый CGO и установленная
librdkafka. Сборка может превратиться в такой пиздец, что мама не горюй. - Брать, когда: Гонишь терабайты данных в секунду и готов ради скорости продать душу чёрту.
- Что это? Официальная обёртка от самих создателей Кафки. Но под капотом у неё — здоровая C-шная библиотека
-
Kafka-go (
github.com/segmentio/kafka-go) — это молодой и дерзкий хипстер.- Что это? Более свежая альтернатива старому деду Sarama. Тоже на чистом Go.
- Плюсы: 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)
Вот и весь сказ. Выбирай по потребностям: хочешь просто — бери третью, хочешь мощно — вторую, а если по старинке и надёжно — первую. Главное — не начинай все три сразу, а то получишь ебаный зоопарк в зависимостях.