Прослушивание одного и того же порта через несколько контейнеров Docker - PullRequest
1 голос
/ 10 апреля 2019

Я запустил службу обмена сообщениями Kafka, где брокер Kafka настроен в докере и находится на порту 9092. Порт хоста 9092 сопоставлен с портом контейнера 9092. Теперь я пытаюсь вызвать потребителя, который слушает порт хоста 9092 потреблять сообщения. Я пытаюсь настроить потребительский контейнер после того, как все брокеры используют docker compose.

Я получаю ошибку, когда пытаюсь вызвать потребителя, порт 9092 уже выделен

Пожалуйста, кто-нибудь, помогите мне понять, правильный ли мой подход. Если это правильно, что я могу сделать, чтобы решить эту проблему

1 Ответ

4 голосов
/ 11 апреля 2019

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```
...