4

私は、私のホスト(Windows)からゲスト(Linux)への接続に問題があり、私はKafkaをインストールしました。VirtualBox内のKafkaに接続

ConfluentツールをインストールしたVM(VirtualBoxを使用)をセットアップしました。それは、飼育係、カフカ、およびスキーマレジストリを開始し

confluent start schema-registry 

:このVMで、私は、コマンドを実行します。このVMの下で

、私は

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

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

を実行することができ、すべてが正常に動作している、私が生産し、メッセージを受け取ることができます。

私の目標は、生産し、私のホストからのメッセージを消費できるようにするがあるので、私はこのポート転送ルールの設定:

bin\windows\kafka-console-producer.bat --broker-list 127.0.0.1:9092 --topic test 
:私のWindowsから port forwarding rule

が、私は仕事には、このコマンドを期待していました

しかし、私が得るすべてはこれです:私は、多くの異なるものを試してみたが、まだ解決策を見つけることができません

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

ゲストとホストの間のホスト名のギャップのようです。 Linuxゲストはどのホスト名を持っていますか?

プロデューサ/コンシューマがKafkaブローカにアクセスすると、Kafkaブローカはデフォルト設定でデータプロデューサまたはコンシューマのホスト名を返します。したがって、プロデューサ/コンシューマは、ブローカのホスト名をIPAddressに解決する必要があります。

任意のホスト名を返すブローカの場合は、advertised.listenersの設定を使用します。

詳細はthe "advertised.listeners" configuration docsです。

+0

本当にありがとうございました。 Linuxゲストのホスト名はkafka-VirtualBoxです。 advertised.listeners = PLAINTEXT://カフカ-VirtualBoxは:advertised.listenersでは、私は今、この持っ9092 をし、Windowsホストでは、私は、hostsファイルに次の行を追加: 127.0.0.1カフカ-VirtualBox 私はまだ同じエラーが発生しています.... – Florian

+0

Hmm ... 次に、ステップバイステップで解決する必要があります。 まず、「kafkaコマンドでkafka-VirtualBoxにアクセスできますか? 〜によってkafka-topics.bat。 – kimutansk

+0

私は途中で投稿しました。 それから、段階的に解決する必要があります。まず、「kafkaコマンドでkafka-VirtualBoxにアクセスできますか?」を確認します。 kafka-broker-api-versions.batによる。 コマンドがkafka-VirtualBoxにアクセスできない場合、この問題はバーチャルボックスのネットワーク設定の問題です。 コマンドがkafka-VirtualBoxにアクセスできる場合、この問題はkafkaブローカーまたはクライアント設定の問題になります。 – kimutansk

0

私は同様のものをセットアップしようとしていました。 KafkaとZookeeperのために適切な仮想ネットワークを設定する方がいいかもしれませんが、私は引き続き行動し、個人的なアプローチを共有したいと考えています。

私は、VirtualBox Linuxゲスト自体で動作するKafkaとZookeeperだけでなく、その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 

ここで最も重要な点は、(あなたが2181をパッチしましたVirtualBoxのデフォルトNATベースのネットワーキングとよく果たしている汚いちょっとしたトリック仮定しないKAFKA_ADVERTISED_HOST_NAME、ありますOPのように9092まで)。このトリックでVirtualBox ホスト OSのコンシューマまたはプロデューサーは、"localhost"にあり、ホストに解決されることをKafkaから学びますが、ホスト上のポートはゲストにパッチされてしまいます正しい場所。

1.xで同じことを実行する適切な方法は、Advertised Listenersプロパティを使用することですが、原則は同じです。ゲストOS上のdocker-compose upた後、私は/リストのトピックを作成して、消費/ホストOSからのメッセージを作り出すことができる、これらの設定で

port 9092 and 2181 forwarded

:参考


は、ここに私のVirtualBoxの設定です。

関連する問題