Невозможно создать клиент-производитель Kafka с пакетом Sarama Golang - «клиент / метаданные получили ошибку от брокера при получении метаданных: EOF» - PullRequest
0 голосов
/ 13 июня 2018

Версии: GoLang 1.10.2 Kafka 4.4.1 Docker 18.03.1

Я пытаюсь использовать пакет Sarama от Shopify, чтобы протестировать мой экземпляр Kafka.Я использовал Docker compose для поддержки Kafka / Zookeeper, и все это успешно работает.

Когда я пытаюсь создать клиент Producer с Sarama, выдается ошибка.

Когда я запускаю следующее

    package main

import (
"fmt"
"log"
"os"
"os/signal"
"time"

"strconv"

"github.com/Shopify/sarama"

)

func main() {


// Setup configuration
config := sarama.NewConfig()
config.Producer.Return.Successes = true
config.Producer.Partitioner = sarama.NewRandomPartitioner
config.Producer.RequiredAcks = sarama.WaitForAll
brokers := []string{"localhost:29092"}
producer, err := sarama.NewAsyncProducer(brokers, config)
if err != nil {
    // Should not reach here
    panic(err)
}

defer func() {
    if err := producer.Close(); err != nil {
        // Should not reach here
        panic(err)
    }
}()

Я получаю это

[sarama] 2018/06/12 17:22: 05 Инициализация нового клиента

[sarama] 2018/06/12 17:22:05 клиент / метаданные, извлекающие метаданные для всех тем из брокера localhost: 29092

[sarama] 2018/06 /12 17:22:05 Подключено к брокеру на локальном хосте: 29092 (незарегистрировано)

[sarama] 2018/06/12 17:22:05 клиент / метаданные получили ошибку от брокера при получении метаданных: EOF

[sarama] 2018/06/12 17:22:05 Закрытое соединение с брокером localhost: 29092

{sarama] 2018/06/12 17:22:05 клиент / метаданные нет доступного брокера для отправкизапрос метаданных на

[sarama] 2018/06/12 17:22:06 Закрытие паники клиента: kafka: на клиенте закончились доступные брокеры для общения (доступен ли ваш кластер?)

маршрут 1 [выполняется]: main.main () /Users/benwornom/go/src/github.com/acstech/doppler-events/testprod/main.go:29 + 0x3ec статус выхода 2

Сарамасделал несколько разЭто лишний раз для создания клиента-производителя, но каждый раз не удается.

Мое понимание метода NewAsyncProducer от Sarama заключается в том, что он вызывает NewClient, который вызывается независимо от того, создаете ли вы Producer или Consumer.NewClient пытается собрать метаданные от брокера Kafka, что не удается в моей ситуации.Я знаю, что он подключается к брокеру Kafka, но как только он подключается, кажется, что он сломаетсяЛюбые советы будут полезны.У меня сильное сетевое соединение, я не могу думать ни о чем, мешающем серверу.Насколько я знаю, у меня есть только один брокер и один раздел для существующей темы.Я не думаю, что должен вручную назначать тему для брокера.Если мой клиент соединяется с брокером, почему я не могу установить постоянное соединение для моего производителя?

Это из файла журнала kafka, прямо перед его смертью.

__ consumer_offsets-5 -> Vector (1), connect-offsets-23 -> Vector (1), __consumer_offsets-43 -> Vector (1), __consumer_offsets-32 -> Vector (1), __consumer_offsets-21 ->Vector (1), __consumer_offsets-10 -> Vector (1), connect-offsets-20 -> Vector (1), __consumer_offsets-37 -> Vector (1), connect-offsets-9 -> Vector (1), подключиться-status-4 -> Vector (1), __consumer_offsets-48 -> Vector (1), __consumer_offsets-40 -> Vector (1), __consumer_offsets-29 -> Vector (1), __consumer_offsets-18 -> Vector (1), connect-offsets-14 -> Vector (1), __consumer_offsets-7 -> Vector (1), __consumer_offsets-34 -> Vector (1), __consumer_offsets-45 -> Vector (1), __consumer_offsets-23 -> Vector (1), connect-offsets-6 -> Vector (1), connect-status-1 -> Vector (1), connect-offsets-17 -> Vector (1), connect-offsets-0 -> Vector (1), connect-offsets-22 -> Vector (1), __consumer_offsets-26 -> Vector (1), connect-offsets-11 -> Vector (1), __consumer_offsets-15 -> Vector (1), __consumer_offsets-4 ->Vector (1), __consumer_offsets-42 -> Vectили (1), __consumer_offsets-9 -> Vector (1), __consumer_offsets-31 -> Vector (1), __consumer_offsets-20 -> Vector (1), connect-offsets-3 -> Vector (1), __consumer_offsets-1-> Vector (1), __consumer_offsets-12 -> Vector (1), connect-offsets-8 -> Vector (1), connect-offsets-19 -> Vector (1), connect-status-3 -> Vector (1), __confluent.support.metrics-0 -> Vector (1), __consumer_offsets-17 -> Vector (1), __consumer_offsets-28 -> Vector (1), __consumer_offsets-6 -> Vector (1), __consumer_offsets-39-> Vector (1), __consumer_offsets-44 -> Vector (1), connect-offsets-16 -> Vector (1), connect-status-0 -> Vector (1), connect-offsets-5 -> Vector (1), connect-offsets-21 -> Vector (1), __consumer_offsets-47 -> Vector (1), __consumer_offsets-36 -> Vector (1), __consumer_offsets-14 -> Vector (1), __consumer_offsets-25 ->Vector (1), __consumer_offsets-3 -> Vector (1), __consumer_offsets-30 -> Vector (1), __consumer_offsets-41 -> Vector (1), connect-offsets-13 -> Vector (1), connect-offsets-24 -> Vector (1), connect-offsets-2-> Vector (1), connect-configs-0 -> Vector (1), __consumer_offsets-11 -> Vector (1), __consumer_offsets-22 -> Vector (1), __consumer_offsets-33 -> Vector (1), __consumer_offsets-0 -> Вектор (1), connect-offsets-7 -> Вектор (1), connect-offsets-18 -> Вектор (1))) (kafka.controller.KafkaController) [36mkafka_1 | [0m [2018-06-12 20: 24: 47,461] DEBUG [ID контроллера = 1] Темы, не входящие в предпочитаемую реплику для брокера 1 Map () (kafka.controller.KafkaController) [36mkafka_1 | [0m [2018-06-12 20: 24: 47,462]]TRACE [Controller id = 1] Коэффициент дисбаланса лидера для брокера 1 составляет 0,0 (kafka.controller.KafkaController)

1 Ответ

0 голосов
/ 25 ноября 2018

Я столкнулся с той же проблемой и решил следующую проблему:

  1. Проверьте, какую версию Kafka вы используете.Версия Kafka по умолчанию, указанная в конфигурации при передаче NewAsyncProducer, равна V0_8_2_0.Убедитесь, что в конфигурации указана правильная версия Kafka:

    config := sarama.NewConfig()
    config.Version = sarama.V1_1_0_0
    
  2. Убедитесь, что URL-адрес брокера, который вы передаете, верен.Вы должны передавать URL брокера, а не URL Zookeeper или другой URL.Порт kafka по умолчанию - 9092, поэтому URL должен быть похож на BROKER_URL:9092, если вы использовали порт по умолчанию.

...