运行 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/3038
和
https://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 并在那里配置侦听器,它会自行正确转发端口
我是 运行 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/3038 和 https://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 并在那里配置侦听器,它会自行正确转发端口