Sto cercando di capire come rendere un'app Spark Streaming più Fault Tolerant (in particolare quando si tenta di scrivere su dipendenze downstream), e non so quale sia il modo migliore è quello di gestire i fallimenti nel tentativo di scrivere i risultati su una fonte esterna, come Cassandra, DynamoDB, ecc.Apache Spark Streaming, Come gestire gli errori di dipendenza downstream
Ad esempio, ho un lavoro Spark Streaming che estrae i dati da un flusso (Kafka, Flume, ecc ... I haven ' t finalizzato quale tecnologia utilizzare ancora), aggrega elementi simili insieme e quindi scrive i risultati in un negozio esterno. (cioè Cassandra, DynamoDB, o qualunque cosa stia ricevendo i risultati dei miei calcoli DStream).
Sto cercando di capire come gestisco il caso in cui la dipendenza esterna non è disponibile per la scrittura. Forse il cluster è andato giù, forse ci sono problemi di autorizzazione, ecc., Ma il mio lavoro non può scrivere i risultati sulla dipendenza esterna. C'è un modo per sospendere Spark Streaming in modo che i ricevitori non continuino a dati batch? Dovrei semplicemente dormire il batch corrente e lasciare che il ricevitore continui a memorizzare i lotti? Se il problema è transitorio (alcuni secondi), continuare a eseguire il batch può essere accettabile, ma cosa succede se la dipendenza diminuisce per alcuni minuti o più di 1 ora/e?
Un pensiero che avevo era di avere un processo di monitoraggio che controlla la salute delle dipendenze in background, e se scopre che è "malsano", fermerà il lavoro. Quindi, quando tutte le dipendenze sono in buona salute, posso avviare il processo di backup ed elaborare tutti i dati che non sono stati scritti sull'origine esterna.
Un altro pensiero che ho avuto è stato in qualche modo segnalare nel metodo DStream forEachRdd, che c'era un problema. C'è qualche eccezione che posso lanciare nel DStream che segnalerà al guidatore che dovrebbe fermarsi?
Se qualcuno ha esperienza su come gestire la tolleranza ai guasti esterni o può indirizzarmi a buoni articoli/video su di esso, sarebbe fantastico.
Grazie
Non sono sicuro, ma il ricevitore/storage dati downstream dovrebbe gestire gli stessi errori? è al di là della responsabilità di Spark di preoccuparsene. Inoltre, se si verifica un errore, si tratta più di monitoraggio e avviso, in modo che gli ingegneri possano essere informati e controllare immediatamente l'errore. – keypoint