同K8s集群内Node.js服务连接Kafka的问题排查与解决
Kubernetes集群中Node.js微服务连接Kafka的问题排查与解决
问题现象
- 同一K8s集群内部署了Node.js微服务、Kafka Broker、ZooKeeper,三者启动运行无报错,但Node.js始终无法正常连接Kafka
- 使用
kafka-service:9092、kafka-broker:9092这类服务名连接时,出现连接超时 - 直接用Kafka Pod的IP连接时,抛出
KafkaJSProtocolError: Replication-factor is invalid错误 - 查看Kafka Pod日志发现
java.net.UnknownHostException,初步判断是DNS解析相关问题
排查过程中的尝试
- 将Kafka的Deployment改为StatefulSet部署
- 配置无头服务(Headless Service)来优化集群内的网络访问逻辑
最终解决方法
调整Kafka的KAFKA_ADVERTISED_LISTENERS配置,让其中的主机名与集群内Kafka对应的Service名称完全一致。
举个例子:如果Kafka的Service名称是kafka-service,那么KAFKA_ADVERTISED_LISTENERS需要配置为PLAINTEXT://kafka-service:9092(协议类型根据实际使用情况调整)
遗留疑问
- 为何直接用Pod IP连接会触发副本因子无效的错误?
- 无头服务+StatefulSet的方案未生效的具体原因是什么?
内容的提问来源于stack exchange,提问作者BPDev
相关产品推荐
相关产品推荐

