为Spring Cloud Bus配置ZooKeeper主机与端口
解决Spring Cloud Bus Kafka连接远程ZooKeeper的问题
从你的错误日志能明显看出来:虽然你已经把Kafka的bootstrap-servers改成了远程服务器地址,但应用还是在尝试连接本地的ZooKeeper(localhost:2181),这就是连接被拒绝的核心原因。下面是具体的解决步骤:
1. 明确配置远程ZooKeeper地址
在你的application.yml里,需要添加远程ZooKeeper的连接配置,根据你的项目依赖场景选择对应的配置项:
场景一:项目用到Spring Cloud Zookeeper组件
如果你的项目引入了Spring Cloud Zookeeper相关依赖(比如服务发现、分布式配置中心),添加以下配置:
spring: cloud: zookeeper: connect-string: 192.168.0.120:2181 # 替换成你的远程ZooKeeper地址
场景二:Kafka客户端需直接指定ZooKeeper(旧版Kafka或特殊场景)
部分旧版Kafka客户端或Spring Cloud Bus的特殊配置场景下,需要直接指定ZooKeeper地址,添加:
spring: kafka: zookeeper: connect: 192.168.0.120:2181 # 替换成你的远程ZooKeeper地址
2. 检查远程Kafka Broker的配置
别忽略了远程Kafka服务器本身的配置,否则即使你改了客户端配置,还是会连接失败:
- 打开Kafka的
server.properties配置文件,修改listeners和advertised.listeners为外部可访问的地址:
(如果不配置这两项,Kafka会把listeners=PLAINTEXT://192.168.0.120:9092 advertised.listeners=PLAINTEXT://192.168.0.120:9092localhost地址返回给客户端,导致客户端无法正确连接到远程Broker)
3. 确认网络连通性
- 检查远程服务器的防火墙是否开放了9092(Kafka端口)和2181(ZooKeeper端口),允许你的应用服务器访问。
- 在应用服务器上执行
telnet 192.168.0.120 2181和telnet 192.168.0.120 9092,确认端口可以正常连通。
4. 排查其他依赖的ZooKeeper配置
如果你的项目里还引入了其他需要ZooKeeper的组件(比如Spring Cloud Config Server/Client),一定要确保这些组件的ZooKeeper连接地址也同步改成远程地址,避免出现配置冲突。
完成以上配置后,重新启动Spring Boot应用,应该就能正常连接到远程的Kafka和ZooKeeper了。
内容的提问来源于stack exchange,提问作者madmaux




