Лидер недоступен Kafka в Console Producer

Я пытаюсь использовать Kafka.
Все настройки выполнены правильно, но когда я пытаюсь создать сообщение с консоли, я продолжаю получать следующую ошибку

WARN Error while fetching metadata with correlation id 39 : 
     {4-3-16-topic1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)

Версия Kafka: 2.11-0.9.0.0


person Vishesh    schedule 04.03.2016    source источник
comment
какую версию кафки вы используете? как узнать, что все конфигурации правильные? пожалуйста, попробуйте добавить больше информации   -  person Nautilus    schedule 04.03.2016
comment
Я использую версию 2.11-0.9.0.0, я сказал, что все конфиги правильные, потому что она работает.   -  person Vishesh    schedule 04.03.2016
comment
@Vishesh Можете ли вы предоставить результат следующей команды ./bin/kafka-topics.sh --zookeeper localhost: 2181 --describe --topic yourTopicName   -  person avr    schedule 04.03.2016
comment
такая же ошибка и для меня. Я получаю лидера ./bin/kafka-topics.sh --zookeeper ‹ip›: 2181 --describe --topic yourTopicName, но при отправке сообщения производителю он продолжает выдавать ошибку LEADER_NOT_AVAILABLE.   -  person Vilva    schedule 29.03.2017
comment
Я могу подтвердить эту проблему на kafka 2.2.0 в 2019 году   -  person WestCoastProjects    schedule 26.07.2019
comment
Моя ситуация такова, что я использую прослушиватель подстановочных знаков, и автоматическое создание новой темы приведет к этой ошибке.   -  person jchnxu    schedule 20.12.2019
comment
вы должны сначала запустить сервер kafka zookeeper, а затем запустить kafka-broker .. он будет работать нормально.   -  person shailendra pathak    schedule 15.12.2020
comment
Возможно, вы удалили каталог / tmp / kafka-logs. В моем случае я удалил метаданные kafka, чтобы исправить ошибки .lock, тогда эта проблема возникнет. Я не могу прочитать существующие данные, которые я загрузил в тему, потому что их метаданные отсутствуют. Единственное, что вы можете сделать, это создать новую тему и снова загрузить данные.   -  person Krishna Kumar Singh    schedule 08.03.2021


Ответы (25)


Это может быть связано с настройкой advertised.host.name в вашем server.properties.

Что может случиться, так это то, что ваш продюсер пытается выяснить, кто является лидером для данного раздела, вычисляет его advertised.host.name и advertised.port и пытается подключиться. Если эти параметры настроены неправильно, может показаться, что лидер недоступен.

person Alexey Raga    schedule 15.03.2016
comment
Это устранило ошибку для меня ... но в комментариях в server.properties говорится, что если Advertised.host.name не настроен, он будет использовать host.name. И имя хоста было настроено в файле server.properties. - person Abdullah Shaikh; 13.07.2016
comment
У меня такая же проблема, и это сработало для меня для kafka 0.9 - person minhas23; 19.08.2016
comment
Установка моего IP-адреса вместо сгенерированного AWS общедоступного имени хоста решила многие мои проблемы. - person Spechal; 29.11.2018

Я испробовал все рекомендации, перечисленные здесь. Что сработало для меня, так это перейти к server.properties и добавить:

port = 9092
advertised.host.name = localhost 

Оставьте listeners и advertised_listeners закомментированными.

person Vikas Deolaliker    schedule 22.11.2016
comment
решение работает для меня (ссылка на решение vikas) Просто хочу добавить, что для меня на MAC server.properties файл находится по адресу /usr/local/etc/kafka/ - person Edison Q; 15.03.2017
comment
у меня сработало это advertised.listeners=PLAINTEXT://my.ip:9092 - person Mr. Crowley; 16.06.2017
comment
НЕ ИСПОЛЬЗУЙТЕ ЭТО - port, advertised.host.name являются устаревшими конфигурациями. kafka.apache.org/documentation/#brokerconfigs - person Stephane; 06.09.2018

Что решило это для меня, так это настроить слушателей следующим образом:

advertised.listeners = PLAINTEXT://my.public.ip:9092
listeners = PLAINTEXT://0.0.0.0:9092

Это заставляет брокера KAFKA прослушивать все интерфейсы.

person Pinelopi Kouleri    schedule 12.10.2017
comment
Это должен быть принятый ответ. Работает для многоузловой конфигурации и имеет большой смысл. - person Piyush Shrivastava; 09.08.2018
comment
Можем ли мы использовать это в нашем файле app.yaml? - person Coder; 05.05.2020
comment
если вам нужно установить его в docker-compose, в свойстве среды на kafka: ADVERTISED_LISTENERS: PLAINTEXT: // localhost: 9092 LISTENERS: PLAINTEXT: //0.0.0.0: 9092 - person Daniel Belém Duarte; 13.06.2021

Я был свидетелем этой же проблемы в течение последних 2 недель, работая с Kafka, и с тех пор читаю этот пост в Stackoverflow.

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

В моем случае результат таков: Kafka отправляет сообщение об ошибке, но в то же время создает тему, которой раньше не было. Поэтому, если я попытаюсь снова отправить какое-либо сообщение в эту тему после этого события, ошибка больше не будет отображаться в качестве созданной темы.

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: возможно, что моя конкретная установка Kafka была настроена на автоматическое создание темы, когда она не существует; это должно объяснить, почему в моем случае я вижу проблему только один раз для каждой темы после сброса тем: ваша конфигурация может быть другой, и в этом случае вы будете получать одну и ту же ошибку снова и снова.

С уважением,

Лука Тампеллини

person Luca Tampellini    schedule 05.09.2018
comment
Привет, Лука. Я также автоматически создаю новые темы. Мой вопрос: как позволить вашим потребителям автоматически открывать для себя эту новую тему? Мои потребители этого не сделают. И после перезапуска моих потребителей новые сообщения могут быть получены, но сообщение, вызвавшее создание темы, потеряно. - person jchnxu; 20.12.2019
comment
Да, кафка создает тему автоматически. Это должен быть принятый ответ. По крайней мере, это сработало для меня. Я рад, что вы это разместили. Спасибо. - person John Doe; 03.03.2021
comment
В моем случае я создал одну тему. Вчера он производил данные. Сегодня он не производит никаких данных. Только выдача ошибки LEADER_NOT_AVAILABLE. Что мне теперь делать? - person Krishna Kumar Singh; 08.03.2021

У меня была запущена kafka как контейнер Docker, и похожие сообщения хлынули в журнал.
И KAFKA_ADVERTISED_HOST_NAME был установлен на «kafka».

В моем случае причиной ошибки была отсутствующая запись /etc/hosts для 'kafka' в самом контейнере 'kafka'.
Так, например, запуск ping kafka внутри контейнера 'kafka' завершится ошибкой с ping: bad address 'kafka'

С точки зрения Docker эта проблема решается указанием hostname для контейнера.

Варианты достижения этого:

person Vlad.Bachurin    schedule 03.08.2016
comment
Это не ответ как таковой, но для справки в будущем: когда (или если) docker / docker # 1143 разрешен, появится простой способ ссылаться на хост контейнера независимо от того, какая ОС используется. - person Michael Ahlers; 25.09.2016
comment
Если вы используете образ докера wurstmeister / kafka-docker (который, вероятно, самый популярный на момент написания этой статьи), см. примечания относительно настройки что env var и почему - person RyanQuey; 02.07.2020

Я использую kafka_2.12-0.10.2.1:

vi config/server.properties

добавить строку ниже:

listeners=PLAINTEXT://localhost:9092
  • Нет необходимости изменять рекламируемые прослушиватели, поскольку они получают значение из свойства std listener.

Имя хоста и порт, которые брокер будет рекламировать производителям и потребителям. Если не установлен,

  • он использует значение для "слушателей", если настроено

В противном случае будет использоваться значение, возвращенное из java.net.InetAddress.getCanonicalHostName().

остановить брокера Kafka:

bin/kafka-server-stop.sh

перезапустить брокера:

bin/kafka-server-start.sh -daemon config/server.properties

и теперь вы не должны видеть никаких проблем.

person Dean Jain    schedule 22.06.2017
comment
Это решило проблему для меня, модификации server.properties было недостаточно, пока я не перезапустил брокера с помощью перезагруженного демона. Возможно, вы должны это знать, но это помогло, если это было указано в этом ответе - person Bossan; 02.06.2019
comment
Это сработало для меня, большое спасибо, братан. Я использую kafka 2.13 - person Alejandro Herrera; 06.02.2020

Мы часто получаем это сообщение, когда пытаемся подписаться на тему, которая еще не была создана. Обычно мы полагаемся на то, что темы будут созданы априори в наших развернутых средах, но у нас есть тесты компонентов, которые запускаются против докеризованного экземпляра kafka, который каждый раз запускается с чистого листа.

В этом случае мы используем AdminUtils. в нашей тестовой настройке, чтобы проверить, существует ли тема, и создать ее, если нет. См. Это другое переполнение стека для получения дополнительных сведений о настройке AdminUtils.

person Ryan McKay    schedule 01.08.2016

Другая возможность для этого предупреждения (в 0.10.2.1) заключается в том, что вы пытаетесь опросить по теме, которая была только что создана, а лидер для этого раздела тем еще не доступен, вы находитесь в середине выборов руководства.

Временное решение - подождать секунду между созданием темы и опросом.

person Benoit Delbosc    schedule 07.06.2017
comment
Это была моя проблема. - person Andi Jay; 18.08.2020

Для всех, кто пытается запустить kafka на кубернетах и ​​сталкивается с этой ошибкой, вот что окончательно решило ее для меня:

Вам необходимо либо:

  1. Добавьте hostname в спецификацию модуля, чтобы kafka могла найти себя.

or

  1. Если вы используете hostPort, то вам нужны hostNetwork: true и dnsPolicy: ClusterFirstWithHostNet

Причина этого в том, что Kafka нужно разговаривать с самим собой, и он решает использовать «объявленное» имя прослушивателя / хоста, чтобы найти себя, а не использовать localhost. Даже если у вас есть служба, которая указывает объявленное имя хоста на модуль, оно не отображается изнутри модуля. Я действительно не знаю, почему это так, но, по крайней мере, есть обходной путь.

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: zookeeper-cluster1
  namespace: default
  labels:
    app: zookeeper-cluster1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zookeeper-cluster1
  template:
    metadata:
      labels:
        name: zookeeper-cluster1
        app: zookeeper-cluster1
    spec:
      hostname: zookeeper-cluster1
      containers:
      - name: zookeeper-cluster1
        image: wurstmeister/zookeeper:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 2181
        - containerPort: 2888
        - containerPort: 3888

---

apiVersion: v1
kind: Service
metadata:
  name: zookeeper-cluster1
  namespace: default
  labels:
    app: zookeeper-cluster1
spec:
  type: NodePort
  selector:
    app: zookeeper-cluster1
  ports:
  - name: zookeeper-cluster1
    protocol: TCP
    port: 2181
    targetPort: 2181
  - name: zookeeper-follower-cluster1
    protocol: TCP
    port: 2888
    targetPort: 2888
  - name: zookeeper-leader-cluster1
    protocol: TCP
    port: 3888
    targetPort: 3888

---

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kafka-cluster
  namespace: default
  labels:
    app: kafka-cluster
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kafka-cluster
  template:
    metadata:
      labels:
        name: kafka-cluster
        app: kafka-cluster
    spec:
      hostname: kafka-cluster
      containers:
      - name: kafka-cluster
        image: wurstmeister/kafka:latest
        imagePullPolicy: IfNotPresent
        env:
        - name: KAFKA_ADVERTISED_LISTENERS
          value: PLAINTEXT://kafka-cluster:9092
        - name: KAFKA_ZOOKEEPER_CONNECT
          value: zookeeper-cluster1:2181
        ports:
        - containerPort: 9092

---

apiVersion: v1
kind: Service
metadata:
  name: kafka-cluster
  namespace: default
  labels:
    app: kafka-cluster
spec:
  type: NodePort
  selector:
    app: kafka-cluster
  ports:
  - name: kafka-cluster
    protocol: TCP
    port: 9092
    targetPort: 9092
person Chris    schedule 15.07.2017
comment
1. не работает% ERROR: Local: Ошибка разрешения хоста: kafka-cluster: 9092/1001: Не удалось разрешить 'kafka-cluster: 9092': имя узла или имя сервера предоставлены или неизвестны - person Lu32; 11.10.2017
comment
Я добавил имя хоста, такое же, как имя службы, работает на меня! - person karthikeayan; 14.11.2018
comment
Спасибо, БОГ !!! Я открыл аналогичный вопрос, и я согласен, что единственное, что вам нужно в k8s env, - это имя хоста, но вам также нужны kafka_listeners в развертывании kafka: - name: KAFKA_LISTENERS value: PLAINTEXT: //: 9092 - person Игор Ташевски; 23.04.2021
comment
Это решило мою проблему. Я не мог вас поблагодарить! Я потратил день на эту проблему. - person Gagan T K; 14.06.2021

В моем случае он работал нормально дома, но не работал в офисе, когда я подключаюсь к офисной сети.

Итак, изменил config / server.properties listeners = PLAINTEXT: //: 9092 на listeners = PLAINTEXT: // localhost: 9092

В моем случае при описании группы потребителей я получал

person Yoga Gowda    schedule 21.09.2018
comment
Какого черта они не устанавливают правильные значения по умолчанию, мне это помогло. - person powder366; 09.03.2019

Добавление этого, так как это может помочь другим. Распространенной проблемой может быть неправильная конфигурация advertised.host.name. Если Docker использует установку docker-compose, имя службы внутри KAFKA_ADVERTISED_HOST_NAME не будет работать, если вы также не зададите имя хоста. docker-compose.yml пример:

  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    hostname: kafka
    environment:
      KAFKA_ADVERTISED_HOST_NAME: kafka
      KAFKA_CREATE_TOPICS: "test:1:1"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Вышеупомянутое без hostname: kafka может выдать LEADER_NOT_AVAILABLE при попытке подключения. Вы можете найти пример работающей docker-compose конфигурации здесь

person Paizo    schedule 25.05.2018

Если вы используете kafka на локальном компьютере, попробуйте обновить $ KAFKA_DIR / config / server.properties с помощью строки ниже: listeners=PLAINTEXT://localhost:9092, а затем перезапустите kafka.

person MrKulli    schedule 30.11.2018
comment
как мне это сделать на docker-compose.yml? - person AC28; 15.04.2019
comment
Вы можете использовать сценарий оболочки точки входа docs.docker.com/compose/compose-file / # точка входа с docker compose and overwrite (sed) listeners в server.properties. - person MrKulli; 16.04.2019

Я использую docker-compose для создания контейнера Kafka с использованием образа wurstmeister/kafka. Добавление свойства KAFKA_ADVERTISED_PORT: 9092 в мой docker-compose файл решило эту ошибку для меня.

person Priyanka    schedule 14.06.2017

Поскольку я хотел, чтобы мой брокер kafka соединялся с удаленными производителями и потребителями, я не хочу, чтобы advertised.listener был закомментирован. В моем случае (запуск kafka на кубернетах) я обнаружил, что моему модулю kafka не назначен IP-адрес кластера. Удалив строку clusterIP: None из services.yml, кубернет назначает внутренний IP-адрес модулю kafka. Это решило мою проблему с LEADER_NOT_AVAILABLE, а также удаленное подключение производителей / потребителей kafka.

person Anum Sheraz    schedule 16.01.2018

Когда возникает ошибка LEADER_NOT_AVAILABLE, просто перезапустите брокер kafka:

/bin/kafka-server-stop.sh

с последующим

/bin/kafka-server-start.sh config/server.properties

(Примечание: к этому времени Zookeeper должен быть запущен, иначе он не сработает)

person Dan    schedule 21.02.2018
comment
да. происходит, когда сначала запускается kafka, а после - zookeeper. - person panchicore; 09.03.2018
comment
Я сделал это, и это не совсем решает проблему. Что странно, так это то, что брокер инициализируется так, как если бы он был лидером. как в New leader is 0. - person Sammy; 15.07.2018

Эта строка ниже, которую я добавил в config/server.properties, решила мою проблему, аналогичную описанной выше. Надеюсь, это поможет, это довольно хорошо документировано в файле server.properties, попробуйте прочитать и понять, прежде чем изменять это. advertised.listeners=PLAINTEXT://<your_kafka_server_ip>:9092

person ravibeli    schedule 23.05.2018

Если вы получаете повторяющиеся сообщения об ошибках, подобные этому:

Error while fetching metadata with correlation id 3991 : {your.topic=LEADER_NOT_AVAILABLE}

Or

Discovered group coordinator 172.25.1.2:9092 (id: 2147483645 rack: null) (org.apache.kafka.clients.consumer.internals.AbstractCoordinator:677)
(Re-)joining group (org.apache.kafka.clients.consumer.internals.AbstractCoordinator:509)
Group coordinator 172.25.1.2:9092 (id: 2147483645 rack: null) is unavailable or invalid, will attempt rediscovery (org.apache.kafka.clients.consumer.internals.AbstractCoordinator:729)
Discovered group coordinator 172.25.40.219:9092 (id: 2147483645 rack: null) (org.apache.kafka.clients.consumer.internals.AbstractCoordinator:677)
Group coordinator 172.25.1.2:9092 (id: 2147483645 rack: null) is unavailable or invalid, will attempt rediscovery (org.apache.kafka.clients.consumer.internals.AbstractCoordinator:729)

Затем вам нужно настроить параметры прослушивателя следующим образом в файле kafka server.properties:

 listeners=PLAINTEXT://your.server.ip:9092

Это решение, опробованное на Apacke Kafka 2.5.0 и объединенной платформе 5.4.1.

person Arsalan Siddiqui    schedule 22.07.2020
comment
У меня точно такая же проблема. Вот ссылка: github.com/Rapter1990/springbootkafka - person Tony Brand; 11.02.2021

Для всех, кто борется с настройкой SSL Kafka и видит эту ошибку LEADER_NOT_AVAILABLE. Одной из причин, по которой может произойти сбой, является хранилище ключей и хранилище доверенных сертификатов. В хранилище ключей должен быть закрытый ключ сервера + подписанный сертификат сервера. В клиентском хранилище доверенных сертификатов вам необходимо иметь промежуточный сертификат CA, чтобы клиент мог аутентифицировать сервер kafka. Если вы будете использовать ssl для связи между брокерами, вам нужно, чтобы это хранилище доверенных сертификатов также было установлено в server.properties брокеров, чтобы они могли аутентифицировать друг друга.

Последний фрагмент, который я по ошибке пропустил, заставил меня утомиться, пытаясь понять, что может означать эта ошибка LEADER_NOT_AVAILABLE. Надеюсь, это кому-нибудь поможет.

person vojtmen    schedule 27.10.2017
comment
Что вы подразумеваете под приватным ключом сервера? У меня есть ключ CA и подписанный сертификат сервера в хранилище ключей сервера, тогда как в хранилище доверенных сертификатов клиента у меня есть сертификат CA .. Но все же я получаю эти ошибки .. - person phaigeim; 08.05.2018
comment
Извините, я имел в виду закрытый ключ + сертификат. Я настраивал большой кластер и где-то в бюрократической цепочке допустил ошибку, поэтому один из сертификатов не соответствовал CSR. Это может быть и другая причина. Дважды проверьте, что md5 закрытого ключа, сертификата совпадает и этот сертификат можно проверить в вашем хранилище доверенных сертификатов. Truststore обычно содержит корневой и промежуточный сертификаты. - person vojtmen; 11.05.2018

Проблема решена после добавления настройки прослушивателя в файл server.properties, расположенный в каталоге config. listeners = PLAINTEXT: // localhost (или ваш сервер): 9092 Перезапустите kafka после этого изменения. Используемая версия 2.11

person Jitray    schedule 11.07.2018

Для меня я не указывал идентификатор брокера для экземпляра Kafka. Иногда он получает новый идентификатор от zookeeper при перезапуске в среде Docker. Если ваш идентификатор брокера больше 1000, просто укажите переменную среды KAFKA_BROKER_ID.

Используйте это, чтобы увидеть брокеров, темы и разделы.

brew install kafkacat
kafkacat -b [kafka_ip]:[kafka_poot] -L
person Anderson    schedule 15.09.2019
comment
Это мне помогло. Zookeeper похож на диспетчер кластера и отслеживает всех брокеров, даже если вы используете только одного брокера. Если вы не укажете идентификатор брокера, будет назначен случайный идентификатор, и это будет выглядеть так, как будто разные брокеры подключаются и отключаются. При создании темы одному брокеру будет назначен лидер этой темы, поэтому, если этот первый брокер отключится навсегда, вы больше никогда не сможете отправить сообщение в эту тему. Мне также пришлось очистить каталоги данных для wurstmeister / zookeeper в /opt/zookeeper-3.4.13/data и для wurstmeister / kafka в / kafka и начать заново. - person Phil; 17.09.2020

Для меня это произошло из-за неправильной конфигурации порта Docker (9093)
командного порта Kafka "bin / kafka-console-producer.sh --broker-list localhost: 9092 --topic TopicName "- я проверил свою конфигурацию на соответствие порту, и теперь все в порядке.

person guillaume verneret    schedule 26.04.2018

Для меня причиной было использование определенного Zookeeper, не входящего в пакет Kafka. Этот Zookeeper уже был установлен на машине для других целей. Видимо Kafka не работает ни с одним Zookeeper. Переход на Zookeeper, поставляемый с Kafka, решил эту проблему для меня. Чтобы не конфликтовать с существующим Zookeeper, мне пришлось изменить мою конфигурацию, чтобы Zookeeper прослушивал другой порт:

[root@host /opt/kafka/config]# grep 2182 *
server.properties:zookeeper.connect=localhost:2182
zookeeper.properties:clientPort=2182
person Onnonymous    schedule 04.06.2019

Рекламируемые слушатели, упомянутые в ответах выше, могут быть одной из причин. Другие возможные причины:

  1. Тема могла не быть создана. Вы можете проверить это с помощью bin/kafka-topics --list --zookeeper <zookeeper_ip>:<zookeeper_port>
  2. Проверьте свои серверы начальной загрузки, которые вы передали производителю, чтобы получить метаданные. Если сервер начальной загрузки не содержит последних метаданных по теме (например, когда он потерял свое заявление zookeeper). Вы должны добавить более одного сервера начальной загрузки.

Кроме того, убедитесь, что для рекламируемого прослушивателя установлено значение IP:9092 вместо localhost:9092. Последнее означает, что брокер доступен только через localhost.

Когда я столкнулся с ошибкой, я вспомнил, что использовал PLAINTEXT://<ip>:<PORT> в списке серверов начальной загрузки (или списке брокеров), и это сработало, как ни странно.

bin/kafka-console-producer --topic sample --broker-list PLAINTEXT://<IP>:<PORT>
person JavaTechnical    schedule 09.06.2019

Я знаю, что это было опубликовано много лет назад, и я хотел бы рассказать, как я решил эту проблему.
поскольку у меня есть офисный ноутбук (были настроены VPN и прокси).
я проверил переменную среды NO_PROXY

> echo %NO_PROXY%

он вернулся с пустыми значениями
теперь я установил NO_PROXY с localhost и 127.0.0.1

> set NO_PROXY=127.0.0.1,localhost  

если вы хотите добавить к существующим значениям, тогда

> set NO_PROXY=%NO_PROXY%,127.0.0.1,localhost  

после этого я перезапустил zookeeper и kafka
работал как шарм

person Abhishek D K    schedule 15.12.2019

Попробуйте это listeners = PLAINTEXT: // localhost: 9092 Это должно быть полезно

Большое спасибо

person saurabhshcs    schedule 16.12.2020
comment
Пожалуйста, отредактируйте свой ответ, включив в него объяснение того, как это работает и почему это помогает решить проблему, описанную в вопросе. См. Как ответить. - person Gander; 16.12.2020
comment
@saurabhshcs У меня такая же проблема. Вот ссылка: github.com/Rapter1990/springbootkafka - person Tony Brand; 11.02.2021