2016-11-15 1 views
0

J'ai un KafkaProducer qui a soudainement commencé à lancer TimeoutExceptions lorsque j'essaie d'envoyer un message. Même si j'ai défini la propriété max.block.ms sur 60000ms et les blocs de test pendant 60, le message d'erreur que j'obtiens a toujours une durée inférieure à 200 ms. La seule fois où il affiche réellement 60000ms, c'est si je l'exécute en mode débogage et que je parcours manuellement la méthode waitOnMetadata.Apache KafkaProducer lançant TimeoutException lors de l'envoi d'un message

exemple d'erreur:
org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 101 ms.

Est-ce que quelqu'un sait pourquoi il serait tout à coup pas être en mesure de mettre à jour les métadonnées? Je sais que ce n'est pas ma mise en œuvre du producteur qui est défectueuse, car non seulement je ne l'ai pas changé depuis qu'il fonctionne, si je cours mes tests sur un autre serveur qu'ils passent tous. Quelles raisons côté serveur pourrait-il y avoir pour cela? Devrais-je redémarrer mes courtiers? Et pourquoi le message de timeout afficherait-il un temps incorrect si je le laisse simplement fonctionner?

configuration Producteur:

val props = new Properties() 
props.put("bootstrap.servers", getBootstrapServersFor(datacenter.mesosLocal)) 
props.put("batch.size","0") 
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer") 
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer") 
props.put("max.block.ms","60000") 
new KafkaProducer[String,String](props) 
+0

Les machines hébergent-elles des courtiers dans les environnements IaaS? Si c'est le cas, vous feriez mieux de configurer advertised.host.name config et de vous connecter au client. – amethystic

+0

Si je n'avais pas défini la valeur avant quand cela fonctionnait, et que je n'ai pas défini la valeur sur mes autres serveurs où cela fonctionne, pourquoi est-ce que le paramétrage serait utile? – annedroiid

+1

Avez-vous essayé de courir avec kafka-console-producer? –

Répondre

1

j'ai essayé d'utiliser le producteur de la console pour voir si je pouvais envoyer des messages et j'eu beaucoup de WARN Error while fetching metadata with correlation id 0 : {metadata-1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient) message de rappel. Après l'arrêt et le redémarrage du courtier, je pouvais à nouveau envoyer et consommer des messages.