web-dev-qa-db-ja.com

Kafkaでメッセージを読み取り中のリバランス問題

Kafkaトピックでメッセージを読み込もうとしていますが、読み込めません。プロセスはメッセージを読まずに強制終了します。

ここに私が得るリバランスエラーがあります:

[2014-03-21 10:10:53,215] ERROR Error processing message, stopping consumer:  (kafka.consumer.ConsoleConsumer$)
kafka.common.ConsumerRebalanceFailedException: topic-1395414642817-47bb4df2 can't rebalance after 4 retries
    at kafka.consumer.ZookeeperConsumerConnector$ZKRebalancerListener.syncedRebalance(ZookeeperConsumerConnector.scala:428)
    at kafka.consumer.ZookeeperConsumerConnector.kafka$consumer$ZookeeperConsumerConnector$$reinitializeConsumer(ZookeeperConsumerConnector.scala:718)
    at kafka.consumer.ZookeeperConsumerConnector$WildcardStreamsHandler.<init>(ZookeeperConsumerConnector.scala:752)
    at kafka.consumer.ZookeeperConsumerConnector.createMessageStreamsByFilter(ZookeeperConsumerConnector.scala:142)
    at kafka.consumer.ConsoleConsumer$.main(ConsoleConsumer.scala:196)
    at kafka.consumer.ConsoleConsumer.main(ConsoleConsumer.scala)
Consumed 0 messages

ConsumerOffsetCheckerを実行しようとしましたが、これがエラーです。私はこれを解決する方法をまったく知りません。誰でもいいの?

./kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --zkconnect localhost:9092 --topic mytopic --group  topic_group
Group           Topic                          Pid Offset          logSize         Lag             Owner
Exception in thread "main" org.I0Itec.zkclient.exception.ZkNoNodeException: org.Apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /consumers/
        at org.I0Itec.zkclient.exception.ZkException.create(ZkException.Java:47)
        at org.I0Itec.zkclient.ZkClient.retryUntilConnected(ZkClient.Java:685)
        at org.I0Itec.zkclient.ZkClient.readData(ZkClient.Java:766)
        at org.I0Itec.zkclient.ZkClient.readData(ZkClient.Java:761)
        at kafka.utils.ZkUtils$.readData(ZkUtils.scala:459)
        at kafka.tools.ConsumerOffsetChecker$.kafka$tools$ConsumerOffsetChecker$$processPartition(ConsumerOffsetChecker.scala:59)
        at kafka.tools.ConsumerOffsetChecker$$anonfun$kafka$tools$ConsumerOffsetChecker$$processTopic$1.apply$mcVI$sp(ConsumerOffsetChecker.scala:89)
        at kafka.tools.ConsumerOffsetChecker$$anonfun$kafka$tools$ConsumerOffsetChecker$$processTopic$1.apply(ConsumerOffsetChecker.scala:89)
        at kafka.tools.ConsumerOffsetChecker$$anonfun$kafka$tools$ConsumerOffsetChecker$$processTopic$1.apply(ConsumerOffsetChecker.scala:89)
        at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:61)
        at scala.collection.immutable.List.foreach(List.scala:45)
        at kafka.tools.ConsumerOffsetChecker$.kafka$tools$ConsumerOffsetChecker$$processTopic(ConsumerOffsetChecker.scala:88)
        at kafka.tools.ConsumerOffsetChecker$$anonfun$main$3.apply(ConsumerOffsetChecker.scala:153)
        at kafka.tools.ConsumerOffsetChecker$$anonfun$main$3.apply(ConsumerOffsetChecker.scala:153)
        at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:61)
        at scala.collection.immutable.List.foreach(List.scala:45)
        at kafka.tools.ConsumerOffsetChecker$.main(ConsumerOffsetChecker.scala:152)
        at kafka.tools.ConsumerOffsetChecker.main(ConsumerOffsetChecker.scala)
Caused by: org.Apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /consumers/
        at org.Apache.zookeeper.KeeperException.create(KeeperException.Java:102)
        at org.Apache.zookeeper.KeeperException.create(KeeperException.Java:42)
        at org.Apache.zookeeper.ZooKeeper.getData(ZooKeeper.Java:927)
        at org.Apache.zookeeper.ZooKeeper.getData(ZooKeeper.Java:956)
        at org.I0Itec.zkclient.ZkConnection.readData(ZkConnection.Java:103)
        at org.I0Itec.zkclient.ZkClient$9.call(ZkClient.Java:770)
        at org.I0Itec.zkclient.ZkClient$9.call(ZkClient.Java:766)
        at org.I0Itec.zkclient.ZkClient.retryUntilConnected(ZkClient.Java:675)
        ... 16 more
16
divinedragon

私は最近、同様の問題を抱えています。コンシューマー構成rebalance.backoff.msおよびzookeeper.session.timeout.ms約5〜10秒。

最初のパラメーターは、kafkaにリバランスを再試行する前にさらに待つように指示します。 2つ目は、kafkaに、動物園管理者に接続しようとしている間、より忍耐強くなるように伝えます。

他の設定オプションは 公式ドキュメント にあります。

13
Minh-Triet LÊ

これはおそらく、ブローカーがZookeeperに接続したときにそれらのノードを正しく作成しなかったことを意味します。/consumerパスは、消費しようとするときに存在する必要があります。

デバッグのいくつかのパスを次に示します。

トピックを作成しましたか?

その場合:

  1. トピックにはいくつのパーティションがありますか?
  2. トピックメタデータが動物園管理者に正しく入力されていることを確認しましたか?
  3. 消費者の構成を確認できますか?

そうでない場合:

  1. 次に、スクリプト$KAFKA_DIR/bin/kafka-create-topic.shを使用してトピックを作成する必要があります。使用方法の詳細については、スクリプトの内部をご覧ください。
  2. トピックを作成したら、これまでに使用したことのないグループIDでコンシューマーを作成する必要があります。そうしないと、新たに起動しません。
2
laughing_man

Kafka.tools.ConsumerOffsetCheckerにバグがあります。消費されたオフセット情報を保持している特定のZookeeperノードが終了しない場合、ツールは実行を終了します。

たとえば、消費者グループ「mygroup」とトピック「topictest」があるとします。次に、パーティション2のオフセットがZnodeで維持されます:/ consumers/mygroup/offsets/topictest/2。

Znodeにトピックtopictestのパーティション2のエントリがない場合、コンシューマオフセットチェッカーツールはパーティション2のオフセットをチェックしている間に終了します。基本的に、Znode/consumers/mygroup/offsetsの最初のパーティション "n" Zookeeperに/ topictest/nがありません。

1
Nipun Talukdar

別の問題は、jarの競合が原因である可能性があります。ライブラリフォルダーに異なるバージョンの同じjarが保存されている場合。この問題が発生する可能性があります。 scala-library、zkclient、zookeeper、kafka-clientなどのjarは、異なるバージョンで複製しないでください。

0
charan teja

おそらくあなたのブローカーはオフラインであり、Zookeeperに接続できません。$KAFKA_ROOT_DIR/bin特定のトピックから消費できるかどうかを確認するためのパス。

0
user2720864