Node.js 能否连接到节点中的kafka实例?

Node.js 能否连接到节点中的kafka实例?,node.js,apache-kafka,Node.js,Apache Kafka,我有两台计算机在本地网络中运行,一台计算机安装了kafka实例,位于192.168.1.3:9092。在另一台计算机中,一个简短的测试程序正在运行kafka客户端,以连接kafka实例并订阅主题 我的卡夫卡节点是最新版本,v4.1.3 const kafka = require('kafka-node'); const bp = require('body-parser'); //const config = require('./config'); try { const Consume

我有两台计算机在本地网络中运行,一台计算机安装了kafka实例,位于192.168.1.3:9092。在另一台计算机中,一个简短的测试程序正在运行kafka客户端,以连接kafka实例并订阅主题

我的卡夫卡节点是最新版本,v4.1.3

const kafka = require('kafka-node');
const bp = require('body-parser');
//const config = require('./config');

try {
  const Consumer = kafka.HighLevelConsumer;
  const client = new kafka.KafkaClient("kafkaHost: '192.168.1.3:9092'");
  let consumer = new kafka.Consumer(
    client,
    [{ topic: "dbserver1", partition: 0 }],
    {
      autoCommit: true,
      fetchMaxWaitMs: 1000,
      fetchMaxBytes: 1024 * 1024,
      encoding: 'utf8',
      fromOffset: false
    }
  );
  consumer.on('message', async function(message) {
    console.log('here');
    console.log(
      'kafka-> ',
      message.value
    );
  })
  consumer.on('error', function(err) {
    console.log('error', err);
  });
}
catch(e) {
  console.log(e);
}
代码如上所示。然而,代码总是告诉我

{ Error: connect ECONNREFUSED 127.0.0.1:9092
    at Object._errnoException (util.js:992:11)
    at _exceptionWithHostPort (util.js:1014:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1186:14)
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect',
  address: '127.0.0.1',
  port: 9092 }

为什么显示127.0.0.1而不是192.168.1.3?

根据评论,您正在运行Debezium Kafka docker容器。。。从Debezium Docker教程

如果我们想从Docker容器外部连接到Kafka,那么我们希望Kafka通过Docker主机公布其地址,我们可以通过添加
-e advised_host_NAME=
,后跟Docker主机的IP地址或可解析主机名,这是主机的IP地址(不是
localhost

听起来您的节点代码没有在容器中运行,或者至少没有在同一台机器/Docker网络上运行


因此,您必须将
-e advised_HOST_NAME=192.168.1.3
添加到docker run命令中

您在Kafka属性中设置了哪些播发侦听器设置?我正在docker:docker run-it-NAME Kafka-p 9092:9092-link zookeer:zookeer debezium/Kafka中运行Kafka我不知道播发的默认值侦听器设置,它做什么?它告诉客户端连接到哪个地址。您需要的不仅仅是一个简单的端口转发-p 9092:9092是否告诉要连接的端口?否。所做的只是将主机网络转发到容器。您与容器的初始连接正常,它将返回所有其他代理(如果有)的列表以供将来连接,默认值为127.0.0.1