无法使用Sarama Golang软件包创建Kafka生产者客户端 - "客户端/元数据在获取元数据时从代理获取错误:EOF"

时间:2018-06-12 21:43:06

标签: docker go apache-kafka sarama

版本:GoLang 1.10.2           卡夫卡4.4.1           Docker 18.03.1

我试图使用Shopify的Sarama软件包来测试我的Kafka实例。我使用Docker compose来站起来Kafka / Zookeeper,它都成功运行了。

当我尝试使用Sarama创建Producer客户端时,会引发错误。

当我运行以下

    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连接到localhost的经纪人: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:客户已经没有可用的经纪人与之交谈(你的群集是否可以访问?)

goroutine 1 [正在运行]: main.main()     /Users/benwornom/go/src/github.com/acstech/doppler-events/testprod/main.go:29 + 0x3ec 退出状态2

Sarama连续几次尝试创建一个生产者客户端,但每次都失败了。

我对Sarama" NewAsyncProducer"的理解方法是调用" NewClient",无论您是创建Producer还是Consumer,都会调用它。 NewClient尝试从Kafka代理收集元数据,这在我的情况下失败了。我知道它正在连接到Kafka经纪人,但一旦连接它似乎打破了。任何意见将是有益的。我的网络连接很强大,我无法想到任何干扰服务器的事情。据我所知,我只有一个代理和一个分区用于现有主题。我不认为我必须手动将主题分配给经纪人。如果我的客户与经纪人联系,为什么我不能为我的制作人建立持久的连接?

这是来自kafka日志文件,它在它死之前。

__ consumer_offsets-5 - >矢量(1),连接偏移-23-> Vector(1),__ consumer_offsets-43 - > Vector(1),__ consumer_offsets-32 - > Vector(1),__ consumer_offsets-21 - > Vector(1),__ consumer_offsets-10 - >矢量(1),连接偏移-20-> Vector(1),__ consumer_offsets-37 - >矢量(1),连接偏移-9-> Vector(1),connect-status-4 - > Vector(1),__ consumer_offsets-48 - > Vector(1),__ consumer_offsets-40 - > Vector(1),__ consumer_offsets-29 - > Vector(1),__ consumer_offsets-18 - >矢量(1),连接偏移-14-> Vector(1),__ consumer_offsets-7 - > Vector(1),__ consumer_offsets-34 - > Vector(1),__ consumer_offsets-45 - > Vector(1),__ consumer_offsets-23 - >矢量(1),连接偏移-6-> Vector(1),connect-status-1 - >矢量(1),连接偏移-17->向量(1),连接偏移-0->矢量(1),连接偏移-22-> Vector(1),__ consumer_offsets-26 - >矢量(1),连接偏移-11-> Vector(1),__ consumer_offsets-15 - > Vector(1),__ consumer_offsets-4 - > Vector(1),__ consumer_offsets-42 - > Vector(1),__ consumer_offsets-9 - > Vector(1),__ consumer_offsets-31 - > Vector(1),__ consumer_offsets-20 - >矢量(1),连接偏移-3-> Vector(1),__ consumer_offsets-1 - > Vector(1),__ consumer_offsets-12 - >矢量(1),连接偏移-8->矢量(1),连接偏移-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 - >矢量(1),连接偏移-16-> Vector(1),connect-status-0 - >向量(1),connect-offsets-5 - >矢量(1),连接偏移-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 - >矢量(1),连接偏移-13->矢量(1),连接偏移-24->向量(1),连接偏移-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),连接偏移-7->向量(1),连接偏移-18-> Vector(1)))(kafka.controller.KafkaController) [36mkafka_1 | [0m [2018-06-12 20:24:47,461] DEBUG [Controller 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 :(得分:0)

我遇到了同样的问题,并且做了以下解决我的问题的事情:

  1. 检查您正在使用的Kafka版本。传递给NewAsyncProducer时,配置中指定的默认Kafka版本为V0_8_2_0。确保在配置中指定正确的Kafka版本:

    config := sarama.NewConfig()
    config.Version = sarama.V1_1_0_0
    
  2. 确保您传递的代理URL正确。您应该传递代理URL,而不是Zookeeper URL或其他URL。默认的kafka端口为9092,因此,如果您使用默认端口,则网址应类似于BROKER_URL:9092