У меня есть похожая установка, 3 зоопарка и 3 брокера, и все работает хорошо.Я заметил три вещи, из вашей настройки, которые отличаются от моей, и вторая, которую я точно знаю, является проблемой (я сделал то же самое и не работал)
- Для
ZOOKEEPER_SERVERS
, который вы используетеодна и та же комбинация портов для всех зоопарков 2888:3888
.Из того, что я знаю, у вас должны быть разные порты , проверьте этот пример как ссылку . - Вы используете один и тот же
ZOOKEEPER_CLIENT_PORT
для всех ваших экземпляров Zookeeper, рассмотрите возможность использования разных для каждого экземпляраи также отличается от порта, используемого в ZOOKEEPER_SERVERS
. - Для служб kafka значение переменной среды
KAFKA_ZOOKEEPER_CONNECT
заключено в одинарные кавычки, я не думаю, что этопроблема , но немного несовместима с остальной частью вашей конфигурации.
Рассмотрите возможность изменения значений для ZOOKEEPER_SERVERS
и ZOOKEEPER_CLIENT_PORT
, например, примерно так:
ZOOKEEPER_CLIENT_PORT: 22181
ZOOKEEPER_SERVERS: zookeeper-1:22888:23888;zookeeper-2:32888:33888;zookeeper-3:42888:43888
И также не забудьте настроить значение для KAFKA_ZOOKEEPER_CONNECT
соответственно:
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:22181,zookeeper-2:32181,zookeeper-3:42181
clientPort порт для прослушивания клиентских подключений
server.X ... запишите два номера портов после каждого имени сервера: «2888» и «3888».Узлы используют прежний порт для подключения к другим узлам.Такое соединение необходимо для того, чтобы одноранговые узлы могли общаться, например, для согласования порядка обновлений.В частности, сервер ZooKeeper использует этот порт для подключения подписчиков к лидеру.Когда появляется новый лидер, последователь открывает TCP-соединение с лидером, использующим этот порт.Поскольку при выборе лидеров по умолчанию также используется протокол TCP, в настоящее время нам требуется еще один порт для выборов лидеров.Это второй порт в записи сервера.
Извлечение из Документов Zookeeper
Все вместе должно выглядеть примерно так (еще не проверял):
version: '3.3'
networks:
kafka_example:
driver: overlay
services:
zookeeper-1:
image: confluentinc/cp-zookeeper:5.0.1
volumes:
- '/volumedockerkafka/zookeeper-1/zookeeper_data:/var/lib/zookeeper:rw' # mount point
- '/volumedockerkafka/zookeeper-1/zookeeper_etc:/etc/zookeeper:rw' # mount point
environment:
ZOOKEEPER_SERVER_ID: 1
ZOOKEEPER_CLIENT_PORT: 22181
ZOOKEEPER_SERVERS: zookeeper-1:22888:23888;zookeeper-2:32888:33888;zookeeper-3:42888:43888
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
networks:
- kafka_example
zookeeper-2:
image: confluentinc/cp-zookeeper:5.0.1
volumes:
- '/volumedockerkafka/zookeeper-2/zookeeper_data:/var/lib/zookeeper:rw' # mount point
- '/volumedockerkafka/zookeeper-2/zookeeper_etc:/etc/zookeeper:rw' # mount point
environment:
ZOOKEEPER_SERVER_ID: 2
ZOOKEEPER_CLIENT_PORT: 32181
ZOOKEEPER_SERVERS: zookeeper-1:22888:23888;zookeeper-2:32888:33888;zookeeper-3:42888:43888
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
networks:
- kafka_example
zookeeper-3:
image: confluentinc/cp-zookeeper:5.0.1
volumes:
- '/volumedockerkafka/zookeeper-3/zookeeper_data:/var/lib/zookeeper:rw' # mount point
- '/volumedockerkafka/zookeeper-3/zookeeper_etc:/etc/zookeeper:rw' # mount point
environment:
ZOOKEEPER_SERVER_ID: 3
ZOOKEEPER_CLIENT_PORT: 42181
ZOOKEEPER_SERVERS: zookeeper-1:22888:23888;zookeeper-2:32888:33888;zookeeper-3:42888:43888
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
networks:
- kafka_example
message_queue_kafka-1:
image: confluentinc/cp-kafka:5.0.1
volumes:
- '/volumedockerkafka/kafka-1/kafka_data:/var/lib/kafka/data:rw' # mount point
- '/volumedockerkafka/kafka-1/kafka_etc:/etc/kafka:rw'
environment:
KAFKA_LOG4J_OPTS: '-Dlog4j.configuration=file:/etc/kafka/json_log4j.properties'
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:22181,zookeeper-2:32181,zookeeper-3:42181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://message_queue_kafka-1:9092
KAFKA_BROKER_ID: 1
KAFKA_SESSION_TIMEOUT_MS: 60000
KAFKA_HEARTBEAT_INTERVAL_MS: 20000
KAFKA_REBALANCE_TIMEOUT_MS: 300000
depends_on:
- zookeeper-1
- zookeeper-2
- zookeeper-3
networks:
- kafka_example
message_queue_kafka-2:
image: confluentinc/cp-kafka:5.0.1
volumes:
- '/volumedockerkafka/kafka-2/kafka_data:/var/lib/kafka/data:rw' # mount point
- '/volumedockerkafka/kafka-2/kafka_etc:/etc/kafka:rw'
environment:
KAFKA_LOG4J_OPTS: '-Dlog4j.configuration=file:/etc/kafka/json_log4j.properties'
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:22181,zookeeper-2:32181,zookeeper-3:42181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://message_queue_kafka-2:9092
KAFKA_BROKER_ID: 2ori
KAFKA_SESSION_TIMEOUT_MS: 60000
KAFKA_HEARTBEAT_INTERVAL_MS: 20000
KAFKA_REBALANCE_TIMEOUT_MS: 300000
depends_on:
- zookeeper-1
- zookeeper-2
- zookeeper-3
networks:
- kafka_example
message_queue_kafka-3:
image: confluentinc/cp-kafka:5.0.1
volumes:
- '/volumedockerkafka/kafka-3/kafka_data:/var/lib/kafka/data:rw' # mount point
- '/volumedockerkafka/kafka-3/kafka_etc:/etc/kafka:rw'
environment:
KAFKA_LOG4J_OPTS: '-Dlog4j.configuration=file:/etc/kafka/json_log4j.properties'
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:22181,zookeeper-2:32181,zookeeper-3:42181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://message_queue_kafka-3:9092
KAFKA_BROKER_ID: 3
KAFKA_SESSION_TIMEOUT_MS: 60000
KAFKA_HEARTBEAT_INTERVAL_MS: 20000
KAFKA_REBALANCE_TIMEOUT_MS: 300000
depends_on:
- zookeeper-1
- zookeeper-2
- zookeeper-3
networks:
- kafka_example
UPDATE
Я использую docker-compose, в моей настройке контейнеры могут находиться на любом из двух физических хостов.
version: '2'
services:
zookeeper-3:
image: confluentinc/cp-zookeeper:5.1.1
environment:
ZOOKEEPER_CLIENT_PORT: '42181'
ZOOKEEPER_INIT_LIMIT: '5'
ZOOKEEPER_SERVERS: zookeeper-1:22888:23888;zookeeper-2:32888:33888;zookeeper-3:42888:43888
ZOOKEEPER_SERVER_ID: '3'
ZOOKEEPER_SYNC_LIMIT: '2'
ZOOKEEPER_TICK_TIME: '2000'
zookeeper-2:
image: confluentinc/cp-zookeeper:5.1.1
environment:
ZOOKEEPER_CLIENT_PORT: '32181'
ZOOKEEPER_INIT_LIMIT: '5'
ZOOKEEPER_SERVERS: zookeeper-1:22888:23888;zookeeper-2:32888:33888;zookeeper-3:42888:43888
ZOOKEEPER_SERVER_ID: '2'
ZOOKEEPER_SYNC_LIMIT: '2'
ZOOKEEPER_TICK_TIME: '2000'
zookeeper-1:
image: confluentinc/cp-zookeeper:5.1.1
environment:
ZOOKEEPER_CLIENT_PORT: '22181'
ZOOKEEPER_INIT_LIMIT: '5'
ZOOKEEPER_SERVERS: zookeeper-1:22888:23888;zookeeper-2:32888:33888;zookeeper-3:42888:43888
ZOOKEEPER_SERVER_ID: '1'
ZOOKEEPER_SYNC_LIMIT: '2'
ZOOKEEPER_TICK_TIME: '2000'
kafka-1:
image: confluentinc/cp-enterprise-kafka:5.1.1
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-1:19092
KAFKA_BROKER_ID: '1'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:22181,zookeeper-2:32181,zookeeper-3:42181
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: '0'
kafka-2:
image: confluentinc/cp-enterprise-kafka:5.1.1
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-2:29092
KAFKA_BROKER_ID: '2'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:22181,zookeeper-2:32181,zookeeper-3:42181
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: '0'
kafka-3:
image: confluentinc/cp-enterprise-kafka:5.1.1
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-3:39092
KAFKA_BROKER_ID: '3'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:22181,zookeeper-2:32181,zookeeper-3:42181
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: '0'