È menzionato nella documentazione della tempesta, che la tempesta riproduce la tupla che l'elaborazione è scaduta. La mia domanda è se la tempesta lo fa automaticamente (senza chiamare fail() sul becco d'origine) o è questa piuttosto la responsabilità dello spout d'origine a ripetere la tupla (viene chiamato fail() e deve essere implementata la replay all'interno o anche da qualche parte all'esterno)?La tempesta riproduce la tupla quale elaborazione è scaduta?
risposta
Per avere una riproduzione corretta in un timeout, è necessario ancorare la tupla con un id quando si emette dallo spout. Quando si verifica il timeout, qualsiasi cosa utilizzata come ancoraggio viene restituita al metodo fail (fail (oggetto anchorId)). Ora puoi usare l'anchorId della tupla failed/timeout per la riproduzione o qualsiasi altra cosa tu voglia fare con la tupla di timeout. Ogni id di ancoraggio deve essere unico. Un esempio di un anchor id è un id del database. Quando la tupla fallisce, puoi usare l'id del databse per ricreare la tua tupla e riemetterla. Quindi per rispondere alla tua domanda devi avere la tua logica di riproduzione all'interno del fail e puoi usare l'anchorId per ricreare la tua tupla. Spero che questa informazione sia d'aiuto
Da http://storm.apache.org/documentation/Guaranteeing-message-processing.html,
se il tuple volte-out Tempesta chiamerà il metodo
fail
sulSpout
Quindi sì, sarà chiamato fail
.
C'è un modo per sapere, quale bullone è fallito nel metodo fail() dello Spout? Fondamentalmente, voglio inviare informazioni specifiche per i bulloni nella tupla mentre ack() o fail(). Come questo può essere fatto? –