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:
Kafka-server
et Zookeeper-server
/tmp/kafka-log
et /tmp/zookeeper
. Kafka-server
Zookeeper-server
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