当前位置: 首页 > 知识库问答 >
问题:

无法从Windows生成在WSL 2上运行的Kafka主题

呼延智明
2023-03-14

我正在Ubuntu WSL2上成功运行最新的Kafka。我可以在WSL上运行的Ubuntu中启动zookeeper、kafka服务器、创建主题、控制台制作和控制台消费。然而,当我进入Windows上的Intellij并创建一个简单的Java生成器时,它似乎无法连接到代理

版本

    Java version: 1.8
    Kafka Version: 2.6
    hostname (from Ubuntu): KDAAPPDEV04
    hostname (from Powershell): KDAAPPDEV04
    java.net.InetAddress.getLocalHost().getHostName() = KDAAPPDEV04
    java.net.InetAddress.getLocalHost().getCanonicalHostName() = KDAAPPDEV04
    netstat from CMD:
        TCP    [::1]:9092             [::]:0                 LISTENING

服务器属性我在另一个SO答案中找到了此设置,但这些设置对我不起作用。

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

然后尝试(并重新启动动物园管理员和Kafka)

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

生产者

我用三个不同的值运行这个生产者:主机名、localhost和127.0.0.1但它从来没有连接到代理

    public class ProducerDemo{

    private static Logger logger = LoggerFactory.getLogger(ProducerDemo.class);

    public static void main(String[] args) throws UnknownHostException{

        System.out.println(InetAddress.getLocalHost().getHostName());
        System.out.println(InetAddress.getLocalHost().getCanonicalHostName());

        String bootstrapServers = "127.0.0.1:9092";
//        String bootstrapServers = "localhost:9092";
//        String bootstrapServers = "KDAAPPDEV04:9092";

        //create Producer properties
        Properties properties = new Properties();
        properties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,bootstrapServers);
        properties.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        properties.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());

        //create the producer
        KafkaProducer<String,String> producer = new KafkaProducer<String, String>(properties);

        //create a producer record
        ProducerRecord<String,String> record = new ProducerRecord<String, String>("first-topic","hola mundo");

        //send data
        producer.send(record);

        //flush + close
        producer.flush();
        producer.close();
    }
}

错误

[main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka version: 2.6.0
[main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka commitId: 62abe01bee039651
[main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka startTimeMs: 1601666175706
[kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node -1 (KDAAPPDEV04/my-ipconfig-address-here:9092) could not be established. Broker may not be available.

共有3个答案

章鸿光
2023-03-14

WSL2 在虚拟机监控程序上运行,您需要端口代理来连接在 WSL2 上运行的 Kafka Broker。

步骤 1 .使用以下命令检查 WSL2 IP 并复制 inet 值

$ ifconfig
inet 172.X.X.X 

第二步。使用管理员权限打开cmd

   netsh interface portproxy add v4tov4 listenport=9092 listenaddress=0.0.0.0 connectport=9092 connectaddress=172.X.X.X

你现在应该可以连接了

注意:每次重新启动机器时,WSL2 IP都会改变

芮朗
2023-03-14

我有确切的问题,你有,我解决如下:

  1. 我在WSL2 Ubuntu shell中运行了以下命令: ip addr | grep “eth0” 我记下了 inet 属性的 ip 地址,例如 172.27.10.68
  2. 在我的Kafka server.properties中,我替换了监听器的属性值,如下所示:listeners=PLAINTEXT://172.27.10.68:9092 我注释掉了 advertised.listeners 属性。但是,您也可以将有问题的 ip 分配给此属性,并将侦听器属性设置为 0.0.0.0。但是我假设您正在使用Kafka安装进行测试/学习目的,因此我会保持简单。
  3. 我没有对动物园管理员的默认 ip:port 进行任何更改
  4. 我正在使用模式注册表,所以我html" target="_blank">修改了 Kafka 引导属性,如下所示:kafkastore.bootstrap.servers=PLAINTEXT://172.27.10.68:9092 我没有对默认模式注册表侦听器侦听器侦听器=http://0.0.0.0:8081
  5. 我在我的IntelliJ Kafka Producer中使用相同的ip(如上所列)。然后,它愉快地连接到我在 WSL2 中的 Kafka 代理。

有关 WSL2 网络的详细信息,请访问 https://learn.microsoft.com/en-us/windows/wsl/compare-versions 。

此设置的唯一问题是,每次关闭或重新启动Windows计算机或关闭Ubuntu终端时,eth0的IP地址都会更改。这会导致重做步骤 2、4 和 5。我相信有更好的方法,但我尝试的一切都失败了,除了这个。

艾奕
2023-03-14

也有同样的问题。根本原因似乎是WSL2在IPv6和本地主机方面出现了问题(参见:https://github.com/microsoft/WSL/issues/4851)

我发现的唯一不涉及每次重新启动时更改配置的修复方法(根据上面的“172.*”建议)是在Linux中运行的Kafka服务器配置和Windows中的Java客户端中使用IPv6环回地址::1。

在服务器属性中,我有这个:

listeners=PLAINTEXT://[::1]:9092

同样,在我的Java客户端引导服务器配置中,我使用

"[::1]:9092"
 类似资料:
  • 我通过在WSL2上运行的Docker Destop在Windows上使用KinD,并尝试设置入口以公开主机上的端口。 我按照指南并使用如下所示的配置安装了集群:https://kind.sigs.k8s.io/docs/user/ingress/,以及入口NGINX控制器(来自helm)和一个自定义入口资源,该资源使用正确的类名重定向到我的服务。 如果我将kubectl端口转发到入口服务,它可以正

  • 我已经正确地设置了Docker,并运行了一些容器没有问题。现在我试着设置邮件。我试了两个: 1 https://hub.docker.com/r/paintedfox/postgresql/ 2 https://hub.docker.com/_/postgres/ 我已尝试在VirtualBox中为容器设置端口转发。 我还尝试了机器主机,如Kitematic:192.168.99.100所示

  • 问题内容: 我在端口5000上的docker容器中运行了一个REST服务,该服务用于通过kafka主题生成消息,而该主题用尽了docker容器。 我为生产者客户端配置了以下属性:- 我已经用下面的命令开始了包含: 我还做了以下配置来宣传kafka主机和端口 尽管我尝试制作kafka主题时已进行了所有配置,但还是遇到了以下错误:- 有人可以指出实际问题在哪里吗? 问题答案: 在现实生活中,永远都不应

  • 我正在尝试使用python 3从WSL2(Ubuntu18.04)中无头打开Chrome。 在Windows上,我使用的是Chrome84。我已经从ChromeDriver-WebDriver下载了Chrome Driver 84。并在C:\chromedriver\chromedriver.exe下安装了。exe 以下是我的剧本: 它失败并出现错误: 引发WebDriverException(“

  • 这些天我正在学习微服务架构,我需要运行Kafka来遵循一些教程。然而,zookeeper-server-start在cmd上运行Kafka的第一步对我来说不起作用。它说“命令的语法不正确” 我遵循了下面的过程 > 下载kafka和extarct(https://kafka.apache.org/downloads-kafka2.11-2.1.0.tgz(二进制下载)) bin\windows\zo