我正在尝试使用3个zookeeper和3个kafka节点部署docker kafka集群。 kafka节点不断打印出以下错误:
[main-SendThread(zookeeper-1:2181)] INFO org.apache.zookeeper.ClientCnxn - Opening socket connection to server zookeeper-1/10.0.0.5:2181. Will not attempt to authenticate using SASL (unknown error)
[main-SendThread(zookeeper-1:2181)] INFO org.apache.zookeeper.ClientCnxn - Socket connection established to zookeeper-1/10.0.0.5:2181, initiating session
[main-SendThread(zookeeper-1:2181)] INFO org.apache.zookeeper.ClientCnxn - Unable to read additional data from server sessionid 0x0, likely server has closed socket, closing socket connection and attempting reconnect
当zookeeper节点继续打印时:
WARN Cannot open channel to 1 at election address
zookeeper-1/10.0.0.5:3888 (org.apache.zookeeper.server.quorum.QuorumCnxManager)
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:558)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:610)
at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:838)
at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:957)
[2019-03-01 17:24:30,930] INFO Resolved hostname: zookeeper-1 to address: zookeeper-1/10.0.0.5 (org.apache.zookeeper.server.quorum.QuorumPeer)
[2019-03-01 17:24:30,931] WARN Cannot open channel to 2 at election address zookeeper-2/10.0.0.7:3888 (org.apache.zookeeper.server.quorum.QuorumCnxManager)
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:558)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:610)
at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:838)
at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:957)
看起来像zookeeper节点不能相互通信,但我检查了几次docker-compose yaml,我找不到奇怪的。有人能帮助我吗?
docker-compose.yaml:
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: 2181
ZOOKEEPER_SERVERS: zookeeper-1:2888:3888;zookeeper-2:2888:3888;zookeeper-3:2888:3888
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: 2181
ZOOKEEPER_SERVERS: zookeeper-1:2888:3888;zookeeper-2:2888:3888;zookeeper-3:2888:3888
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: 2181
ZOOKEEPER_SERVERS: zookeeper-1:2888:3888;zookeeper-2:2888:3888;zookeeper-3:2888:3888
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_ZOOKEEPER_CONNECT: 'zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181'
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_ZOOKEEPER_CONNECT: 'zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181'
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://message_queue_kafka-2:9092
KAFKA_BROKER_ID: 2
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_ZOOKEEPER_CONNECT: 'zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181'
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
最后我在这里得到了奇怪的结果:https://forums.docker.com/t/cannot-get-zookeeper-to-work-running-in-docker-using-swarm-mode/27109/2
为了让zookeeper集群工作,看起来,当KAFKA_BROKER_ID为x时,您需要将0.0.0.0指定为主机名x。它似乎与端口号无关,因为它们是不同的机器(虚拟地)。
这是我的新撰写文件:
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'
- '/volumedockerkafka/zookeeper-1/zookeeper_etc:/etc/zookeeper:rw'
environment:
ZOOKEEPER_SERVER_ID: 1
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_SERVERS: 0.0.0.0:2888:3888;zookeeper-2:2888:3888;zookeeper-3:2888:3888
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_MAX_CLIENT_CNXNS: 200
networks:
- kafka_example
zookeeper-2:
image: confluentinc/cp-zookeeper:5.0.1
volumes:
- '/volumedockerkafka/zookeeper-2/zookeeper_data:/var/lib/zookeeper:rw'
- '/volumedockerkafka/zookeeper-2/zookeeper_etc:/etc/zookeeper:rw'
environment:
ZOOKEEPER_SERVER_ID: 2
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_SERVERS: zookeeper-1:2888:3888;0.0.0.0:2888:3888;zookeeper-3:2888:3888
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_MAX_CLIENT_CNXNS: 200
networks:
- kafka_example
zookeeper-3:
image: confluentinc/cp-zookeeper:5.0.1
volumes:
- '/volumedockerkafka/zookeeper-3/zookeeper_data:/var/lib/zookeeper:rw'
- '/volumedockerkafka/zookeeper-3/zookeeper_etc:/etc/zookeeper:rw'
environment:
ZOOKEEPER_SERVER_ID: 3
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_SERVERS: zookeeper-1:2888:3888;zookeeper-2:2888:3888;0.0.0.0:2888:3888
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_MAX_CLIENT_CNXNS: 200
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'
- '/volumedockerkafka/kafka-1/kafka_etc:/etc/kafka:rw'
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://message_queue_kafka-1:9092
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'
- '/volumedockerkafka/kafka-2/kafka_etc:/etc/kafka:rw'
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://message_queue_kafka-2:9092
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'
- '/volumedockerkafka/kafka-3/kafka_etc:/etc/kafka:rw'
environment:
KAFKA_BROKER_ID: 3
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://message_queue_kafka-3:9092
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
我有一个类似的设置,3个动物园管理员和3个经纪人,它运作良好。我注意到三件事,从你的设置与我的不同,第二件我知道肯定是一个问题(我做了同样但没有工作)
ZOOKEEPER_SERVERS
,您使用相同的端口组合为所有动物园管理员2888:3888
。据我所知,你应该有不同的端口check this example as a reference。ZOOKEEPER_CLIENT_PORT
,考虑为每个实例使用不同的实例,也与ZOOKEEPER_SERVERS
中使用的端口不同。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 Docs中提取
所有在一起应该看起来像这样(没有测试它):
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'