2017-06-08 2 views
0

Récemment, j'ai eu un problème vraiment étrange. Le groupe de tempêtes a 3 machines. La structure de la topologie est comme ceci, Kafka Spout A -> Bolt B -> Bolt C. J'ai acked tous les tuples dans chaque boulon, même s'il y a peut-être des exceptions de boulon interne (en boulon exécuter la méthode j'essaie et attrape toutes les exceptions, et enfin Ack le tuple). Mais ici, la chose étrange arrive. J'imprime le journal de la goulotte, sur une machine tous les tuples accouplés par le bec, mais sur les 2 autres machines, presque tous les tuples ont échoué. Et après 60 secondes, le tuple rejoué encore et encore et encore. «Presque» signifie au début, tous les tuples ont échoué sur les 2 autres machines. Après un certain temps, il y a une petite quantité de tuples sur les deux machines. Absolument, les tuples échouent à cause du timeout. Mais je ne sais vraiment pas pourquoi ils ont expiré. D'après les journaux que j'ai imprimés, je suis vraiment sûr que tous les tuples ont accouché à la fin de la méthode d'exécution dans chaque boulon. Donc je veux savoir pourquoi certains tuples ont échoué sur les 2 machines.Message de tempête échoué

Y at-il quelque chose que je peux faire pour savoir ce qui ne va pas avec la topologie ou le groupe de tempêtes? Vraiment merci et j'espère pour votre réponse.

Répondre

0

Votre problème est lié à la gestion de la contre-pression par KafkaSpout dans StormTopology.

Vous pouvez gérer la pression de la KafkaSpout en définissant la valeur maxSpoutPending dans la configuration de la topologie,

Config config = new Config(); 
config.setMaxSpoutPending(200); 
config.setMessageTimeoutSecs(100); 

StormSubmitter.submitTopology("testtopology", config, builder.createTopology()); 

maxSpoutPending est le nombre de tuples qui peut être accusé de réception en attente dans votre topologie à un moment donné. En définissant cette propriété, le KafkaSpout sera intime pour ne plus consommer de données de Kafka à moins que le nombre de tuple non acquitté soit inférieur à la valeur maxSpoutPending.

De même, assurez-vous que vous pouvez affiner vos boulons pour qu'ils soient les plus légers possible afin que les tuples soient reconnus avant leur expiration.