Kafka
クラスターを作成して、メッセージをリモートコントロールに送信しようとしています。 here の説明に従ってすべてを構成しました。私はこれをLinux Red Hat
マシン、およびシェルを使用して正常に動作します。 Javaコードを記述した後、quick start
Windowsマシンのチュートリアルで、次のエラーが表示されました。
...
DEBUG kafka.client.ClientUtils$ - Successfully fetched metadata for 1 topic(s) Set(example)
...
ERROR kafka.producer.SyncProducer - Producer connection to cldExampleKafka.domain:80 unsuccessful
Java.nio.channels.UnresolvedAddressException
...
at kafka.producer.async.ProducerSendThread.run(ProducerSendThread.scala:44)
...
WARN kafka.producer.async.DefaultEventHandler - Failed to send producer request with correlation id 2 to broker 0 with data for patitions [ATI,0]
Java.nio.channels.UnresolvedAddressException
...
kafka.common.FailedToSendMessageException: Failed to send message after 3 tries.
また、別のLinuxマシンでjarを実行しようとしましたが、それでも同じエラーが発生しました。
アドレスをlocalhost
に変更し、Javaがインストールされているマシンでjarとしてkafkaコードを実行すると動作します。
構成には問題があると思いますが、見つかりませんでした。
あなたのkafka server.properties
にはコメントされた設定があります
#advertised.Host.name=<Some IP>
これのコメントを外し、kafkaが実行されているLinuxマシンのIPを追加します。
advertised.Host.name=<Kafka Running Machine IP>
そして、クライアントから<Kafka Running Machine IP>
に接続します。これで問題が解決するはずです。
[〜#〜] edit [〜#〜]
オプションで、コメントを外すことができます
#advertised.port=9092
また、デフォルトのポートとは異なるポートでリッスンしている場合。
で働いた
from server.properties
コメント解除
listeners=PLAINTEXT://:9092
そして
advertised.listeners=PLAINTEXT://<Host IP>:9092
<Host IP>
を実際のIPに置き換えます。
ローカルマシンからkafka=リモートクラスターに接続しようとしました。
VMには、1つの内部IP(9.0.0.1)と1つの外部IP(192.1.1.1)がありました。 sshは内部のみで外部はできません。 conifg/server.propertiesにこれらの変更を加えました。
//マシンのIPに設定(ifconfig
またはhostname -I
を使用して検索)
listeners=PLAINTEXT://192.1.1.1:9092
//コンシューマとプロデューサが接続するIPに設定
advertised.listeners=PLAINTEXT://9.0.0.1:9092
config/server.properties
このlisteners=PLAINTEXT://[server_ip]:9092
そしてそれはうまくいきました。
簡単なテストのために、kafka-consumerのコマンドラインで[server_ip]を使用することを忘れないでください。例:
/usr/local/kafka_2.11-2.0.0/kafka-console-consumer.sh --property print.timestamp=true --bootstrap-server [server_ip]:9092 --topic [you_topic]
これがお役に立てば幸いです。
アリについて