Spring Boot无法连接Kind集群中Bitnami部署的Kafka,报节点不可用
解决Kind集群中Bitnami Kafka与本地Spring Boot连接的"Node not found"问题
问题核心原因
你遇到的错误本质是Kafka Broker的外部访问配置缺失,且客户端无法获取到正确的Broker可访问地址:
- 当前Helm配置仅开启了Controller的外部访问,但本地Spring Boot应用需要连接的是Kafka Broker而非Controller
- Kafka的
advertised.listeners未配置为宿主机IP+NodePort,导致客户端收到集群内部地址,无法正常访问Broker节点
修复步骤
1. 修正Kafka Helm配置
更新kafka.yaml,添加Broker的外部访问配置(分配独立NodePort避免与Controller端口冲突):
auth: enabled: false interBrokerProtocol: PLAINTEXT externalAccess: # 新增Broker外部访问配置 broker: service: nodePorts: - 30004 - 30005 - 30006 type: NodePort useHostIPs: true controller: service: nodePorts: - 30001 - 30002 - 30003 type: NodePort useHostIPs: true enabled: true listeners: client: protocol: PLAINTEXT persistence: enabled: true size: 10Gi
2. 重新部署Kafka
执行Helm升级命令应用新配置:
helm upgrade kafka bitnami/kafka -f kafka.yaml
3. 配置Kind集群端口映射
由于Kind是容器化集群,需确保NodePort端口映射到宿主机。若集群已创建,可通过修改Kind配置文件重建:
创建kind-config.yaml:
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane extraPortMappings: - containerPort: 30004 hostPort: 30004 listenAddress: "0.0.0.0" - containerPort: 30005 hostPort: 30005 listenAddress: "0.0.0.0" - containerPort: 30006 hostPort: 30006 listenAddress: "0.0.0.0"
重建集群:
kind create cluster --config kind-config.yaml
4. 更新Spring Boot配置
修改application.yaml中的Kafka bootstrap地址,指向Broker的外部端口:
spring: kafka: bootstrap-servers: 192.168.0.106:30004,192.168.0.106:30005,192.168.0.106:30006
5. 验证配置正确性
检查Kafka的advertised.listeners是否包含宿主机IP+NodePort的可访问地址:
kubectl exec -it kafka-0 -- cat /opt/bitnami/kafka/config/server.properties | grep advertised.listeners
预期输出示例:
advertised.listeners=PLAINTEXT://192.168.0.106:30004,PLAINTEXT_INTERNAL://kafka-0.kafka-headless.default.svc.cluster.local:9092
6. 检查防火墙设置
确保宿主机(192.168.0.106)的30004-30006端口已开放,本地PC可正常访问。
内容的提问来源于stack exchange,提问作者Danil Krivobok
相关产品推荐
相关产品推荐

