KAFKA_ADVERTISED_LISTENERS
необходимо указать как переменную окружения с localhost:<port>
.
По умолчанию слушатель Kafka будет прослушивать порт 9092, и когда производитель / потребитель подключится к брокеру, он объявит список брокеров как часть запроса метаданных с host:9092
.
Здесь вы запускаете его в Docker, поэтому хост в списке метаданных брокера будет доступен только в сети Docker.
Чтобы это работало, нам нужно заставить брокера Kafka прослушивать другой порт, добавить его в advertised.listeners
, а также добавить сопоставление портов для нового порта.
ports:
- "29092:29092"
environment:
- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
- KAFKA_LISTENERS=INTERNAL://0.0.0.0:9092,EXTERNAL://0.0.0.0:29092
- KAFKA_ADVERTISED_LISTENERS=EXTERNAL://localhost:29092,INTERNAL://kafka0:9092
- KAFKA_INTER_BROKER_LISTENER_NAME=INTERNAL
- KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT```