Windows Java应用连接本地Ubuntu Kafka Broker报错求助
解决Windows Java生产者无法连接Ubuntu本地Kafka Broker的问题
问题现象
在Windows笔记本上运行Java Kafka生产者,尝试连接同一设备中Ubuntu系统的Kafka Broker时,出现以下错误:
[kafka-producer-network-thread | producer-1] INFO org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Node -1 disconnected. [kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. [kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Bootstrap broker localhost:9092 (id: -1 rack: null) disconnected
Java生产者代码如下:
public static void main(String[] args) { //create producer properties Properties properties = new Properties(); //connect to localhost properties.setProperty("bootstrap.servers", "127.0.0.1:9092"); //set producer properties properties.setProperty("key.serializer", StringSerializer.class.getName()); properties.setProperty("value.serializer", StringSerializer.class.getName()); //create the producer KafkaProducer<String, String> producer = new KafkaProducer<>(properties); //create a Producer Record ProducerRecord<String, String> producerRecord = new ProducerRecord<>("demo_java", "hello world"); //send data producer.send(producerRecord); //tell the producer to send all data and block until done -- synchronous producer.flush(); //flush and close the producer producer.close(); }
已尝试的操作:
- Windows创建入站防火墙规则开放9092端口
- Windows和Ubuntu本地执行
telnet localhost 9092均成功 - Ubuntu本地执行Kafka命令(如
kafka-topics.sh --bootstrap-server localhost:9092 --list)正常
解决方案
1. 修改Kafka Broker配置
找到Ubuntu系统中Kafka的server.properties配置文件(通常位于安装目录的config子文件夹,如/opt/kafka/config/server.properties),修改以下两项:
- 将
listeners配置改为监听所有网卡:listeners=PLAINTEXT://0.0.0.0:9092 - 将
advertised.listeners配置改为Ubuntu系统的局域网IP地址(可通过ip addr或ifconfig命令查看,格式如192.168.x.x):advertised.listeners=PLAINTEXT://192.168.1.100:9092
2. 重启Kafka服务
停止并重启Kafka及依赖的Zookeeper服务(以默认安装为例):
# 停止Kafka bin/kafka-server-stop.sh # 停止Zookeeper bin/zookeeper-server-stop.sh # 启动Zookeeper bin/zookeeper-server-start.sh -daemon config/zookeeper.properties # 启动Kafka bin/kafka-server-start.sh -daemon config/server.properties
3. 修改Java生产者配置
将代码中的bootstrap.servers替换为Ubuntu的局域网IP地址:
properties.setProperty("bootstrap.servers", "192.168.1.100:9092");
4. 验证连接
在Windows终端执行telnet 192.168.1.100 9092,确认能成功建立连接。
原因说明
- Windows的
localhost(127.0.0.1)指向自身回环网卡,Ubuntu的localhost指向其内部回环,二者并非同一个网络端点,因此Windows无法通过127.0.0.1访问Ubuntu中的Kafka。 - Kafka默认仅监听自身回环地址,需通过
listeners配置让其监听所有网卡,同时通过advertised.listeners告知客户端Broker的实际可访问地址。
内容的提问来源于stack exchange,提问作者rds80
相关产品推荐
相关产品推荐

