node.js - nodejs 无法连接到 kafka 代理
问题描述
我正在尝试连接到在 ubuntu for windows 上运行的 Kafka 3.0.0 客户端,但出现以下错误:“消息”:“[连接] 连接错误:连接 ECONNREFUSED 127.0.0.1:9092”。
这应该意味着节点找不到在端口 9092 上运行的任何服务,但是当我检查所有活动的 tcp 端口时,它说 kafka 正在侦听 9092:
活动 Internet 连接(服务器和已建立)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp6 0 0 :::9092 :::* LISTEN
tcp6 0 0 :::2181 :::* LISTEN
tcp6 0 0 127.0.0.1:46550 127.0.1.1:9092 ESTABLISHED
tcp6 0 0 127.0.1.1:9092 127.0.0.1:46550 ESTABLISHED
tcp6 0 0 127.0.0.1:2181 127.0.0.1:54466 ESTABLISHED
tcp6 0 0 127.0.0.1:54466 127.0.0.1:2181 ESTABLISHED
我不知道为什么会这样,所有 server.properties 设置都是默认设置,zookeeper 正在运行,我可以创建主题,但节点仍然无法连接。
--编辑 -- 这是我的服务器端代码:
const {Kafka} = require('kafkajs');
const run = async () => {
try {
const kafka = new Kafka({
clientId: "myapp",
brokers: ["127.0.0.1:9092"]
})
const name = process.argv[2];
const producer = kafka.producer();
await producer.connect();
console.log("connected")
await producer.send({
topics: "hashtags",
messages: [
{
value: name
}
]
})
console.log("done")
await producer.disconnect();
} catch (error) {
console.log(error)
}
}
run();
这是server.config文件的相关内容:
我将 listeners=PLAINTEXT://:9092 更新为 listeners=PLAINTEXT://127.0.0.1:9092
# FORMAT:
# listeners = listener_name://host_name:port
# EXAMPLE:
# listeners = PLAINTEXT://your.host.name:9092
listeners=PLAINTEXT://127.0.0.1:9092
现在,重启zookeeper和kafka后,活动的tcp端口是:
tcp6 0 0 :::45815 :::* LISTEN
tcp6 0 0 127.0.0.1:9092 :::* LISTEN
tcp6 0 0 :::2181 :::* LISTEN
tcp6 0 0 :::44587 :::* LISTEN
tcp6 0 0 127.0.0.1:46734 127.0.0.1:9092 ESTABLISHED
tcp6 0 0 127.0.0.1:9092 127.0.0.1:46734 ESTABLISHED
tcp6 0 0 127.0.0.1:54492 127.0.0.1:2181 ESTABLISHED
tcp6 0 0 127.0.0.1:2181 127.0.0.1:54492 ESTABLISHED
错误仍然存在。
任何帮助将不胜感激!
解决方案
我在 Mac 上也遇到过这个问题。
上下文:我已经设置了两个 docker 映像,一个用于 zookeeper,一个用于 Kafka。
我使用我的实际 IPv4 地址修复了它。
从 ["127.0.0.1:9092"] 更新了我的经纪人,现在我有了类似 ["192.168.2.2:9092"] 的东西。
推荐阅读
- android - Kotlin 等待函数完成然后完成代码
- java - while false 循环的大符号是什么?
- python - 如何在视图中获取 JSON 字段以进行序列化
- r - 如何在管道中使用 rename_with() 来更改向量中的所有列名
- html - html 表未正确构建 | 无法合并单元格
- java - 在 JScrollpane 中放置 JPanel
- android-studio - Android Studio:如何让谷歌地图标记监听 DragOver 事件?
- reactjs - React:导入声明只能出现在模块的顶层
- javascript - discord bot 命令,提及未定义
- wordpress - 本地主机上的 Wordpress 容器不起作用