【问题标题】:nodejs fails to connect to kafka brokernodejs 无法连接到 kafka 代理
【发布时间】:2021-12-22 12:09:06
【问题描述】:

我正在尝试连接到在 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

错误仍然存​​在。

任何帮助将不胜感激!

【问题讨论】:

  • 您正在混合使用 IPv6 和 IPV4。你如何尝试连接?发布相关的 node.js 代码 sn-p & kafak 服务器配置。您的 Kafka 服务器仅侦听 IPv6。
  • 我用缺少的信息编辑了帖子。
  • 如果你想让所有接口都监听,你应该使用listeners=PLAINTEXT://0.0.0.0:9092,但是是的,你应该有TCPv4地址
  • 那么,Kafka 是在 WSL2 上的 Ubuntu 中运行的吗?您是否也在那里运行 NodeJS 代码?如果不是,那么127.0.0.1 不是指 WSL2 管理程序 IP
  • 你说得对,我在 windows 上运行 nodejs 部分。如果我想连接它们,是否应该使用我的 IP 地址而不是 localhost?

标签: node.js apache-kafka


【解决方案1】:

我在 Mac 上也遇到过这个问题。

上下文:我已经设置了两个 docker 镜像,一个用于 zookeeper,一个用于 Kafka。

我使用我的实际 IPv4 地址修复了它。

从 ["127.0.0.1:9092"] 更新了我的经纪人,现在我有了类似 ["192.168.2.2:9092"] 的内容。

【讨论】:

    【解决方案2】:

    如果您正在使用 VS Code 和/或刚刚更新过 Node.js,请关闭所有终端并创建新终端,然后重试。

    【讨论】:

      【解决方案3】:

      尝试重新安装 Npm, 通过使用 npm install

      【讨论】:

        猜你喜欢
        • 2018-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-09
        • 2017-10-29
        • 2018-06-16
        • 1970-01-01
        相关资源
        最近更新 更多