2016-11-30 4 views
0

カフカ0.8.2.1を単一のドッカーコンテナで実行しています。これは、ドッカーの作成と一緒に動作するように設定されたいくつかのコンテナの1つです。ドッカーの作成は、kafka 9092ポートをホストマシンに公開します。カフカオーバーライドadvertised.host.nameクライアントのクライアント

カフカサーバーのadvertised.host.nameは、kafkaに設定されています。他のすべてのコンテナは、この名前を使用して問題なく通信できます。

問題は、Javaテストプログラムがホストマシンからカフカサーバーにメッセージを送信できないことです。私はそれが正常に動作し、ホストマシン上の/etc/hostsファイルにエントリを追加した場合、その後の年齢のためのorg.apache.kafka.clients.producer.KafkaProducerハングどちらの場合も、エラー

を使用してkafka.javaapi.producer.Producerエラー

  • を使用して

    • 。しかし、これは理想的ではありません、私は誰もがhostsファイルを乱さずにこれらのテストを実行できるようにしたいと思います。

      メタ情報で指定されたホスト名/ ipを上書きする方法がJava Kafkaプロデューサにあります。カフカのインスタンスは1つしかないので、「正しいもの」を取得することに問題はありません。

      結合ホスト/ポートは、クライアント接続のための ホスト/ポートと異なる場合は、あなたがadvertised.host.nameを設定することができます別のまれなケースで:それはこれを行うことができます意味FAQ page

      そして、 クライアント接続

      ためadvertised.portしかし、誰詳細どのように...

      以上の一般的な解決策という失敗はありません。 java実行時環境にhostsエントリを設定する方法はありますか?システム/etc/hostsファイルを乱すことなく?

      おかげ

  • 答えて

    2

    容器に、ホストマシン上で両方の消費者と生産者に話すことができるようにdockerisedブローカーを設定することが可能です。 localhostへdockerisedそのドッキングウィンドウ・コンネットワークIPアドレスへのブローカー、および任意の非dockerised生産者や消費者のためのbootstrap.servers

    設定advertised.host.name

    作成ネットワークIPを取得するには、作成ファイルに静的IPを指定するか、kafkaを開始する前にシェルコマンドを実行するようコンテナを設定します。私が使用するコマンドはip -4 addr show scope global dev $(route -n | grep 'UG[ \t]' | awk '{print $8}' | head -1) | grep inet | awk '{print $2}' | cut -d/-f 1ですが、おそらくもっと良い方法があります。

    +0

    問題が解決したら、これを試してみます。私たちも使用しているcouchbaseが同じ問題を抱えていることがわかります。私は実際にあなたがプログラムでJava内からDNSをオーバーライドすることができるソリューションを見つけたので、問題を回避するためにそれを使用しました。 – Sodved

    関連する問題