在wsl2中通过ide连接到kafka服务器时出错

olmpazwi  于 2021-06-04  发布在  Kafka
关注(0)|答案(2)|浏览(597)

我无法通过运行在windows上的intellij或vscode连接到运行在ubuntu上的kafka服务器(我在wsl2上尝试的第一个服务器)。我甚至尝试使用虚拟机的ip,但没有运气。据我所知,我们应该能够连接使用'本地主机'根据这个文件https://docs.microsoft.com/en-us/windows/wsl/compare-versions 我错过什么了吗?
这是我的密码

Properties producerProperties = new Properties();
    producerProperties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
    producerProperties.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
    producerProperties.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());

    KafkaProducer<String, String> producer = new KafkaProducer<String, String>(producerProperties);

    ProducerRecord<String, String> record = new ProducerRecord<>("topic_1", "hello from java");
    producer.send(record);

    producer.flush();
    producer.close();

这里是错误

bbmckpt7

bbmckpt71#

您需要将代码中的localhost替换为0.0.0.0(所有IP)
这样地: producerProperties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "0.0.0.0:9092"); 这将在链接中的“其他网络注意事项”部分进行解释。

wswtfjt7

wswtfjt72#

我也有同样的问题,很难解决。当我发现wsl2中的这个问题已关闭,但显然仍然存在问题时,取得了突破。基本上,我无法从Windows10中的intellij访问ubuntu/wsl2的本地主机。所以,当我用intellij编译和运行我的程序时,它给了我你发布的错误。
有关我的设置的一些详细信息:
操作系统:windows 10,版本2004(操作系统内部版本19041.630)
我的版本.sbt:

scalaVersion := "2.12.10"

libraryDependencies += "org.apache.spark" %% "spark-sql" % "3.0.1"
libraryDependencies += "org.apache.spark" %% "spark-streaming" % "3.0.1"
libraryDependencies += "org.apache.bahir" %% "spark-streaming-twitter" % "2.4.0"
libraryDependencies += "org.apache.httpcomponents" % "httpclient" % "4.5.12"
libraryDependencies += "commons-io" % "commons-io" % "2.8.0"
libraryDependencies += "org.apache.spark" % "spark-sql-kafka-0-10_2.12" % "3.0.1"

这是我尝试运行的scala代码,它读入一个主题(快速启动事件)并发布到另一个主题(辅助输出):

package kafka

import org.apache.spark.sql.SparkSession

object kafkaRunner {
   def main(args: Array[String]): Unit = {
     val spark = SparkSession.builder()
       .appName("Kafka First App")
       .master("local[*]")
       .getOrCreate()

     import spark.implicits._

     val df = spark
       .readStream
       .format("kafka")
       .option("kafka.bootstrap.servers", "localhost:9092")
       .option("subscribe", "quickstart-events")
       .load()

     df
       .writeStream
       .format("kafka")
       .option("kafka.bootstrap.servers", "localhost:9092")
       .option("topic", "aux-output")
       .option("checkpointLocation", "/tmp/kafka-checkpoint")
       .start()
       .awaitTermination()
  }
}

我已经运行程序很多次了,为了重新开始,我删除了zookeeper和kafkas/tmp文件。我不知道这些文件有多值钱,所以请小心处理。我删除了这三个目录:
/tmp/kafka日志
/tmp/Zookeeper
/tmp/kafka检查点(这是我在程序中设置的一个目录,你的可能不同,但是spark在我没有设置这个时抛出了一个错误)。
接下来,我在ubuntu的kafka目录下运行了这些命令。每个都在一个单独的终端窗口中。

[terminal window 1 - zookeeper server]
bin/zookeeper-server-start.sh config/zookeeper.properties

[terminal window 2 - kafka server,**wait until zookeeper finishes loading before running**]
bin/kafka-server-start.sh config/server.properties

[terminal window 3 - create our 2 topics, then run the producer for**quickstart**]
(the following three commands were run in the same window)

bin/kaftopics.sh --create.sh --topic quickstart-events --bootstrap-server localhost:9092

bin/kaftopics.sh --create.sh --topic aux-output --bootstrap-server localhost:9092

bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092

[terminal window 4 - create a consumer for**quickstart**channel]
bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092

[terminal window 5 - create a consumer for**aux-out**channel]
bin/kafka-console-consumer.sh --topic aux-out --from-beginning --bootstrap-server localhost:9092

[terminal window 6 - use to run sbt]

我花了这段时间在producer(窗口3)中键入一些行,并在quickstart consumer(窗口4)中查找输出。aux out(窗口5)中不应显示任何内容,这将在sbt中运行程序时生成。
然后我运行我的程序。我没有从windows上移动我的项目,而是导航到ubuntu的windows目录(/mnt/c/user/me/lots/of/dir/kafkaproject)。我开始了 sbt 在目录中 build.sbt . 一次 sbt 加载了“编译”和“运行”
它开始像Spark作业一样处理,但随后文本开始飞过。这时您应该可以在aux out中看到来自quickstart topic output的输入。
当程序运行时,在窗口3的生产者中输入的文本应该显示在4和5中。
有一件事我没有提到,在尝试运行程序失败了几次之后,我确实做了一个“wsl.exe--shutdown”并重新启动了所有的窗口以获得一个干净的开始。如果出现错误,说明缺少主题,请尝试更改主题名称,然后重新开始。我发现有时我以前用过但不起作用的主题被破坏了。我相信还有其他一些临时文件,我还没有发现,是缓存的主题,但我移动了,一旦我得到它的工作。
祝你好运!

相关问题