Кафка: у клиента кончились доступные брокеры - PullRequest
1 голос
/ 26 апреля 2019

ОБНОВЛЕНИЕ: Оказалось, у меня проблема с моими портами в Docker. Не уверен, почему это исправило это явление.

Мне кажется, я столкнулся со странной ошибкой. Я использую библиотеку Sarama и могу успешно создать потребителя.

func main() {
 config = sarama.NewConfig()
 config.ClientID = "go-kafka-consumer"
 config.Consumer.Return.Errors = true
 // Create new consumer
 master, err := sarama.NewConsumer("localhost:9092", config)
 if err != nil {
    panic(err)
 }

 defer func() {
     if err := master.Close(); err != nil {
         panic(err)
     }
 }()

 partitionConsumer, err := master.ConsumePartition("myTopic",0, 
 sarama.OffsetOldest)
 if err != nil {
     panic(err)
 }
}

Как только я разбиваю этот код и выхожу за пределы основной процедуры, я сталкиваюсь с ошибкой:

Кафка: у клиента кончились доступные брокеры, с которыми можно поговорить (Доступен ли ваш кластер?)

Я разделил свой код следующим образом: предыдущий метод main (), который я сейчас преобразовал в потребительский пакет с методом NewConsumer (), и мой новый метод main () вызывают NewConsumer () следующим образом:

c := consumer.NewConsumer()

Оператор паники запускается в строке с sarama.NewConsumer и печатает kafka: client has run out of available brokers to talk to (Is your cluster reachable?)

Почему такой взлом моего кода побудил Сараму не заставить потребителя? Сараму нужно бежать прямо с магистрали?

1 Ответ

2 голосов
/ 26 апреля 2019

I думаю, вы создаете таким образом 2 или более потребителей, которые группируются в одну группу (вероятно, go-kafka-consumer). У вашего брокера есть тема с 1 разделом, поэтому одна из групп назначается, а другая выдает это сообщение об ошибке. Если вы увеличите разделы этой темы до 2, ошибка исчезнет. Но я думаю, что ваша проблема в том, что вы каким-то образом создали больше потребителей, чем раньше.

С Кафка в двух словах :

Потребители также могут быть организованы в группы потребителей по определенной теме - каждый потребитель в группе читает из уникального раздела, и группа в целом потребляет все сообщения из всей темы. Если у вас больше потребителей, чем разделов, то некоторые потребители будут бездействовать, поскольку у них нет разделов для чтения. Если у вас больше разделов, чем потребителей, потребители будут получать сообщения от нескольких разделов. Если у вас одинаковое количество потребителей и разделов, каждый потребитель читает сообщения по порядку с одного раздела.

Они точно не будут выдавать ошибку, так что это будет проблемой с Сарамой.

...