#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 в обе службы кафки