Не удалось запустить экземпляр Kafka с помощью docker

#docker #apache-kafka

Вопрос:

Я пытаюсь запустить настройку multibroker kafka, и ниже приведен мой файл docker-compose.yml

  version: '3'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    container_name: zoom
    ports:
      - "2181:2181"
  kafka1:
      image: wurstmeister/kafka
      container_name: kafkacont1
      ports:
        - "9092:9092"
      environment:
          KAFKA_BROKER_ID: 1
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
          KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092,PLAINTEXT_HOST://localhost:29092
          KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
          KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
          KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

  kafka2:
    image: wurstmeister/kafka
    container_name: kafkacont2
    ports:
      - "9093:9093"
    environment:
          KAFKA_BROKER_ID: 2
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
          KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9093,PLAINTEXT_HOST://localhost:39092
          KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
          KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
          KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
 

когда я бегу docker-compose -f docker-compose.yml up -d

терминал говорит , что контейнеры созданы, но когда я это делаю docker ps , я не вижу этих контейнеров

Комментарии:

1. Просто попробуйте docker-compose -f docker-compose.yml up и проверьте, какие ошибки/предупреждения выводятся на экран

2. @SachithMuhandiram да,я запустил без флага-d, и я получил сообщение об ошибке, в котором говорится, что я должен добавить переменную KAFKA_LISTENERS, если мне нужно использовать KAFKA_ADVERTISED_LISTENERS, и я добавил KAFKA_LISTENERS: ОТКРЫТЫЙ ТЕКСТ://kafka1:9092, ОТКРЫТЫЙ ТЕКСТ_ХОСТ://локальный хост:29092 для kafka1, и это сработало

3. Имейте в виду, что оба брокера конкурируют за ресурсы одной и той же машины, поэтому будут работать не так быстро, как только один брокер, и не будут по-настоящему отказоустойчивыми

4. @Thejas, Значит, ваша проблема устранена? если да, пожалуйста, опубликуйте это в качестве ответа

5. @Thejas Одним из главных преимуществ Кафки является то, что данные могут быть реплицированы. Если один брокер терпит неудачу, то другие все равно могут обслуживать те же данные… Очевидно, что если ваша одна машина выходит из строя (ваш хост Docker), то все брокеры (и смотрители зоопарка) мертвы. Таким образом, нет никакой реальной выгоды в предоставлении этих услуг за пределами сети Docker

Ответ №1:

Мой обновленный файл docker-compose.yml, чтобы использовать KAFKA_ADVERTISED_LISTENERS, нам нужно предоставить KAFKA_LISTENERS

  version: '3'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    container_name: zoom
    ports:
      - "2181:2181"
  kafka1:
    image: wurstmeister/kafka
    container_name: kafkacont1
    ports:
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: PLAINTEXT://kafka1:9092,PLAINTEXT_HOST://localhost:29092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092,PLAINTEXT_HOST://localhost:29092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

  kafka2:
    image: wurstmeister/kafka
    container_name: kafkacont2
    ports:
      - "9093:9093"
    environment:
      KAFKA_BROKER_ID: 2
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: PLAINTEXT://kafka2:9093,PLAINTEXT_HOST://localhost:39092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9093,PLAINTEXT_HOST://localhost:39092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
 

Я добавил переменную KAFKA_LISTENERS в обе службы кафки