本文介紹了無法從Windows生成運行在WSL 2上的卡夫卡主題的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我在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
server.properties
我在另一個SO答案上找到了此設置,但這些設置對我無效。
advertised.listeners=PLAINTEXT://127.0.0.1:9092
listener.security.protocol.map=PLAINTEXT:PLAINTEXT
listeners=PLAINTEXT://0.0.0.0:9092
然后嘗試(并重新啟動ZooKeeper和Kafka)
advertised.listeners=PLAINTEXT://KDAAPPDEV04:9092
listener.security.protocol.map=PLAINTEXT:PLAINTEXT
listeners=PLAINTEXT://0.0.0.0:9092
制片人
我使用三個不同的值運行此生成器:HostName、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.
推薦答案
出現了同樣的問題。根本原因似乎是WSL2在IPv6和本地主機方面出現故障(參見:https://github.com/microsoft/WSL/issues/4851)
我發現的唯一不需要在每次重新啟動時都更改配置的修復程序(根據上面的建議)是在Linux中運行的Kafka服務器配置和Windows中的Java客戶端中使用IPv6環回地址::1。
在server.Properties中,我有以下內容:
listeners=PLAINTEXT://[::1]:9092
同樣,在我的Java客戶端引導服務器配置中,我使用
"[::1]:9092"
這篇關于無法從Windows生成運行在WSL 2上的卡夫卡主題的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,