Я пытаюсь использовать 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


Вы выполняете команды 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 разные.