Exécution dans LeaderNotAvailableException lors de l’utilisation de Kafka 0.8.1 avec Zookeeper 3.4.6

J’ai installé la version stable de kafka (0.8.1 avec Scala 2.9.2) selon leur site Web et je l’exécute avec un ensemble zookeeper à 3 nœuds (3.4.6). J’ai essayé de créer un sujet de test mais je constate qu’il n’y a pas de responsable affecté à la partition du sujet:

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

J’ai quand même essayé d’écrire sur le sujet en utilisant le producteur de la console, mais j’ai rencontré l’exception LeaderNotAvailableException:

 [kafka_2.9.2-0.8.1]$ ./kafka-console-producer.sh --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 sortinges. 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) 

Je devrais également dire que cela fonctionnait initialement pendant quelques jours et puis soudain, tout sujet créé avait ce problème de leader manquant.

Kafka utilise un cadre de coordination externe (par défaut Zookeeper) pour maintenir la configuration. Il semble que la configuration ne soit plus synchronisée avec les données du journal Kafka. Dans ce cas, je supprimerais les données de sujet concernées et les données Zookeeper associées.

Pour l’environnement de test:

  1. Arrêtez Kafka-server et Zookeeper-server
  2. Supprimez les répertoires de données des deux services, ils sont par défaut /tmp/kafka-log et /tmp/zookeeper .
  3. Redémarrez le Kafka-server Zookeeper-server
  4. Créer un nouveau sujet

Vous pouvez maintenant travailler avec le sujet à nouveau.

Pour l’environnement de production:

Comme les rubriques Kafka sont stockées dans des répertoires différents, vous devez supprimer des répertoires particuliers. Vous devez également supprimer /brokers/{broker_id}/topics/{broken_topic} de Zookeeper en utilisant un client Zookeeper.

Veuillez lire attentivement la documentation de Kafka pour vous assurer de la structure de configuration, avant de faire quelque chose de stupide. Kafka déploie une fonctionnalité de sujet de suppression ( KAFKA-330 ), afin que le problème puisse être résolu plus facilement.

J’ai eu le même problème. Il s’avère que Kafka exige que le nom d’hôte de la machine puisse être résolu pour se connecter à lui-même.

J’ai mis à jour le nom d’ hôte sur ma machine et, après un redémarrage de zookeeper et de kafka, le sujet pourrait être écrit correctement.

J’avais résolu ce problème en ajoutant une entrée dans /etc/hosts pour 127.0.0.1 avec un nom d’hôte complet:

 127.0.0.1 x4239433.your.domain.com x4239433 

Le producteur et le consommateur ont bien travaillé.

J’ai eu le même problème. À la fin, j’ai dû supprimer les noeuds Kafka, puis suivez les conseils ici sur la façon de supprimer les sujets Kafka . Une fois que je me suis débarrassé des sujets brisés, j’ai pu relancer Kafka avec succès.

J’aimerais savoir s’il existe une meilleure approche et comment éviter que cela se produise à l’avenir.

J’ai rencontré ce problème quelques fois et finalement compris pourquoi j’avais le problème. Je vais append les résultats ici aussi. Je suis sur Linux VM, la réponse courte est que je rencontrais ce problème depuis que ma VM a une nouvelle adresse IP. Si vous regardez sous les fichiers de configuration et ouvrez le server.properties, vous verrez cette ligne

advertised.host.name = xx.xx.xx.xxx ou localhost.

Assurez-vous que cette adresse IP correspond à votre adresse IP actuelle, vous pouvez vérifier votre adresse IP ici .

Une fois que j’ai corrigé cela, tout a commencé à fonctionner correctement. J’utilise la version 0.9.0.0.

J’espère que ça aidera quelqu’un.

J’ai eu le même problème, résolu le JDK de 1.7 à 1.6

eu le même problème. assurez-vous d’avoir au moins un sujet sur chaque partition que votre consommateur / producteur utilise. Zookeeper ne trouvera pas de leader d’une partition s’il n’y a pas de sujet utilisant cette partition

C’est le problème avec JDK.

J’ai installé 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) 

Mais j’ai changé cela en oracle jdk (suivez ce lien: 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) 

Maintenant ça marche bien. J’espère que cela t’aides.

Donc, une autre réponse possible: l’adresse IP dans le nom d’hôte advertised.hostname dans le config/server.properties kafka config/server.properties peut être config/server.properties avec un espace supplémentaire.

Dans mes cas

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

au lieu du correct

 advertised.host.name=10.123.123.211\n 

Pour une raison quelconque, cela a fonctionné pendant 6 mois sans problèmes, et probablement une mise à jour de la bibliothèque a supprimé la recherche détendue de l’adresse IP en réduisant l’espace supplémentaire.

Une simple correction du fichier de configuration et le redémarrage de kafka résolvent ce problème.

J’ai été confronté exactement au même problème lorsque j’essayais de jouer avec Kafka dans mon système local (Mac OS X El Capitan). Le problème était avec mon zookeeper, il ne faisait pas référence au fichier de configuration correct. Redémarrez le Zookeeper, puis Kafka et exécutez la commande suivante. vérifier si Leader n’est pas Aucun. Si Leader est nul, supprimez ce sujet et recréez-le.

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

La sortie sera comme

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

J’espère que cela devrait aider.

J’ai rencontré le problème avec Kafka , le pod Zookeeper à Openshift et le Kafka était compatible TLS. J’ai dû append les variables d’environnement ci-dessous à 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

Et après avoir paramétré les variables, j’ai dû supprimer et recréer les pods pour que cela fonctionne.

Ajoutez “advertised.host.name = localhost” dans config / server.properties et redémarrez le serveur Kafka. Ça a fonctionné pour moi