L’architettura basata sugli eventi facilita ai sistemi di rispondere agli eventi della vita reale, come ad esempio quando il profilo dell’utente viene aggiornato. Questo post illustra la costruzione di applicazioni reattive basate sugli eventi che gestiscono la perdita di dati combinando Spring WebFlux, Apache Kafka e Dead Letter Queue. Quando usati insieme, questi forniscono il framework per la creazione di sistemi tolleranti ai guasti, resilienti e ad alte prestazioni che sono importanti per le grandi applicazioni che devono gestire efficientemente grandi volumi di dati.
Funzionalità utilizzate in questo articolo
- Spring Webflux: Fornisce un paradigma reattivo che si basa sulla pressione di back non bloccante per il processamento simultaneo degli eventi.
- Apache Kafka: I produttori e consumatori reattivi di Kafka aiutano a costruire pipeline di elaborazione competenti e adattabili.
- Flussi reattivi: Non bloccano l’esecuzione dei flussi dei produttori e consumatori di Kafka.
- Coda Dead Letter (DLQ): Una DLQ memorizza temporaneamente i messaggi che non hanno potuto essere elaborati per vari motivi. I messaggi della DLQ possono essere successivamente utilizzati per riprocessare i messaggi al fine di evitare la perdita di dati e rendere il processo degli eventi resiliente.
Produttore reattivo di Kafka
Un produttore Reactive Kafka invia messaggi in parallelo e non blocca altri thread durante la pubblicazione. È utile quando si devono elaborare grandi quantità di dati. Si integra bene con Spring WebFlux e gestisce la reazione a catena all’interno delle architetture a microservizi. Questa integrazione aiuta non solo nell’elaborazione di grandi messaggi, ma anche nella gestione efficiente delle risorse cloud.
Il produttore Kafka reattivo mostrato sopra può essere trovato su GitHub.
Consumatore Reactive Kafka
Il consumatore Reactive Kafka recupera i messaggi da Kafka senza bloccare e mantiene un alto throughput. Supporta anche la gestione della reazione a catena e si integra perfettamente con WebFlux per l’elaborazione di dati in tempo reale. Il pipeline del consumatore reattivo gestisce bene le risorse ed è particolarmente adatto per le applicazioni distribuite in cloud.
Il consumatore Kafka reattivo mostrato sopra può essere trovato su GitHub.
Coda di Messaggi non Elaborati (DLQ)
Un DLQ è un semplice topic Kafka che memorizza i messaggi inviati dai produttori e che non riescono ad essere elaborati. In tempo reale, abbiamo bisogno che i sistemi siano funzionali senza blocchi e failure, e ciò può essere ottenuto reindirizzando tali messaggi alla Coda dei Messaggi Persi nell’architettura basata sugli eventi.
Benefici dell’Integrazione della Coda dei Messaggi Persi
- Fornisce un meccanismo di fallback per evitare interruzioni nel flusso dei messaggi.
- Consente il mantenimento dei dati non elaborati e aiuta a prevenire la perdita di dati.
- Memorizza i metadati per le failure, che alla fine aiutano ad analizzare la causa radice.
- Offre numerosi tentativi per elaborare i messaggi non elaborati.
- Scoppia la gestione degli errori e rende il sistema resiliente.
I messaggi non riusciti possono essere inviati alla DLQ dal codice produttore come mostrato di seguito:
È necessario creare un Gestore DLQ nel consumatore reattivo come mostrato di seguito:
Conclusione
L’incorporazione del DLQ con un produttore e consumatore reattivi aiuta a costruire applicazioni resilienti, tolleranti ai guasti ed efficienti basate su eventi. I produttori reattivi garantiscono la pubblicazione dei messaggi senza bloccare; d’altra parte, i consumatori reattivi elaborano i messaggi con backpressure, migliorando la reattività. Il DLQ fornisce un meccanismo di fallback che previene interruzioni e la perdita di dati.
L’architettura sopra descritta garantisce l’isolamento dei guasti di sistema e aiuta nella risoluzione dei problemi che possono essere affrontati ulteriormente per migliorare le applicazioni.
Il codice di riferimento sopra citato può essere trovato nel produttore GitHub e nel consumatore GitHub.
Maggiori dettagli riguardanti il produttore e consumatore reattivi possono essere trovati su ReactiveEventDriven. I documenti di Spring Apache Kafka forniscono ulteriori informazioni riguardo al DLQ.
Source:
https://dzone.com/articles/reactive-event-driven-app-with-dead-letter-queue