Доступ к кафке внутри и снаружи докера - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь запустить службу kafka с помощью docker-compose, и к ней должен быть доступ как внутри, так и снаружи docker. Таким образом, следует настроить правильных рекламодателей внутри и снаружи:

version: '3'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka
    ports:
      - "9094:9092"
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://127.0.0.1:9094
      KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://127.0.0.1:9094
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE

Проблема в том, что при попытке подключиться извне кластера, я не получаю 127.0.0.1 в качестве имени узла, а внутреннее имя хоста:

$ kafkacat -L -b 127.0.0.1:9094
Metadata for all topics (from broker -1: 127.0.0.1:9092/bootstrap):
 1 brokers:
  broker 1001 at 91588ea968d4:9092
 28 topics:
 ...

Разве целью KAFKA_ADVERTISED_LISTENERS и KAFKA_LISTENERS не является разрешение этой ситуации? Я попытался установить KAFKA_ADVERTISED_HOST_NAME, но он игнорируется (одна часть документации говорит, что она устарела, другая говорит, что она все еще активна), но, тем не менее, это не является ответом, поскольку я хочу два разных объявленных имени хоста для двух разных сетей.

Полагаю, старый вопрос остается: как заставить kafka работать внутри и снаружи docker-compose?

Ответы [ 3 ]

0 голосов
/ 07 апреля 2019

Согласился с ответом @Robin Moffatt о том, что внешний порт 9094 сопоставлен с 9092.

контейнера.

Помимо удаления этой конфигурации из docker-compose.yml, внешний порт 9094 должен быть сопоставлен с 9094.

контейнера.
ports:
  - "9094:9094"

PS: я не мог добавить это как комментарий к предыдущему ответу, следовательно, добавив его как новый ответ.

0 голосов
/ 22 мая 2019

Мне нужно было объявить LISTENERS как привязки к хосту докера, а затем объявить их по-разному - один для сети Docker, другой для хоста:

services:
  zookeeper:
    image: confluentinc/cp-zookeeper
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_SYNC_LIMIT: 2
  kafka:
    image: confluentinc/cp-kafka
    ports:
      - 9094:9094
    depends_on:
      - zookeeper
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: INTERNAL://kafka:9092,OUTSIDE://kafka:9094
      KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,OUTSIDE://localhost:9094
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
0 голосов
/ 11 ноября 2018

Ваша конфигурация слушателей выглядит правильно, проблема с вашим Docker Compose:

ports:
  - "9094:9092"

Вы отображаете 9094 («Снаружи») обратно на 9092 («Внутри»), и, таким образом, когда вы подключаетесь, вы подключаетесь к слушателю «Внутри». Если вы удалите эту строку конфигурации, то настройки прослушивателя должны работать так, как задумано.

Подробнее см. http://rmoff.net/2018/08/02/kafka-listeners-explained/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...