Stiamo utilizzando Spark Streaming connesso allo stream di AWS Kinesis per aggregare (al minuto) le metriche che stiamo ricevendo e scrivere le aggregazioni su influxdb per renderle disponibili per una dashboard in tempo reale.Funzionamento dei checkpoint del ricevitore di scintilla Kinesis
Tutto sta funzionando bene, ma ora stiamo considerando come dovremmo gestire le pause per le distribuzioni e gli eventuali guasti del sistema.
I documenti dicono che la libreria di integrazione di Kinesis è già pronta per guasti, checkpoint e così via, ma vorrei chiarire come funziona il checkpoint.
Il ricevitore Kinesis crea un ingresso DStream utilizzando la libreria Kinesis Client (KCL) fornita da Amazon sotto la Amazon Software License (ASL). Il KCL si basa sull'SDK Java AWS con licenza Apache 2.0 e fornisce bilanciamento del carico, tolleranza agli errori, checkpoint attraverso i concetti di Worker, Checkpoint e Shard Leases.
Possiamo definire l'intervallo di checkpoint per kinesis, ma per quanto ho capito è usato solo per contrassegnare fino a che punto del flusso abbiamo consumato le metriche. Quindi, abbiamo ancora bisogno di usare la funzione di checkpoint dallo streaming spark, giusto?
Mentre stiamo aggregando i dati al minuto, il nostro intervallo di batch è 60 secondi ma durante questi 60 secondi riceviamo continuamente dati dal flusso.
Ecco le mie domande:
- Quando eseguo JavaStreamingContext.stop (...) (al fine di distribuire una nuova versione del lavoro), il ricevitore verrà arrestato e sarà il punto di controllo essere aggiornato alla fine?
- Quando si verificherà il checkpoint dello scintillio? Dopo ogni esecuzione del lavoro? Prima?
- Supponendo che entrambi i checkpoint funzionino, come possiamo garantire la coerenza in caso di errore? Sembra che ogni volta che il checkpoint di streaming sta accadendo, ha bisogno di checkpoint per kinesis allo stesso tempo, altrimenti potremo terminare di leggere gli stessi dati di nuovo. Come possiamo gestire questo?
- Se il servizio sottostante (in questo caso influxdb) non è attivo, cosa devo fare? Attuare un meccanismo di ripetizione? Se è così, deve smettere di riprovare dopo un po ', altrimenti avremo esaurito la memoria.
Grazie in anticipo!