运行 WSL 2 上的 Kafka Confluent Platform(Ubuntu 发行版)和 Spring 上的 Windows 应用程序(代理可能不可用)

Running Kafka Confluent Platform on WSL 2 (Ubuntu Distribution) and Spring application on Windows (Broker may not be available)

我是 运行 wsl 2 中的 Confluent Platform(Ubuntu 发行版)并且我还在 Windows 上 运行 一个 Spring 应用程序但是当我向生产者发送消息我有这个错误:

Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. Bootstrap broker localhost:9092 (id: -1 rack: null) disconnected

我看看这篇文章: https://www.confluent.io/blog/kafka-client-cannot-connect-to-broker-on-aws-on-docker-etc/https://forum.confluent.io/t/running-kafka-connect-sink-on-separate-machine-from-zookeeper-topic-non-localhost/3038https://www.confluent.io/blog/kafka-listeners-explained/

但我没有找到解决方案。

concluent/etc/kafka/server.properties 文件中的配置是什么?

我设置了这个:

advertised.listeners=PLAINTEXT://127.0.0.1:9092
listener.security.protocol.map=PLAINTEXT:PLAINTEXT
listeners=PLAINTEXT://0.0.0.0:9092

Kafka 在 运行 上:“localhost:9092”,在 WSL2 中我可以正确发送和读取消息,但它无法运行我在 Windows 上的 spring 启动应用程序。

我看到了这个答案,但它在我的本地主机上不起作用:

我是否必须更改 Windows 配置中的某些内容?在 C:\Windows\System32\drivers\etc\hosts?

请问如何解决这个错误? 提前致谢!

您需要在 WSL2 终端内使用 ifconfig(或 ip addr),找到其外部接口 IP,然后将其用作通告的侦听器。

然后您需要使用 Windows CMD 中的 netsh interface portproxy 命令将端口从管理程序转发到主机。这也假设 listeners=PLAINTEXT://0.0.0.0:9092

例子

netsh interface portproxy add v4tov4 listenport=9092 listenaddress=0.0.0.0 connectport=9092 connectaddress=XXX.XX.XX.XX 

然后从 CMD 连接到 localhost 会将请求转发给管理程序,管理程序将 return 其通告的侦听器地址。

您也可以尝试直接使用管理程序的 IP,而不是本地主机/端口转发



或者您可以只对 Windows、运行 Kafka 使用 Docker 并在那里配置侦听器,它会自行正确转发端口