apache-kafka - 在 WSL2 中通过 IDE 连接到 kafka 服务器时出错
问题描述
我无法通过在 Windows 上运行的 intellij 或 vscode 连接到在 ubuntu 上运行的 kafka 服务器(我在 WSL2 上尝试过的第一台服务器)。我什至尝试使用虚拟机的 IP,但没有运气。据我了解,我们应该能够根据此文档https://docs.microsoft.com/en-us/windows/wsl/compare-versions使用“localhost”进行连接 我错过了什么吗?
这是我的代码
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();
解决方案
我有同样的问题,很难解决。当我在 WSL2 中发现这个已关闭但显然仍未解决的问题时,突破就来了。基本上,发生的事情是我无法从 Windows 10 中的 IntelliJ 访问 Ubuntu/WSL2 的 localhost。所以,当我在 Intellij 中编译并运行我的程序时,它给了我你发布的错误。
我的设置的一些细节:
操作系统:Windows 10,版本 2004(操作系统内部版本 19041.630)
我的 build.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/动物园管理员
- /tmp/kafka-checkpoint (这是我在程序中设置的目录,你的可能不同,但是当我没有设置时 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]
我利用这段时间在生产者(窗口 3)中输入了一些行,并在快速启动消费者(窗口 4)中查找输出。aux-out(窗口 5)中不应显示任何内容,这将在程序在 sbt 中运行时生成。
然后我运行我的程序。我没有从 Windows 中移动我的项目,而是导航到 Ubuntu 中的 windows 目录 (/mnt/c/User/me/lots/of/dir/kafkaProject)。我从sbt
目录开始build.sbt
。加载后,我“sbt
编译”和“运行”
它开始像火花作业一样处理,但随后文本开始飞逝。这是您应该在aux-out中看到来自快速入门主题输出的输入的时候。
在程序运行时,在窗口 3 的生产者中输入的文本应显示在 4 和 5 中。
我没有提到的一件事是,在尝试运行该程序几次但都失败后,我确实执行了“wsl.exe --shutdown”并重新启动了所有窗口以重新启动。如果您收到提示缺少主题的错误消息,请尝试更改主题名称并重新开始。我发现有时我以前使用过但不起作用的主题已损坏。我相信还有其他一些我尚未发现的临时文件正在缓存主题,但是一旦我开始工作,我就继续前进。
祝你好运!
推荐阅读
- node.js - 无法重新初始化并从我的 catch 语句返回错误响应
- python - 为什么在python中输入带有前导0的数字时会显示错误(不确定这是否与其他语言相同)?
- javascript - Open Weather API 无法在 Safari 或 Firefox 中运行
- php - 文件输入多个文件选择不起作用
- sql-server - 在 T-SQL 中有没有办法说如果这个参数等于“XYZ”然后使用“XYZ”但如果不是全部返回?
- android - 无法在后台获取通话记录(Flutter)
- amazon-web-services - 为 AWS CodePipeline 过滤 Bitbucket Webhook
- swift - NSAttributedString 中的块引用
- c - 为什么 C 程序中的 GPIO 权限与控制台不同?
- javascript - WebGL 未正确渲染 3d 对象