我有以下docker-compose.yml文件:
version: '3.7'
services:
zookeeper-1:
image: confluentinc/cp-zookeeper:6.2.1
hostname: zookeeper-1
container_name: zookeeper-1
ports:
- "2181:2181"
- "2888:2888"
- "3888:3888"
environment:
ZOOKEEPER_SERVER_ID: 1
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_PEER_PORT: 2888
ZOOKEEPER_LEADER_PORT: 3888
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: "localhost:2888:3888;192.168.100.14:12888:13888;192.168.100.14:22888:23888"
volumes:
- ./kafka-data/zookeeper-1:/var/lib/zookeeper/data
- ./kafka-data/zookeeper-logs-1:/var/lib/zookeeper/log
networks:
- mynet
zookeeper-2:
image: confluentinc/cp-zookeeper:6.2.1
hostname: zookeeper-2
container_name: zookeeper-2
ports:
- "12181:12181"
- "12888:12888"
- "13888:13888"
environment:
ZOOKEEPER_SERVER_ID: 2
ZOOKEEPER_CLIENT_PORT: 12181
ZOOKEEPER_PEER_PORT: 12888
ZOOKEEPER_LEADER_PORT: 13888
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: "192.168.100.14:2888:3888;localhost:12888:13888;192.168.100.14:22888:23888"
volumes:
- ./kafka-data/zookeeper-2:/var/lib/zookeeper/data
- ./kafka-data/zookeeper-logs-2:/var/lib/zookeeper/log
networks:
- mynet
zookeeper-3:
image: confluentinc/cp-zookeeper:6.2.1
hostname: zookeeper-3
container_name: zookeeper-3
ports:
- "22181:22181"
- "22888:22888"
- "23888:23888"
environment:
ZOOKEEPER_SERVER_ID: 3
ZOOKEEPER_CLIENT_PORT: 22181
ZOOKEEPER_PEER_PORT: 22888
ZOOKEEPER_LEADER_PORT: 23888
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: "192.168.100.14:2888:3888;192.168.100.14:12888:13888;localhost:22888:23888"
volumes:
- ./kafka-data/zookeeper-3:/var/lib/zookeeper/data
- ./kafka-data/zookeeper-logs-3:/var/lib/zookeeper/log
networks:
- mynet
broker-1:
image: confluentinc/cp-kafka:6.2.1
hostname: broker-1
container_name: broker-1
depends_on:
- zookeeper-1
- zookeeper-2
- zookeeper-3
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_LISTENERS: OUTSIDE://0.0.0.0:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: OUTSIDE:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: OUTSIDE://192.168.100.14:9092
KAFKA_INTER_BROKER_LISTENER_NAME: OUTSIDE
KAFKA_ZOOKEEPER_CONNECT: "192.168.100.14:2181,192.168.100.14:12181,192.168.100.14:22181"
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_LOG_MESSAGE_TIMESTAMP_TYPE: 'LogAppendTime'
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_CONNECTIONS_MAX_IDLE_MS: 31536000000 # 1 year
volumes:
- ./kafka-data/kafka-1:/var/lib/kafka/data
networks:
- mynet
# PORT 8081 reserved for Schema Registry
kafka-rest-1:
image: confluentinc/cp-kafka-rest:6.2.1
hostname: kafka-rest-1
container_name: kafka-rest-1
depends_on:
- broker-1
ports:
- "8082:8082"
environment:
KAFKA_REST_HOST_NAME: 192.168.100.14
KAFKA_REST_LISTENERS: http://0.0.0.0:8082
KAFKA_REST_BOOTSTRAP_SERVERS: 192.168.100.14:9092
networks:
- mynet
# PORT 8083 reserved for Kafka-Connect REST API
kafka-ui-1:
image: provectuslabs/kafka-ui:0.2.1
hostname: kafka-ui-1
container_name: kafka-ui-1
depends_on:
- broker-1
ports:
- "8084:8080"
environment:
KAFKA_CLUSTERS_0_NAME: lab
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: 192.168.100.14:9092
KAFKA_CLUSTERS_0_ZOOKEEPER: "192.168.100.14:2181;192.168.100.14:12181;192.168.100.14:22181"
networks:
- mynet
kafdrop-1:
image: obsidiandynamics/kafdrop:3.27.0
hostname: kafrop-1
container_name: kafdrop-1
depends_on:
- broker-1
ports:
- "8085:9000"
environment:
KAFKA_BROKERCONNECT: 192.168.100.14:9092
JVM_OPTS: "-Xms32M -Xmx64M"
SERVER_SERVLET_CONTEXTPATH: "/"
networks:
- mynet
networks:
mynet:
driver: bridge在堆栈溢出中还发现,zookeper ZOOKEEPER_SERVERS本身不应该有外部IP (应该是“localhost”),所以我的3个动物园管理员开始一起工作。
但是,我的broker-1无法使用“Exit 1”代码和日志启动和退出,始终是:
# docker-compose up broker-1
zookeeper-1 is up-to-date
Starting broker-1 ... done
Attaching to broker-1
broker-1 | ===> User
broker-1 | uid=1000(appuser) gid=1000(appuser) groups=1000(appuser)
broker-1 | ===> Configuring ...
broker-1 | ===> Running preflight checks ...
broker-1 | ===> Check if /var/lib/kafka/data is writable ...
broker-1 | ===> Check if Zookeeper is healthy ...
broker-1 | SLF4J: Class path contains multiple SLF4J bindings.
broker-1 | SLF4J: Found binding in [jar:file:/usr/share/java/cp-base-new/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]
broker-1 | SLF4J: Found binding in [jar:file:/usr/share/java/cp-base-new/slf4j-simple-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]
broker-1 | SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
broker-1 | SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
broker-1 | log4j:WARN No appenders could be found for logger (io.confluent.admin.utils.cli.ZookeeperReadyCommand).
broker-1 | log4j:WARN Please initialize the log4j system properly.
broker-1 | log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
broker-1 exited with code 1但是,如果我注释掉额外的动物园管理员,那么broker-1开始的很好,这是一个有效的配置:
version: '3.7'
services:
zookeeper-1:
image: confluentinc/cp-zookeeper:6.2.1
hostname: zookeeper-1
container_name: zookeeper-1
ports:
- "2181:2181"
- "2888:2888"
- "3888:3888"
environment:
ZOOKEEPER_SERVER_ID: 1
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_PEER_PORT: 2888
ZOOKEEPER_LEADER_PORT: 3888
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: "localhost:2888:3888" #;192.168.100.14:12888:13888;192.168.100.14:22888:23888"
volumes:
- ./kafka-data/zookeeper-1:/var/lib/zookeeper/data
- ./kafka-data/zookeeper-logs-1:/var/lib/zookeeper/log
networks:
- mynet
# zookeeper-2:
# image: confluentinc/cp-zookeeper:6.2.1
# hostname: zookeeper-2
# container_name: zookeeper-2
# ports:
# - "12181:12181"
# - "12888:12888"
# - "13888:13888"
# environment:
# ZOOKEEPER_SERVER_ID: 2
# ZOOKEEPER_CLIENT_PORT: 12181
# ZOOKEEPER_PEER_PORT: 12888
# ZOOKEEPER_LEADER_PORT: 13888
# ZOOKEEPER_TICK_TIME: 2000
# ZOOKEEPER_INIT_LIMIT: 5
# ZOOKEEPER_SYNC_LIMIT: 2
# ZOOKEEPER_SERVERS: "192.168.100.14:2888:3888;localhost:12888:13888;192.168.100.14:22888:23888"
# volumes:
# - ./kafka-data/zookeeper-2:/var/lib/zookeeper/data
# - ./kafka-data/zookeeper-logs-2:/var/lib/zookeeper/log
# networks:
# - mynet
#
# zookeeper-3:
# image: confluentinc/cp-zookeeper:6.2.1
# hostname: zookeeper-3
# container_name: zookeeper-3
# ports:
# - "22181:22181"
# - "22888:22888"
# - "23888:23888"
# environment:
# ZOOKEEPER_SERVER_ID: 3
# ZOOKEEPER_CLIENT_PORT: 22181
# ZOOKEEPER_PEER_PORT: 22888
# ZOOKEEPER_LEADER_PORT: 23888
# ZOOKEEPER_TICK_TIME: 2000
# ZOOKEEPER_INIT_LIMIT: 5
# ZOOKEEPER_SYNC_LIMIT: 2
# ZOOKEEPER_SERVERS: "192.168.100.14:2888:3888;192.168.100.14:12888:13888;localhost:22888:23888"
# volumes:
# - ./kafka-data/zookeeper-3:/var/lib/zookeeper/data
# - ./kafka-data/zookeeper-logs-3:/var/lib/zookeeper/log
# networks:
# - mynet
broker-1:
image: confluentinc/cp-kafka:6.2.1
hostname: broker-1
container_name: broker-1
depends_on:
- zookeeper-1
# - zookeeper-2
# - zookeeper-3
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_LISTENERS: OUTSIDE://0.0.0.0:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: OUTSIDE:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: OUTSIDE://192.168.100.14:9092
KAFKA_INTER_BROKER_LISTENER_NAME: OUTSIDE
KAFKA_ZOOKEEPER_CONNECT: "192.168.100.14:2181" #,192.168.100.14:12181,192.168.100.14:22181"
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_LOG_MESSAGE_TIMESTAMP_TYPE: 'LogAppendTime'
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_CONNECTIONS_MAX_IDLE_MS: 31536000000 # 1 year
volumes:
- ./kafka-data/kafka-1:/var/lib/kafka/data
networks:
- mynet
# PORT 8081 reserved for Schema Registry
kafka-rest-1:
image: confluentinc/cp-kafka-rest:6.2.1
hostname: kafka-rest-1
container_name: kafka-rest-1
depends_on:
- broker-1
ports:
- "8082:8082"
environment:
KAFKA_REST_HOST_NAME: 192.168.100.14
KAFKA_REST_LISTENERS: http://0.0.0.0:8082
KAFKA_REST_BOOTSTRAP_SERVERS: 192.168.100.14:9092
networks:
- mynet
# PORT 8083 reserved for Kafka-Connect REST API
kafka-ui-1:
image: provectuslabs/kafka-ui:0.2.1
hostname: kafka-ui-1
container_name: kafka-ui-1
depends_on:
- broker-1
ports:
- "8084:8080"
environment:
KAFKA_CLUSTERS_0_NAME: lab
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: 192.168.100.14:9092
KAFKA_CLUSTERS_0_ZOOKEEPER: "192.168.100.14:2181" #;192.168.100.14:12181;192.168.100.14:22181"
networks:
- mynet
kafdrop-1:
image: obsidiandynamics/kafdrop:3.27.0
hostname: kafrop-1
container_name: kafdrop-1
depends_on:
- broker-1
ports:
- "8085:9000"
environment:
KAFKA_BROKERCONNECT: 192.168.100.14:9092
JVM_OPTS: "-Xms32M -Xmx64M"
SERVER_SERVLET_CONTEXTPATH: "/"
networks:
- mynet
networks:
mynet:
driver: bridge3动物园管理员配置有什么问题,为什么1-zookeerper配置对卡夫卡经纪人来说是可以的?
UPD:当然,我知道在同一个主机上有3个动物园管理员和3个代理(现在一个)是没有意义的:-)我需要在我拥有的单个主机上模拟几个主机环境,方法是使用码头容器。计划是关闭一些码头容器,然后模拟不同的“主机”(zookeper,broker)故障。这就是为什么我使用"public“IP地址192.168.100.14 (从容器的角度来看是”public“)和不同的端口来进行这种模拟。码头桥接网络的使用,即它是np访问网络主机,甚至通过IP从容器内访问互联网主机-我测试了。
发布于 2021-10-28 16:08:23
问题为我完全解决了!:-)
看来,Docker容器桥接网络增加了连接集群中所有内容的问题。
将ZOOKEEPER_QUORUM_LISTEN_ON_ALL_IPS:'true'添加到zookeper和extra_hosts:到所有容器中解决了我的所有问题!
因此,我在每个服务的每个配置中添加了以下几行extra_hosts:
extra_hosts:
- "kafka-1:192.168.1.11"
- "kafka-2:192.168.1.12"
- "kafka-3:192.168.1.13"此外,在zookeper环境中添加ZOOKEEPER_QUORUM_LISTEN_ON_ALL_IPS:'true'也很重要。
完整的例子:
version: '3.7'
x-zoo: &zoo "kafka-1:2888:3888;kafka-2:2888:3888;kafka-3:2888:3888"
x-kafkaZookeepers: &kafkaZookeepers "kafka-1:2181,kafka-2:2181,kafka-3:2181"
x-kafkaBrokers: &kafkaBrokers "kafka-1:9092"
services:
zookeeper:
image: confluentinc/cp-zookeeper:6.2.1
hostname: zookeeper
container_name: zookeeper
ports:
- "2181:2181"
- "2888:2888"
- "3888:3888"
extra_hosts:
- "kafka-1:192.168.1.11"
- "kafka-2:192.168.1.12"
- "kafka-3:192.168.1.13"
environment:
ZOOKEEPER_SERVER_ID: 1
ZOOKEEPER_QUORUM_LISTEN_ON_ALL_IPS: 'true'
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_PEER_PORT: 2888
ZOOKEEPER_LEADER_PORT: 3888
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: *zoo
volumes:
- ./kafka-data/zookeeper:/var/lib/zookeeper/data
- ./kafka-data/zookeeper-logs:/var/lib/zookeeper/log
networks:
- mynet
broker:
image: confluentinc/cp-kafka:6.2.1
hostname: broker
container_name: broker
depends_on:
- zookeeper
ports:
- "9092:9092"
extra_hosts:
- "kafka-1:192.168.1.11"
- "kafka-2:192.168.1.12"
- "kafka-3:192.168.1.13"
environment:
KAFKA_BROKER_ID: 1
KAFKA_LISTENERS: OUTSIDE://0.0.0.0:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: OUTSIDE:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: OUTSIDE://192.168.1.11:9092
KAFKA_INTER_BROKER_LISTENER_NAME: OUTSIDE
KAFKA_ZOOKEEPER_CONNECT: *kafkaZookeepers
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_LOG_MESSAGE_TIMESTAMP_TYPE: 'LogAppendTime'
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_CONNECTIONS_MAX_IDLE_MS: 31536000000 # 1 year
volumes:
- ./kafka-data/kafka:/var/lib/kafka/data
networks:
- mynet
kafka-ui:
image: provectuslabs/kafka-ui:0.2.1
hostname: kafka-ui
container_name: kafka-ui
depends_on:
- broker
ports:
- "8084:8080"
extra_hosts:
- "kafka-1:192.168.1.11"
- "kafka-2:192.168.1.12"
- "kafka-3:192.168.1.13"
environment:
KAFKA_CLUSTERS_0_NAME: local_kafka
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: *kafkaBrokers
KAFKA_CLUSTERS_0_ZOOKEEPER: *kafkaZookeepers
networks:
- mynet
networks:
mynet:
driver: bridge其他VM上的docker-compose.yml文件看起来类似(我现在只设置了3个动物园管理员),在第二个VM上:
version: '3.7'
x-zoo: &zoo "kafka-1:2888:3888;kafka-2:2888:3888;kafka-3:2888:3888"
x-kafkaZookeepers: &kafkaZookeepers "kafka-1:2181,kafka-2:2181,kafka-3:2181"
x-kafkaBrokers: &kafkaBrokers "kafka-1:9092"
services:
zookeeper:
image: confluentinc/cp-zookeeper:6.2.1
hostname: zookeeper
container_name: zookeeper
ports:
- "2181:2181"
- "2888:2888"
- "3888:3888"
extra_hosts:
- "kafka-1:192.168.1.11"
- "kafka-2:192.168.1.12"
- "kafka-3:192.168.1.13"
environment:
ZOOKEEPER_SERVER_ID: 2
ZOOKEEPER_QUORUM_LISTEN_ON_ALL_IPS: 'true'
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_PEER_PORT: 2888
ZOOKEEPER_LEADER_PORT: 3888
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: *zoo
volumes:
- ./kafka-data/zookeeper:/var/lib/zookeeper/data
- ./kafka-data/zookeeper-logs:/var/lib/zookeeper/log
networks:
- mynet
networks:
mynet:
driver: bridge在第三阶段:
version: '3.7'
x-zoo: &zoo "kafka-1:2888:3888;kafka-2:2888:3888;kafka-3:2888:3888"
x-kafkaZookeepers: &kafkaZookeepers "kafka-1:2181,kafka-2:2181,kafka-3:2181"
x-kafkaBrokers: &kafkaBrokers "kafka-1:9092"
services:
zookeeper:
image: confluentinc/cp-zookeeper:6.2.1
hostname: zookeeper
container_name: zookeeper
ports:
- "2181:2181"
- "2888:2888"
- "3888:3888"
extra_hosts:
- "kafka-1:192.168.1.11"
- "kafka-2:192.168.1.12"
- "kafka-3:192.168.1.13"
environment:
ZOOKEEPER_SERVER_ID: 3
ZOOKEEPER_QUORUM_LISTEN_ON_ALL_IPS: 'true'
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_PEER_PORT: 2888
ZOOKEEPER_LEADER_PORT: 3888
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: *zoo
volumes:
- ./kafka-data/zookeeper:/var/lib/zookeeper/data
- ./kafka-data/zookeeper-logs:/var/lib/zookeeper/log
networks:
- mynet
networks:
mynet:
driver: bridge根据日志,所有的码头集装箱现在可以互相连接,好的。
我还在VM上添加了我的主机kafka-1、kafka-2、kafka-3到/etc/host文件:
test@kafka-1:~/Kafka-Docker$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 kafka-1
192.168.1.11 kafka-1
192.168.1.12 kafka-2
192.168.1.13 kafka-3
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters希望它能节省某人的时间和神经,这是我一直在等待的答案!
还请注意,我使用的是最新的自动取款机(参见日期)对接图片( confluent,cp等) 6.2.1来自dockerhub的官方合流出版商。
UPD: i在每个动物园管理员上转发端口4888->8080,并获得简单的REST管理页面( zkCommands ),其中我可以看到谁是“领导者”和谁是“追随者”,示例:在这里输入图像描述 在这里输入图像描述。
发布于 2021-10-27 14:48:05
你似乎误解了码头工人的人际关系。您应该始终使用服务名称,而不是IP地址。
如果您使用一个动物园管理员服务器,ZOOKEEPER_SERVERS什么也不做。这用于连接群集。
所以,你在找这个
services:
zookeeper-1:
image: confluentinc/cp-zookeeper:6.2.1
hostname: zookeeper-1
container_name: zookeeper-1
ports:
- "2181:2181"
- "2888:2888"
- "3888:3888"
environment:
ZOOKEEPER_SERVER_ID: 1
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_PEER_PORT: 2888
ZOOKEEPER_LEADER_PORT: 3888
...
ZOOKEEPER_SERVERS: "localhost:2888:3888;zookeeper-1:12888:13888;zookeeper-2:22888:23888"
...
zookeeper-2:
image: confluentinc/cp-zookeeper:6.2.1
hostname: zookeeper-2
container_name: zookeeper-2
ports:
- "12181:12181"
- "12888:12888"
- "13888:13888"
environment:
ZOOKEEPER_SERVER_ID: 2
ZOOKEEPER_CLIENT_PORT: 12181
ZOOKEEPER_PEER_PORT: 12888
ZOOKEEPER_LEADER_PORT: 13888
...
ZOOKEEPER_SERVERS: "zookeeper-1:2888:3888;localhost:12888:13888;zookeeper-2:22888:23888"
...
zookeeper-3:
image: confluentinc/cp-zookeeper:6.2.1
hostname: zookeeper-3
container_name: zookeeper-3
ports:
- "22181:22181"
- "22888:22888"
- "23888:23888"
environment:
ZOOKEEPER_SERVER_ID: 3
ZOOKEEPER_CLIENT_PORT: 22181
ZOOKEEPER_PEER_PORT: 22888
ZOOKEEPER_LEADER_PORT: 23888
...
ZOOKEEPER_SERVERS: "zookeeper-1:2888:3888;zookeeper-2:12888:13888;localhost:22888:23888"
...
broker-1:
image: confluentinc/cp-kafka:6.2.1
hostname: broker-1
container_name: broker-1
depends_on:
- zookeeper-1
- zookeeper-2
- zookeeper-3
# ports removed because the listener is internal to the docker network only
environment:
KAFKA_BROKER_ID: 1
KAFKA_LISTENERS: INSIDE://0.0.0.0:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: INSIDE://broker-1:9092
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
KAFKA_ZOOKEEPER_CONNECT: "zookeeper-1:zookeeper-2:12181,zookeeper-3:22181"
.....。等等..。
还对其他容器的引导服务器使用broker-1:9092。
请记住,您使用的是单个主机,这是一个单一的故障点,因此不止一个ZK服务器是没有意义的。
https://stackoverflow.com/questions/69740701
复制相似问题