Не удается подключиться к док-контейнеру kafka из другого док-контейнера - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь подключиться к док-контейнеру kafka из другого док-контейнера. Но он не подключился.

Существует список контейнеров, используемых для обмена сообщениями kafka enter image description here

Сеть kafka-docker_default имеет дваконтейнеры kafka-docker_zookeeper_1 и kafka-docker_kafka0_1 enter image description here

Для запуска kafka и zookeeper я использовал файл docker-compose:

version: '2'
services:
  zookeeper:
    image: "confluentinc/cp-zookeeper:latest"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

# This has three listeners you can experiment with. 
# BOB for internal traffic on the Docker network
# FRED for traffic from the Docker-host machine (`localhost`)
# ALICE for traffic from outside, reaching the Docker host on the DNS name `never-gonna-give-you-up`
# Use 
  kafka0:
    image: "confluentinc/cp-kafka"
    ports:
      - '9092:9092'
      - '29094:29094'
    depends_on:
      - zookeeper
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: LISTENER_BOB://kafka0:29092,LISTENER_FRED://kafka0:9092,LISTENER_ALICE://kafka0:29094
      KAFKA_ADVERTISED_LISTENERS: LISTENER_BOB://kafka0:29092,LISTENER_FRED://localhost:9092,LISTENER_ALICE://never-gonna-give-you-up:29094
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_BOB:PLAINTEXT,LISTENER_FRED:PLAINTEXT,LISTENER_ALICE:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: LISTENER_BOB
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

Контейнеры dockercompose17138956372294708100_kafkatest.producer_1 и dockercompose17138956372294708100_kafkatest.consumer_1 предназначены для сообщений о производстве и потреблении. В то время как контейнер dockercompose17138956372294708100_kafkatest.producer_1 пытается подключиться к кластеру kafka с помощью параметра bootstrap.servers (localhost: 9092 или никогда не поддастся вам: 29094), он показал ошибку

%7|1569945335.015|BROKERFAIL|rdkafka#producer-1| [thrd:never-gonna-give-you-up:29094/bootstrap]: never-gonna-give-you-up:29094/bootstrap: failed: err: Local: Host resolution failure: (errno: Bad address)
%3|1569945335.015|FAIL|rdkafka#producer-1| [thrd:never-gonna-give-you-up:29094/bootstrap]: never-gonna-give-you-up:29094/bootstrap: Failed to resolve 'never-gonna-give-you-up:29094': Name or service not known (after 1656ms in state CONNECT)
%3|1569945335.015|ERROR|rdkafka#producer-1| [thrd:never-gonna-give-you-up:29094/bootstrap]: never-gonna-give-you-up:29094/bootstrap: Failed to resolve 'never-gonna-give-you-up:29094': Name or service not known (after 1656ms in state CONNECT)
%7|1569945335.015|STATE|rdkafka#producer-1| [thrd:never-gonna-give-you-up:29094/bootstrap]: never-gonna-give-you-up:29094/bootstrap: Broker changed state CONNECT -> DOWN
%3|1569945335.015|ERROR|rdkafka#producer-1| [thrd:never-gonna-give-you-up:29094/bootstrap]: 1/1 brokers are down

Как это исправить?

Ответы [ 2 ]

1 голос
/ 01 октября 2019

dockercompose17138956372294708100_kafkatest.producer_1 пытается подключиться к кластеру kafka с помощью параметра bootstrap.servers (localhost:9092 или never-gonna-give-you-up:29094)

из другого контейнера Docker, ни один из них не является правильным.

  1. never-gonna-give-you-up не существует нигде в качестве записи имени хоста / DNS в конфигурации Docker. На основании этой ошибки ваш внешний DNS-сервер также не знает, что это

  2. localhost относится к клиентскому контейнеру Kafka, а не к вашему хосту или контейнеру брокера.

В соответствии с вашей составной конфигурацией, вам необходимо подключиться к kafka0 хосту / сервису, который объявлен на порту 29092 дляbootstrap.servers

<code># BOB for internal traffic <b>on the Docker network</b>
KAFKA_ADVERTISED_LISTENERS: LISTENER_BOB://kafka0:29092

Вам также, вероятно, следует удалить LISTENER_ALICE, поскольку он не предоставляет никаких полезных сведений о соединении, если только внешнее имя хоста вашего хоста на самом деле не указаноnever-gonna-give-you-up

И вы захотите поместить своего производителя и потребителя как часть вашего файла композиции

0 голосов
/ 01 октября 2019

Пожалуйста, попробуйте эту конфигурацию:

version: '3'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    ports:
      - "32181:32181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 32181
      ZOOKEEPER_TICK_TIME: 2000

  kafka0:
    image: confluentinc/cp-kafka:latest
    ports:
     - "9090:9090"
    depends_on:
      - zookeeper
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:32181
      KAFKA_ADVERTISED_LISTENERS: LISTENER_INTERNAL://kafka0:29090,LISTENER_EXTERNAL://localhost:9090
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_INTERNAL:PLAINTEXT,LISTENER_EXTERNAL:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: LISTENER_INTERNAL
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"

В этой конфигурации, если вы подключаетесь от хоста к контейнеру брокера, вы используете IP localhost:9090. Если вы подключаетесь из других контейнеров в той же сети, вы используете kafka0:29090.

...