Node.js 能否连接到节点中的kafka实例?
我有两台计算机在本地网络中运行,一台计算机安装了kafka实例,位于192.168.1.3:9092。在另一台计算机中,一个简短的测试程序正在运行kafka客户端,以连接kafka实例并订阅主题 我的卡夫卡节点是最新版本,v4.1.3Node.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
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