J'essaie de créer un cluster Kafka
pour envoyer des messages à une télécommande. J'ai tout configuré comme décrit ici . J'exécute ceci sur une machine Linux Red Hat
et cela fonctionne bien avec le shell. Après avoir écrit le code Java décrit dans le tutoriel quick start
sur ma machine Windows, le message d'erreur suivant s'affiche:
...
DEBUG kafka.client.ClientUtils$ - Successfully fetched metadata for 1 topic(s) Set(example)
...
ERROR kafka.producer.SyncProducer - Producer connection to cldExampleKafka.domain:80 unsuccessful
Java.nio.channels.UnresolvedAddressException
...
at kafka.producer.async.ProducerSendThread.run(ProducerSendThread.scala:44)
...
WARN kafka.producer.async.DefaultEventHandler - Failed to send producer request with correlation id 2 to broker 0 with data for patitions [ATI,0]
Java.nio.channels.UnresolvedAddressException
...
kafka.common.FailedToSendMessageException: Failed to send message after 3 tries.
J'ai également essayé d'exécuter le fichier jar sur une machine Linux différente et j'ai toujours reçu la même erreur.
Changer l'adresse en localhost
et exécuter le code Java en tant que fichier jar sur la machine sur laquelle le kafka est installé fonctionne.
Je crois que quelque chose avec la configuration, mais je ne pouvais pas le trouver.
Dans votre kafka server.properties
il y a une configuration commentée
#advertised.Host.name=<Some IP>
Décommentez ceci et ajoutez l'adresse IP de la machine Linux sur laquelle kafka est en cours d'exécution.
advertised.Host.name=<Kafka Running Machine IP>
Et connectez-vous à partir de clients à <Kafka Running Machine IP>
Cela devrait résoudre votre problème.
MODIFIER
Vous pouvez éventuellement décommenter le
#advertised.port=9092
Aussi, si vous écoutez sur un port différent de celui par défaut.
Travaillé avec
à partir de server.properties
Décommenter
listeners=PLAINTEXT://:9092
Et
advertised.listeners=PLAINTEXT://<Host IP>:9092
Remplacez <Host IP>
par l'adresse IP réelle.
J'ai essayé de me connecter au cluster distant kafka à partir de ma machine locale.
Les ordinateurs virtuels avaient une IP interne (9.0.0.1) et une IP externe (192.1.1.1). Je ne pouvais ssh qu'à l'interne et pas à l'externe. J'ai apporté ces modifications à mon fichier conifg/server.properties:
// défini sur l'adresse IP de la machine (recherche à l'aide de ifconfig
ou hostname -I
)
listeners=PLAINTEXT://192.1.1.1:9092
// règle sur l'IP le consommateur et le producteur vont se connecter
advertised.listeners=PLAINTEXT://9.0.0.1:9092