web-dev-qa-db-ja.com

Zookeeper 3.4.6でKafka 0.8.1を使用しているときにLeaderNotAvailableExceptionが発生する

ウェブサイトごとにkafka(0.8.1 with 2.9.2 Scala)の安定バージョンをインストールし、3ノードのzookeeperアンサンブル(3.4.6)で実行しています。テストトピックを作成しようとしましたが、トピックのパーティションにリーダーが割り当てられていないことに注意してください。

[kafka_2.9.2-0.8.1]$ ./bin/kafka-topics.sh --zookeeper <zookeeper_ensemble> --describe --topic test-1
Topic:test-1    PartitionCount:1    ReplicationFactor:3 Configs:
    Topic: test-1   Partition: 0    **Leader: none**    Replicas: 0,1,2 **Isr:** 

とにかくコンソールプロデューサーを使用してトピックに書き込もうとしましたが、LeaderNotAvailableException例外に遭遇しました:

[kafka_2.9.2-0.8.1]$ ./kafka-console-producer.sh --broker-list <broker_list> --topic test-1

hello world

[2014-04-22 11:58:48,297] WARN Error while fetching metadata [{TopicMetadata for topic test-1 -> 
No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException}] for topic [test-1]: class kafka.common.LeaderNotAvailableException  (kafka.producer.BrokerPartitionInfo)

[2014-04-22 11:58:48,321] WARN Error while fetching metadata [{TopicMetadata for topic test-1 -> 
No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException}] for topic [test-1]: class kafka.common.LeaderNotAvailableException  (kafka.producer.BrokerPartitionInfo)

[2014-04-22 11:58:48,322] ERROR Failed to collate messages by topic, partition due to: Failed to fetch topic metadata for topic: test-1 (kafka.producer.async.DefaultEventHandler)

[2014-04-22 11:58:48,445] WARN Error while fetching metadata [{TopicMetadata for topic test-1 -> 
No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException}] for topic [test-1]: class kafka.common.LeaderNotAvailableException  (kafka.producer.BrokerPartitionInfo)

[2014-04-22 11:58:48,467] WARN Error while fetching metadata [{TopicMetadata for topic test-1 -> 
No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException}] for topic [test-1]: class kafka.common.LeaderNotAvailableException  (kafka.producer.BrokerPartitionInfo)

[2014-04-22 11:58:48,467] ERROR Failed to collate messages by topic, partition due to: Failed to fetch topic metadata for topic: test-1 (kafka.producer.async.DefaultEventHandler)

[2014-04-22 11:58:48,590] WARN Error while fetching metadata [{TopicMetadata for topic test-1 -> 
No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException}] for topic [test-1]: class kafka.common.LeaderNotAvailableException  (kafka.producer.BrokerPartitionInfo)

[2014-04-22 11:58:48,612] WARN Error while fetching metadata [{TopicMetadata for topic test-1 -> 
No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException}] for topic [test-1]: class kafka.common.LeaderNotAvailableException  (kafka.producer.BrokerPartitionInfo)

[2014-04-22 11:58:48,612] ERROR Failed to collate messages by topic, partition due to: Failed to fetch topic metadata for topic: test-1 (kafka.producer.async.DefaultEventHandler)

[2014-04-22 11:58:48,731] WARN Error while fetching metadata [{TopicMetadata for topic test-1 -> 
No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException}] for topic [test-1]: class kafka.common.LeaderNotAvailableException  (kafka.producer.BrokerPartitionInfo)

[2014-04-22 11:58:48,753] WARN Error while fetching metadata [{TopicMetadata for topic test-1 -> 
No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException}] for topic [test-1]: class kafka.common.LeaderNotAvailableException  (kafka.producer.BrokerPartitionInfo)

[2014-04-22 11:58:48,754] ERROR Failed to collate messages by topic, partition due to: Failed to fetch topic metadata for topic: test-1 (kafka.producer.async.DefaultEventHandler)

[2014-04-22 11:58:48,876] WARN Error while fetching metadata [{TopicMetadata for topic test-1 -> 
No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException}] for topic [test-1]: class kafka.common.LeaderNotAvailableException  (kafka.producer.BrokerPartitionInfo)

[2014-04-22 11:58:48,877] ERROR Failed to send requests for topics test-1 with correlation ids in [0,8] (kafka.producer.async.DefaultEventHandler)

[2014-04-22 11:58:48,878] ERROR Error in handling batch of 1 events (kafka.producer.async.ProducerSendThread)
kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries.
    at kafka.producer.async.DefaultEventHandler.handle(DefaultEventHandler.scala:90)
    at kafka.producer.async.ProducerSendThread.tryToHandle(ProducerSendThread.scala:104)
    at kafka.producer.async.ProducerSendThread$$anonfun$processEvents$3.apply(ProducerSendThread.scala:87)
    at kafka.producer.async.ProducerSendThread$$anonfun$processEvents$3.apply(ProducerSendThread.scala:67)
    at scala.collection.immutable.Stream.foreach(Stream.scala:547)
    at kafka.producer.async.ProducerSendThread.processEvents(ProducerSendThread.scala:66)
    at kafka.producer.async.ProducerSendThread.run(ProducerSendThread.scala:44)

また、これは最初は数日間機能していましたが、作成されたトピックには突然、このリーダーの問題がありました。

66
user3561789

Kafkaは、外部調整フレームワーク(デフォルトではZookeeper)を使用して構成を維持します。設定はKafkaログデータと同期していないようです。この場合、影響を受けるトピックデータと関連するZookeeperデータを削除します。

テスト環境の場合:

  1. Kafka-serverおよびZookeeper-serverを停止します
  2. 両方のサービスのデータディレクトリを削除します。デフォルトでは、/tmp/kafka-log/tmp/zookeeperです。
  3. Kafka-serverZookeeper-serverをもう一度開始します
  4. 新しいトピックを作成する

これで、トピックを再び使用できるようになりました。

本番環境の場合:

Kafkaトピックは異なるディレクトリに保存されるため、特定のディレクトリを削除する必要があります。 Zookeeperクライアントを使用して、Zookeeperから/brokers/{broker_id}/topics/{broken_topic}も削除する必要があります。

愚かなことをする前に、Kafkaのドキュメントを注意深く読んで、構成構造を確認してください。 Kafkaは、問題をより簡単に解決できるように、トピック削除機能( KAFKA-3 )を公開しています。

49
stanleyxu2005

同じ問題がありました。 Kafkaでは、マシンのホスト名を解決して、それ自体に接続する必要があることがわかりました。

私は ホスト名を更新しました 私のマシンで、zookeeperとkafkaを再起動した後、トピックを正しく書き込むことができました。

19
Lee Netherton

完全修飾ホスト名で/etc/hosts127.0.0.1にエントリを追加することで、この問題を解決しました。

127.0.0.1       x4239433.your.domain.com x4239433

生産者と消費者は順調に働き始めました。

10
borodark

同じ問題がありました。結局、Kafkaノードを停止してから削除する必要がありました。その後、 Kafkaトピックの削除方法に関するアドバイスに従ってください 。壊れたトピックを取り除くと、Kafkaを再び正常に開始できました。

より良いアプローチがあるかどうか、そして今後このような事態を避ける方法を知りたいです。

7
Mark Butler

私は同じ問題を抱えていて、JDKを1.7から1.6に解決しました

2
user3603968

考えられるもう1つの答え-kafka advertised.hostname内のconfig/server.propertiesのIPアドレスは、余分なスペースで誤って入力されている可能性があります。

私の場合

advertised.Host.name=10.123.123.211_\n (where _ is an extra space)

正しいのではなく

advertised.Host.name=10.123.123.211\n

なんらかの理由で、これは問題なく6か月間機能していました。おそらく、ライブラリの更新によって、余分なスペースを削除するIPアドレスのリラックスした検索が削除されたと考えられます。

構成ファイルの簡単な修正とkafkaの再起動により、この問題が解決します。

2
Soren

JDKの問題です。

Openjdkをインストールしました

Java version "1.7.0_51"
OpenJDK Runtime Environment (IcedTea 2.4.4) (7u51-2.4.4-0ubuntu0.12.04.2)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)

しかし、私はそれをOracle jdkに変更しました(このリンクに従ってください: http://www.webupd8.org/2012/06/how-to-install-Oracle-Java-7-in-debian.html

Java version "1.7.0_80" Java(TM) SE Runtime Environment (build
1.7.0_80-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

今では正常に動作します。お役に立てれば。

2
Ashwini Adlakha

同じ問題があった。コンシューマ/プロデューサが使用している各パーティションに少なくとも1つのトピックがあることを確認してください。 Zookeeperは、パーティションを使用するトピックがない場合、パーティションのリーダーを見つけられません。

2
Andrew

ローカルシステム(mac OS X El Capitan)でKafkaで遊んでいたときに、まったく同じ問題に直面しました。問題は私のzookeeperにあり、正しい設定ファイルを参照していませんでした。 zookeeperを再起動し、Kafkaを実行して、次のコマンドを実行します。 LeaderがNoneでないことを確認してください。 Leaderがnoneの場合、そのトピックを削除して再作成します。

kafka-topics --zookeeper localhost:2181 --describe --topic pytest

出力は次のようになります

Topic:pytest    PartitionCount:1    ReplicationFactor:1 Configs:
Topic: pytest   Partition: 0    Leader: 0   Replicas: 0 Isr: 0

これが役立つことを願っています。

0
suyash

OpenshiftのKafkaZookeeperポッドの問題に直面し、KafkaがTLSに対応していました。以下の環境変数をKafkaに追加する必要がありました。

  • KAFKA_ZOOKEEPER_CONNECT

  • KAFKA_SSL_KEYSTORE_LOCATION

  • KAFKA_SSL_TRUSTSTORE_LOCATION

  • KAFKA_SSL_KEYSTORE_PASSWORD

  • KAFKA_SSL_TRUSTSTORE_PASSWORD

  • KAFKA_ADVERTISED_LISTENERS

  • KAFKA_INTER_BROKER_LISTENER_NAME

  • KAFKA_LISTENERS

また、変数を設定した後、ポッドを削除して再作成する必要がありました。

0

Config/server.propertiesに「advertised.Host.name = localhost」を追加し、Kafkaサーバーを再起動します。それは私のために働いた

0
Reddeiah Pidugu