我有一个docker-compose文件。
version: '3'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
ports:
- "9092"
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_CREATE_TOPICS: "test-topic:5:2"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
我正在使用
运行2个经纪人 docker-compose scale kafka=2
现在我想通过在kafka的docker bash中运行此文件来获取代理的ID
zookeeper-shell.sh localhost:2181 ls /brokers/ids
我所得到的是:-
Connecting to localhost:2181
KeeperErrorCode = ConnectionLoss for /brokers/ids
但是我能够使用和产生消息,知道为什么会发生这种情况吗?
答案 0 :(得分:1)
您指定的是localhost
,但是Zookeeper与Kafka位于不同的容器中。
尝试:
➜ docker exec -it tmp_kafka_1 zookeeper-shell.sh zookeeper:2181 ls /brokers/ids
Connecting to zookeeper:2181
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[1001]
还请注意,docker-compose scale kafka=2
不会启动第二个代理-使用
kafka_2 | [2020-04-28 14:55:19,104] ERROR [KafkaServer id=1002] Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
kafka_2 | java.lang.IllegalArgumentException: requirement failed: Configured end points localhost:9092 in advertised listeners are already registered by broker 1001
如果要运行多个代理的Docker Compose示例,请查看this one。