web-dev-qa-db-ja.com

Kafkaトピックのメタデータの取得に失敗しました

JavaサードパーティのクライアントKafka=およびZooKeeperサーバー用のクライアントです。トピックをリストおよび説明することはできますが、 ClosedChannelExceptionが発生します。ここでコマンドラインクライアントを使用してそれらを再現します。

$ bin/kafka-console-consumer.sh --zookeeper 255.255.255.255:2181 --topic eventbustopic
[2015-06-02 16:23:04,375] WARN Fetching topic metadata with correlation id 0 for topics [Set(eventbustopic)] from broker [id:1,Host:SOME_Host,port:9092] failed (kafka.client.ClientUtils$)
Java.nio.channels.ClosedChannelException                                       
    at kafka.network.BlockingChannel.send(BlockingChannel.scala:100)           
    at kafka.producer.SyncProducer.liftedTree1$1(SyncProducer.scala:73)        
    at kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(SyncProducer.scala:72)
    at kafka.producer.SyncProducer.send(SyncProducer.scala:113)                
    at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:58)        
    at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:93)        
    at kafka.consumer.ConsumerFetcherManager$LeaderFinderThread.doWork(ConsumerFetcherManager.scala:66)
    at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:60)         
[2015-06-02 16:23:04,515] WARN Fetching topic metadata with correlation id 0 for topics [Set(eventbustopic)] from broker [id:0,Host:SOME_Host,port:9092] failed (kafka.client.ClientUtils$)
Java.nio.channels.ClosedChannelException                                       
    at kafka.network.BlockingChannel.send(BlockingChannel.scala:100)           
    at kafka.producer.SyncProducer.liftedTree1$1(SyncProducer.scala:73)        
    at kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(SyncProducer.scala:72)
    at kafka.producer.SyncProducer.send(SyncProducer.scala:113)                
    at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:58)        
    at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:93)        
    at kafka.consumer.ConsumerFetcherManager$LeaderFinderThread.doWork(ConsumerFetcherManager.scala:66)
    at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:60)         

代替コマンドは成功します:

$ bin/kafka-topics.sh --describe --zookeeper 255.255.255.255:2181 --topic eventbustopic
Topic:eventbustopic   PartitionCount:2        ReplicationFactor:1     Configs:
    Topic: eventbustopic  Partition: 0    Leader: 1       Replicas: 1     Isr: 1
    Topic: eventbustopic  Partition: 1    Leader: 0       Replicas: 0     Isr: 0

$ bin/kafka-topics.sh --list --zookeeper 255.255.255.255:2181 --topic eventbustopic
eventbustopic

(IPは編集され、255.255.255.255に置き換えられました)

この例外をGoogleで検索すると、プロデューサー側に問題があります。実際、ClientUtils.fetchTopicMetadataこれは主にプロデューサーによって使用されることを示唆しています。

私が心配しているのは、これがネットワークレイアウトの結果である可能性があることです。パケットはHaproxyによって破壊され、VPNを介して送信されます。

ここで実際に何が働いていますか?

37
jwilner

ブローカーは、メッセージの生成/消費に使用するホスト名をクライアントに伝えます。デフォルトでは、Kafkaは実行するシステムのホスト名を使用します。このホスト名がクライアント側で解決できない場合、この例外が発生します。

advertised.Host.name Kafkaクライアントが使用するホスト名/アドレスへの構成。

45
Johannes Barop

この問題を解決する私の方法は次のとおりです。

  1. _bin/kafka-server-stop.sh_を実行して、kafkaサーバーの実行を停止します。
  2. 行を追加して、プロパティファイル_config/server.properties_を変更します:_listeners=PLAINTEXT://{ip.of.your.kafka.server}:9092_
  3. restart kafka server。

Lisener設定がないため、kafka=はJava.net.InetAddress.getCanonicalHostName()を使用してソケットサーバーがリッスンするアドレスを取得します。

11
djzhu

AWSでこのエラーに遭遇しました。問題は、セキュリティグループを過度に制限し、ポート2181および9092を「自分のIP」に設定したことでした。つまり、kafka=インスタンスは同じボックスで実行されているZKを見つけることができませんでした。

解決策-それを開いてください-少し。

0
ethrbunny

Zookeeperに問題があります。 255.255.255.255:2181は有効なZookeeperアドレスではありません。これは、ネットワーク上のブロードキャストアドレスまたはサブネットマスクです。動作させるには、Zookeeperを実行しているマシンのIPアドレスまたはホスト名を見つけます。

0
Douglas Lopez