Quando si esegue in un cluster, se accade qualcosa di sbagliato, un lavoratore muore generalmente (arresto JVM). Può essere causato da molti fattori, la maggior parte delle volte è una sfida (la più grande difficoltà con la tempesta?) Per scoprire cosa causa l'incidente.Monitoraggio del lavoratore in caso di tempesta apache
Ovviamente, il supervisore di tempesta riavvia i lavoratori morti e la vivacità è piuttosto buona all'interno di un cluster di temporali, tuttavia un incidente di lavoro è un disastro che dovremmo evitare in quanto aggiunge sovraccarico, latenza (può essere molto lungo finché non viene trovato un lavoratore morto e rigenerato) e perdita di dati se non hai progettato la topologia per impedirlo.
Esiste un modo semplice/strumento/metodologia per verificare quando e perché un operatore tempesta si blocca? Non sono mostrati in storm-ui (mentre i supervisori sono mostrati), e tutto ha bisogno di un monitoraggio manuale (con jstack + JVM opta per esempio) con molta cura.
Qui ci sono alcuni casi che possono accadere:
- timeout e molte possibili ragioni: lento di raccolta dei rifiuti java, cattivo di rete, cattivo dimensionamento in configurazione timeout. L'unico risultato che otteniamo nativamente dai registri supervisore è "stato: timeout" o "stato: non consentito" che è scadente. Inoltre, quando un lavoratore muore, le statistiche su storm-ui vengono riavviate. Man mano che ti spaventerai dei timeout, finirai per utilizzare quelli lunghi che non sembrano essere una buona soluzione per l'elaborazione in tempo reale.
- alta contropressione con comportamento inaspettato, battiti del cuore affamati e induzione di un timeout, ad esempio. Acking sembra essere l'unico modo per affrontare la contropressione e richiede una buona preparazione dei bulloni in base al carico. Il non tacere sembra essere un no-go in quanto, in effetti, farebbe schiantare i lavoratori e ottenere risultati negativi alla fine (anche meno dati elaborati rispetto a una topologia acking sotto pressione?).
- eccezioni di runtime del codice, a volte non mostrate in storm-ui che richiedono il controllo manuale dei registri delle applicazioni (il caso più semplice).
- perdite di memoria che possono essere rilevate con i dump JVM.
I timeout e la contropressione non sembrano crash di JVM, sono comportamenti dell'applicazione. Avete bisogno di un monitoraggio generale per tutte le macchine virtuali nella vostra rete o state provando a diagnosticare un problema specifico in modo approfondito? – the8472
@ the8472 si hai ragione, questo è legato alla tempesta. Un worker è un processo java con una sua istanza JVM gestita da una tempesta. La cosa cattiva è che fallisce sempre silenziosamente (quasi nulla nei registri dei lavoratori). Viene generato e/o ucciso da un altro processo java chiamato "storm-supervisor" che non registra troppo. Ho fatto questa domanda, quindi forse possiamo definire qui un metodo corretto per monitorare i crash dei lavoratori e rendere più facili le attività di debug. – zenbeni
Immagino che il primo passo sarebbe capire se i lavoratori vengono spenti dal supervisore o uscire impuri a causa di condizioni di errore all'interno del processo. Diverse potenziali cause probabilmente devono essere attaccate in modo diverso. – the8472