web-dev-qa-db-fra.com

Kafka - Impossible d'envoyer un message à un serveur distant en utilisant Java

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.

16
itaied

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.

32
shazin

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.

12
Dhananjay

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  
1
CodeUrLife