NoBrokersAvailable: NoBrokersAvailable-Kafka Ошибка

75
7

Я уже начал изучать Кафку. Попытка основных операций над ним. Я задумался над тем, что касается "брокеров".

Моя кафка работает, но когда я хочу создать раздел.

 from kafka import TopicPartition
(ERROR THERE) consumer = KafkaConsumer(bootstrap_servers='localhost:1234')
consumer.assign([TopicPartition('foobar', 2)])
msg = next(consumer)

traceback (последний последний вызов): Файл "", строка 1, в файле "/usr/local/lib/python2.7/dist-packages/kafka/consumer/group.py", строка 284, в init self._client = KafkaClient (метрики = self._metrics, ** self.config) Файл "/usr/local/lib/python2.7/dist-packages/kafka/client_async.py", строка 202, в init self.config ['api_version '] = self.check_version (timeout = check_timeout) Файл "/usr/local/lib/python2.7/dist-packages/kafka/client_async.py", строка 791, в check_version raise Errors.NoBrokersAvailable() kafka.errors. NoBrokersAvailable: NoBrokersAvailable

спросил(а) 2021-01-28T01:19:40+03:00 2 месяца, 2 недели назад
1
Решение
61

Вы не можете создавать разделы внутри потребителя. Разделы создаются при создании темы. Например, используя инструмент командной строки:

bin/kafka-topics.sh \
--zookeeper localhost:2181 \
--create --topic myNewTopic \
--partitions 10 \
--replication-factor 3

Это создает новую тему "myNewTopic" с 10 разделами (от 0 до 9) и коэффициентом репликации 3. (см. Http://docs.confluent.io/3.0.0/kafka/post-deployment.html#admin-operations и https://kafka.apache.org/documentation.html#quickstart_createtopic)

Внутри вашего потребителя, если вы вызываете assign(), это означает, что вы хотите использовать соответствующий раздел, и этот раздел должен существовать уже.

ответил(а) 2021-01-28T01:19:40+03:00 2 месяца, 2 недели назад
63

Похоже, вы хотите начать употреблять сообщения вместо создания разделов. Тем не менее - можете ли вы добраться до кафки в порту 1234? 9092 - порт по умолчанию kafkas, возможно, вы можете попробовать это. Если вы нашли правильный порт, но ваше приложение все еще производит ошибки, вы можете попробовать использовать консольный потребитель для проверки своей установки:

bin/kafka-console-producer.sh --broker-list localhost:<yourportnumber> --topic foobar


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

ответил(а) 2021-01-28T01:19:40+03:00 2 месяца, 2 недели назад
45

Не знаю, является ли этот ответ по-прежнему актуальным, но недавно разрешил эту же проблему в брокере VBox VM, недоступном для ОС Windows. Поскольку вы упомянули bootsrap_servers в KafkaConsumer, я предполагаю, что вы используете по крайней мере kafka 0.10.0.0

Пожалуйста, обратите внимание на advertised.listeners собственности в server.properties файл и установить его в PLAINTEXT://localhost:9092 виде PLAINTEXT://<broker_ip>:9092 PLAINTEXT://localhost:9092 или PLAINTEXT://<broker_ip>:9092

Но прежде чем вы установите это, убедитесь, что ваш брокер доступен из среды, в которой работает ваш потребитель (выполняя ping localhost).

Кроме того, вам необходимо перезапустить kafka-сервер и потребитель/производитель (независимо от того, что работает) и попробовать отправить/получить.

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

ПРИМЕЧАНИЕ. Эта конфигурация работает для Kafka Server> = 0.10.XX, но не для 0.8.2.X. Не проверено на 0.9.0.X

ответил(а) 2021-01-28T01:19:40+03:00 2 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема