You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js远程连接Apache Kafka失败,请求技术支持

解决Node.js远程连接Ubuntu Kafka的生产消费问题

看起来你遇到的核心问题是Kafka监听配置错误、IP地址不匹配,还有潜在的分区配置问题,我来一步步帮你排查解决:


1. 修复Kafka server.properties的配置错误

你当前的advertised.listeners写了两行重复配置,这是无效的,而且配置里的IP和你Node.js代码中使用的192.168.1.104不一致,这是导致连接失败的关键!

打开Ubuntu上的config/server.properties,做如下修改:

# 让Kafka监听所有网卡的9092端口,允许本地和远程设备连接
listeners=PLAINTEXT://0.0.0.0:9092

# 告诉远程客户端(Windows)要连接的Kafka实际IP,必须和你Node.js代码里的IP完全一致
advertised.listeners=PLAINTEXT://192.168.1.104:9092

修改完成后,重启Kafka服务生效:

# 先停止Kafka
bin/kafka-server-stop.sh
# 再后台启动Kafka
bin/kafka-server-start.sh config/server.properties &

2. 检查Ubuntu防火墙和网络连通性

远程连接失败大概率和端口未开放或网络不通有关:

  • 先确认Ubuntu的实际内网IP:执行ip addr或ifconfig查看,确保和你代码里的192.168.1.104一致。
  • 在Windows端测试网络:
    • 打开命令提示符,执行ping 192.168.1.104,如果能收到回复说明网络互通。
    • 执行telnet 192.168.1.104 9092,如果能成功连接说明端口开放;如果失败,在Ubuntu上开放9092端口:
      sudo ufw allow 9092/tcp
      sudo ufw reload
      

3. 修复生产者代码的分区问题

你生产者代码里指定了partition: 2,但默认创建的Topic分区数是1(分区编号从0开始),这会导致消息发送失败,返回undefined。有两种解决方式:

  • 方式一:删除现有Topic,重新创建带足够分区的Topic:
    bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic topic1
    bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic topic1
    
  • 方式二:去掉生产者代码里的partition参数,让Kafka自动分配分区:
    payloads = [ { topic: 'topic1', messages: 'hi' } ];
    

4. 检查kafka-node版本兼容性

你使用的Node.js 8.11.0是较旧的版本,部分新版本的kafka-node已不再支持Node.js 8。建议安装兼容的版本:

npm uninstall kafka-node
npm install kafka-node@4.1.3

验证修复效果

  1. 重启Windows端的生产者和消费者代码。
  2. 如果生产者控制台不再输出undefined,而是输出类似{ topic1: { '2': 123 } }的内容,说明消息生产成功。
  3. 消费者能收到hi消息,说明消费流程正常。

内容的提问来源于stack exchange,提问作者Bhaskar Sen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:37:39