Landoop / fast-data-dev: не удалось установить соединение с узлом -1

Я пытаюсь использовать kafka с образом докера Landoop/fast-data-dev Я выполнил следующие команды

Я запустил контейнер докеров

docker run --rm -it -p 2183:2181 -p 3030:3030 -p 8081:8081 -p 8082:8082 -p 8083:8083 -p 9093:9092 -e ADV_HOST=127.0.0.1 landoop/fast-data-dev

затем я запустил команду bash

docker run --rm -it --net=host landoop/fast-data-dev bash

тогда я создал тему

kafka-topics --create --zookeeper localhost:2183 --replication-factor 1 --partitions 3 --topic my-topic

потом попробовал отправить данные в тему

kafka-console-producer --broker-list localhost:9093 --topic my-topic

но я получал следующую ошибку

[2018-10-27 20: 08: 24,655] ПРЕДУПРЕЖДЕНИЕ [идентификатор клиента-производителя = производитель-консоль] Не удалось установить соединение с узлом -1. Брокер может быть недоступен. (org.apache.kafka.clients.NetworkClient)

ps: из-за проблемы "порт уже выделен" я изменил сопоставления kafka и zookeeper на 9093 и 2183

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
0
994
1

Ответы 1

Вы выполняете команды CLI внутри контейнера, поэтому вы не можете просто переназначить порт на хосте. На самом деле вам также необходимо установить порт в контейнере, в котором работает Kafka, в этом случае используя переменную BROKER_PORT.

docker run --rm -it -p 2183:2181 -p 3030:3030 -p 8081:8081 -p 8082:8082 -p 8083:8083 -p 9093:9093 -e ADV_HOST=127.0.0.1 -e BROKER_PORT=9093 landoop/fast-data-dev

В противном случае вам все равно придется использовать localhost:9092 в контейнере, даже если внешний порт - 9093, но вам никогда не нужно было добавлять флаги -p в любом случае, чтобы открыть порты извне, если вы собирались запускать bash в контейнере для выполнения каких-либо действий.

Если вы хотите использовать приложения вне контейнера, см. этот блог, в котором используются контейнеры Confluent, но применяется та же концепция, хотя переменные landoop разные.

Другие вопросы по теме