Я пытаюсь использовать Кафку.
Все настройки выполнены правильно, но когда я пытаюсь создать сообщение с консоли, я получаю следующую ошибку
WARN Error while fetching metadata with correlation id 39 :
{4-3-16-topic1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
Кафка версия: 2.11-0.9.0.0
apache-kafka
producer
Vishesh
источник
источник
2.2.0
в 2019 годуОтветы:
Это может быть связано с
advertised.host.name
настройкой в вашемserver.properties
.Что может случиться, что ваш продюсер пытается выяснить , кто является лидером данного раздела, выясняет его
advertised.host.name
иadvertised.port
и пытается подключиться. Если эти настройки не настроены правильно, он может подумать, что лидер недоступен.источник
Я перепробовал все рекомендации, перечисленные здесь. То, что работало для меня, было пойти
server.properties
и добавить:Оставьте
listeners
иadvertised_listeners
закомментируйте.источник
server.properties
файл находится по адресу/usr/local/etc/kafka/
advertised.listeners=PLAINTEXT://my.ip:9092
port
,advertised.host.name
являются устаревшими конфиги. kafka.apache.org/documentation/#brokerconfigsЧто для меня решило, так это настроить слушателей так:
Это заставляет брокера KAFKA слушать все интерфейсы.
источник
У меня была Кафка, работающая как контейнер Docker, и подобные сообщения попадали в журнал.
И
KAFKA_ADVERTISED_HOST_NAME
был установлен на «Кафка».В моем случае причиной ошибки была отсутствующая
/etc/hosts
запись для «kafka» в самом контейнере «kafka».Так, например, запуск
ping kafka
внутри контейнера 'kafka' завершится неудачно сping: bad address 'kafka'
В терминах Docker эта проблема решается путем указания
hostname
контейнера.Варианты достижения этого:
docker run --hostname ...
docker run -it --add-host ...
hostname
в докер-сочиненииhostname
в определении задачи AWS EC2источник
Я использую kafka_2.12-0.10.2.1:
vi config/server.properties
добавить строку ниже:
Имя хоста и порт брокер будет рекламировать производителям и потребителям. Если не установлено,
В противном случае он будет использовать значение, возвращенное из
java.net.InetAddress.getCanonicalHostName()
.остановить брокера Kafka:
перезапустить брокера:
и теперь вы не должны видеть никаких проблем.
источник
server.properties
было недостаточно, пока я не перезапустил брокера с перезагруженным демоном. Может быть , вы должны знать , что, но он уверен , помогло иметь его , указанный в этом ответеkafka 2.13
Я был свидетелем этой же проблемы в последние 2 недели, работая с Кафкой, и с тех пор читаю этот пост Stackoverflow.
Результатом в моем случае является то, что Кафка отправляет сообщение об ошибке обратно, но в то же время создает тему, которой раньше не было. Поэтому, если я попытаюсь снова создать какое-либо сообщение для этой темы после этого события, ошибка больше не будет отображаться как созданная тема.
ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: Возможно, моя конкретная установка Kafka была настроена на автоматическое создание темы, когда ее нет; это должно объяснить, почему в моем случае я могу видеть проблему только один раз для каждой темы после сброса тем: ваша конфигурация может отличаться, и в этом случае вы будете снова и снова получать одну и ту же ошибку.
С Уважением,
Лука Тампеллини
источник
Мы склонны получать это сообщение, когда пытаемся подписаться на тему, которая еще не была создана. Как правило, мы полагаемся на темы, которые создаются априори в наших развернутых средах, но у нас есть тесты компонентов, которые запускаются на докеризованном экземпляре kafka, который каждый раз запускается чистым.
В этом случае мы используем AdminUtils в нашей тестовой настройке, чтобы проверить, существует ли тема, и создать ее, если нет. Посмотрите это другое переполнение стека для получения дополнительной информации о настройке AdminUtils.
источник
Другая возможность для этого предупреждения (в 0.10.2.1) состоит в том, что вы пытаетесь опросить тему, которая была только что создана, и лидер этого тематического раздела еще не доступен, вы находитесь в середине выборов лидера.
Ожидание секунды между созданием темы и опросом - это обходной путь.
источник
Любой, кто пытается запустить kafka на kubernetes и сталкивается с этой ошибкой, вот что окончательно решило ее для меня:
Вы должны либо:
hostname
к спецификации стручка, чтобы кафка могла найти себя.или
hostPort
, то вам нужноhostNetwork: true
иdnsPolicy: ClusterFirstWithHostNet
Причина этого в том, что Кафке нужно поговорить с самим собой, и он решает использовать «объявленное» имя слушателя / хоста, чтобы найти себя, а не использовать localhost. Даже если у вас есть Служба, которая указывает рекламируемое имя хоста на модуль, оно не отображается внутри модуля. Я действительно не знаю, почему это так, но по крайней мере есть обходной путь.
источник
Добавление этого, так как это может помочь другим. Распространенной проблемой может быть неправильная настройка
advertised.host.name
. С помощью Docker, использующего docker-compose, установка имени службы внутри неKAFKA_ADVERTISED_HOST_NAME
будет работать, если вы не зададите и имя хоста.docker-compose.yml
пример:Вышеуказанное без
hostname: kafka
может выдатьLEADER_NOT_AVAILABLE
при попытке подключения. Вы можете найти пример рабочейdocker-compose
конфигурации здесьисточник
В моем случае все работало нормально дома, но в офисе не получалось, когда я подключался к офисной сети.
Поэтому изменил config / server.properties listeners = PLAINTEXT: //: 9092 to listeners = PLAINTEXT: // localhost: 9092
В моем случае я получал, когда описывал Consumer Group
источник
Если вы запускаете kafka на локальном компьютере, попробуйте обновить $ KAFKA_DIR / config / server.properties с помощью строки ниже:
listeners=PLAINTEXT://localhost:9092
и затем перезапустите kafka.источник
Я использую docker-compose для сборки контейнера Kafka с использованием
wurstmeister/kafka
image. ДобавлениеKAFKA_ADVERTISED_PORT: 9092
свойства в мойdocker-compose
файл решило эту ошибку для меня.источник
Поскольку я хотел, чтобы мой брокер kafka связывался с удаленными производителями и потребителями, я не хочу,
advertised.listener
чтобы его комментировали. В моем случае (при запуске kafka на kubernetes) я обнаружил, что моему модулю kafka не был назначен какой-либо IP-адрес кластера. Удаляя строкуclusterIP: None
из services.yml, kubernetes назначает внутренний ip для модуля kafka. Это решило мою проблему LEADER_NOT_AVAILABLE, а также удаленное подключение производителей / потребителей кафки.источник
Когда выдается ошибка LEADER_NOT_AVAILABLE, просто перезапустите брокер kafka:
с последующим
(Примечание: Zookeeper должен быть запущен к этому времени, если вы делаете иначе, он не будет работать)
источник
New leader is 0
.Эта строка ниже, я добавил
config/server.properties
, что решил мою проблему, аналогичную вышеупомянутой проблеме. Надеюсь, это поможет, это довольно хорошо задокументировано в файле server.properties, попробуйте прочитать и понять, прежде чем изменять это.advertised.listeners=PLAINTEXT://<your_kafka_server_ip>:9092
источник
Для всех, кто борется с настройкой Kafka ssl и видит эту ошибку LEADER_NOT_AVAILABLE. Одной из причин, которые могут быть повреждены, является хранилище ключей и хранилище доверенных сертификатов. В хранилище ключей необходимо иметь закрытый ключ сервера + подписанный сертификат сервера. В клиентском хранилище доверенных сертификатов необходимо иметь промежуточный сертификат CA, чтобы клиент мог аутентифицировать сервер kafka. Если вы будете использовать ssl для взаимодействия между брокерами, вам необходимо также установить это доверенное хранилище в свойствах server.properties брокеров, чтобы они могли аутентифицировать друг друга.
Этот последний фрагмент, который я по ошибке пропустил, заставил меня много мучительных часов узнать, что может означать эта ошибка LEADER_NOT_AVAILABLE. Надеюсь, это может кому-нибудь помочь.
источник
Проблема устранена после добавления настройки прослушивателя в файл server.properties, расположенный в каталоге config. listeners = PLAINTEXT: // localhost (или ваш сервер): 9092 Перезапустите kafka после этого изменения. Используемая версия 2.11
источник
Для меня это произошло из-за неправильной конфигурации
Docker port (9093)
Командный порт Kafka "bin / kafka-console-producer.sh --broker-list localhost: 9092 --topic TopicName"
Я проверил свою конфигурацию на соответствие порту и Теперь все в порядке
источник
Для меня причиной было использование специального Zookeeper, который не был частью пакета Kafka. Этот Zookeeper уже был установлен на машине для других целей. По всей видимости, Кафка не работает ни с одним Zookeeper. Переход на Zookeeper, поставляемый с Кафкой, решил это для меня. Чтобы не конфликтовать с существующим Zookeeper, мне пришлось изменить конфигурацию, чтобы Zookeeper прослушивал другой порт:
источник
Рекламируемые слушатели, упомянутые в ответах выше, могут быть одной из причин. Другие возможные причины:
bin/kafka-topics --list --zookeeper <zookeeper_ip>:<zookeeper_port>
Кроме того, убедитесь, что рекламируемый слушатель установлен
IP:9092
вместоlocalhost:9092
. Последнее означает, что брокер доступен только через локальный хост.Когда я столкнулся с ошибкой, я помню, что использовал
PLAINTEXT://<ip>:<PORT>
в списке серверов начальной загрузки (или список брокеров), и это работало, как ни странно.источник
Для меня я не указал идентификатор брокера для экземпляра Kafka. Иногда он получает новый идентификатор от zookeeper при перезапуске в среде Docker. Если идентификатор вашего брокера больше 1000, просто укажите переменную среды
KAFKA_BROKER_ID
.Используйте это, чтобы увидеть брокеров, темы и разделы.
источник
я знаю, что это было опубликовано давным-давно, я хотел бы поделиться, как я решил это.
так как у меня есть мой офисный ноутбук ( VPN и прокси был настроен).
я проверил переменную окружения NO_PROXY
он вернулся с пустыми значениями
теперь я установил NO_PROXY с localhost и 127.0.0.1
если вы хотите добавить к существующим значениям, то
после этого я перезапустил зоопарк и кафка заработала
как шарм
источник