Flo*_*ian 5 virtualbox apache-kafka kafka-consumer-api kafka-producer-api
我遇到麻烦从我的主机(Windows)连接到我安装Kafka的Guest(Linux).
我已经安装了一个VM(使用VirtualBox),我在其中安装了Confluent工具.在这个VM中,我运行命令:
confluent start schema-registry
Run Code Online (Sandbox Code Playgroud)
它启动zookeeper,kafka和schema-registry.
在这个VM下,我可以运行
kafka-console-producer --broker-list localhost:9092 --topic test
Run Code Online (Sandbox Code Playgroud)
和
kafka-console-consumer --bootstrap-server localhost:9092 --topic test
Run Code Online (Sandbox Code Playgroud)
一切正常,我可以制作和接收信息.
但是我的目标是能够从我的主机生成和使用消息,所以我设置了这个端口转发规则:

从我的Windows,我期待这个命令工作:
bin\windows\kafka-console-producer.bat --broker-list 127.0.0.1:9092 --topic test
Run Code Online (Sandbox Code Playgroud)
但我得到的只是:
ERROR Error when sending message to topic test with key: null, value: 3 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for test-0: 1529 ms has passed since batch creation plus linger time
Run Code Online (Sandbox Code Playgroud)
我尝试了很多不同的东西,但仍然无法找到解决方案....任何想法?
小智 5
这似乎是 Guest 和 Host 之间的主机名差距。Linux Guest 的主机名是什么?
当生产者/消费者访问 Kafka broker 时,Kafka broker 在默认设置下返回其数据生产者或消费者的主机名。因此生产者/消费者需要将代理的主机名解析为 IPAddress。
对于返回任意主机名的代理,请使用advertised.listeners设置。
详细信息在“advertised.listeners”配置文档中。