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的來賓操作系統上後,我可以列出/製造話題和消費/從主機操作系統產生的消息。