4

我有麻烦连接从我的主机(Windows)到客户(Linux),我安装了卡夫卡。连接到卡夫卡VirtualBox

我已经设置了一个VM(带有VirtualBox),我安装了Confluent工具。在此VM中,我运行以下命令:

confluent start schema-registry 

它启动zookeeper,kafka和模式注册表。

在这个虚拟机,我可以运行

kafka-console-producer --broker-list localhost:9092 --topic test 

kafka-console-consumer --bootstrap-server localhost:9092 --topic test 

,一切工作正常,我可以产生和接收消息。

我的目标然而,能够生产从我的主机消耗的消息,所以我建立这个端口转发规则: port forwarding rule

从我的窗户,我期待这个命令工作:

bin\windows\kafka-console-producer.bat --broker-list 127.0.0.1:9092 --topic test 

但我得到的是这样的:

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 

我已经尝试了很多不同的东西,但仍然无法找到解决办法的....你的想法?

回答

3

这似乎是Guest和Host之间的主机名差距。 Linux Guest的主机名是什么?

当生产者/消费者访问Kafka经纪人时,Kafka经纪人以默认设置返回数据生产者或消费者的主机名。所以生产者/消费者需要将代理的主机名解析为IPAddress。

对于代理返回任意主机名称,请使用advertised.listeners设置。

详情在the "advertised.listeners" configuration docs

+0

非常感谢你的帮助,我真的感觉在这里丢失。 Linux Guest的主机名是kafka-VirtualBox。在advertised.listeners,我现在有这样的: advertised.listeners = PLAINTEXT://卡夫卡的VirtualBox:9092 和Windows主机,我加入这行到主机文件: 127.0.0.1卡夫卡-VirtualBox 我仍然有同样的错误虽然.... – Florian

+0

嗯...... 然后,它需要解决一步一步来。 首先,确认“是否有kafka命令可以访问kafka-VirtualBox?”由kafka-topics.bat。 – kimutansk

+0

我张贴在路上。 然后,它需要解决一步一步来。首先,确认“是否允许kafka命令访问kafka-VirtualBox?”由kafka-broker-api-versions.bat。 如果命令不能访问到卡夫卡的VirtualBox,这个问题是虚框的网络设置问题。 如果命令可以访问到卡夫卡的VirtualBox,这个麻烦变得卡夫卡的经纪人或客户端设置问题。 – kimutansk

0

我试图设置类似的东西。尽管为卡夫卡和Zookeeper建立适当的虚拟网络可能会更好,但我确实推动并希望分享我的个人方法。

我有事情卡夫卡和动物园管理员在VirtualBox的Linux客户本身,以及对运行Linux客户基于泊坞窗的解决方案运行工作。下面是我的客户内部使用的docker-compose.yml

version: '3' 

services: 

    zookeeper: 
    image: "wurstmeister/zookeeper" 
    ports: 
     - "2181:2181" 

    kafka: 
    image: "wurstmeister/kafka" 
    ports: 
     - "9092:9092" 
    environment: 
     KAFKA_ADVERTISED_HOST_NAME: "localhost" 
     KAFKA_CREATE_TOPICS: "test:1:1" 
     KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 
在VirtualBox中

这里的关键是KAFKA_ADVERTISED_HOST_NAME,它做了肮脏的小动作与默认的播放以及NAT为基础的网络(假设你已经修补2181和OP一样,9092)。有了这个把戏,VirtualBox 主机操作系统将向卡夫卡学习,它位于"localhost",这解决了主机,但是因为主机上的端口被修补到客人的事情最终在正确的地方。

正确的方法做同样在1.x中就是使用播发听众性质,但原理是一样的。


供参考,这是我的VirtualBox设置:

port 9092 and 2181 forwarded

使用这些设置,docker-compose up的来宾操作系统上后,我可以列出/制造话题和消费/从主机操作系统产生的消息。