Het bouwen van een reactieve op gebeurtenissen gebaseerde app met dead letter queue

Event-gedreven architectuur maakt het mogelijk dat systemen reageren op real-life gebeurtenissen, zoals wanneer het profiel van de gebruiker wordt bijgewerkt. Deze post illustreert het bouwen van reactieve event-gedreven applicaties die dataverlies aanpakken door Spring WebFlux, Apache Kafka en Dead Letter Queue te combineren. Wanneer ze samen worden gebruikt, bieden deze het raamwerk voor het creëren van fouttolerante, veerkrachtige en high-performance systemen die belangrijk zijn voor grote applicaties die enorme hoeveelheden data efficiënt moeten verwerken.

Kenmerken Gebruik in dit Artikel

  • Spring Webflux: Het biedt een Reactieve paradigma dat afhankelijk is van niet-blokkerende back pressure voor de gelijktijdige verwerking van gebeurtenissen.
  • Apache Kafka: Reactieve Kafka-producers en -consumenten helpen bij het bouwen van competente en aanpasbare verwerkingspijplijnen.
  • Reactieve Streams: Ze blokkeren de uitvoering van de streams van Kafka-producers en -consumenten niet.
  • Dead Letter Queue (DLQ): Een DLQ slaat tijdelijk berichten op die om verschillende redenen niet konden worden verwerkt. DLQ-berichten kunnen later worden gebruikt om berichten opnieuw te verwerken om dataverlies te voorkomen en de verwerking van gebeurtenissen veerkrachtig te maken.

Reactieve Kafka Producer

Een Reactieve Kafka Producer verstuurt berichten parallel en blokkeert andere threads niet tijdens het publiceren. Dit is voordelig waar grote data moet worden verwerkt. Het werkt goed samen met Spring WebFlux en gaat goed om met backpressure binnen microservices-architecturen. Deze integratie helpt niet alleen bij het verwerken van grote berichten, maar ook bij het goed beheren van cloudresources. 

De reactieve Kafka producer hierboven is te vinden op GitHub.

Reactieve Kafka Consumer

De reactieve Kafka Consumer haalt Kafka-berichten op zonder te blokkeren en behoudt een hoge doorvoer. Het ondersteunt ook backpressure-beheer en integreert perfect met WebFlux voor realtime gegevensverwerking. De reactieve consumentenpijplijn beheert resources goed en is zeer geschikt voor applicaties die in de cloud zijn gedeployed. 

De reactieve Kafka consumer hierboven is te vinden op GitHub.

Dead Letter Queue (DLQ)

Een DLQ is een eenvoudige Kafka-topic die berichten opslaat die door producenten zijn verzonden en niet kunnen worden verwerkt. In real-time hebben we systemen nodig die functioneel zijn zonder blokkades en fouten, en dit kan worden bereikt door dergelijke berichten om te leiden naar de Dead Letter Queue in de gebeurtenisgestuurde architectuur.

Voordelen van de integratie van de Dead Letter Queue

  • Het biedt een terugvalmechanisme om onderbrekingen in de stroom van berichten te voorkomen.
  • Het stelt de opslag van niet-verwerkte gegevens mogelijk en helpt om gegevensverlies te voorkomen.
  • Het slaat metadata op voor mislukkingen, wat uiteindelijk helpt bij het analyseren van de oorzaak.
  • Het biedt zoveel herhalingen om niet-verwerkte berichten te verwerken.
  • Het ontkoppelt foutafhandeling en maakt het systeem veerkrachtig.

Mislukte berichten kunnen vanuit de producentcode naar de DLQ worden gepusht, zoals hieronder weergegeven:

Een DLQ Handler moet worden gemaakt in de reactieve consument, zoals hieronder weergegeven:

Conclusie

De integratie van DLQ met een reactieve producent en consument helpt bij het bouwen van veerkrachtige, fout-tolerante en efficiënte event-gedreven applicaties. Reactieve producenten zorgen voor een niet-blokkerende berichtpublicatie; aan de andere kant verwerken reactieve consumenten berichten met terugdruk, wat de responsiviteit verbetert. De DLQ biedt een fallbackmechanisme dat onderbrekingen voorkomt en dataverlies voorkomt.

De bovenstaande architectuur zorgt voor isolatie van systeemfouten en helpt bij het debuggen, wat verder kan worden aangepakt om applicaties te verbeteren.

De bovenstaande referentiecode kan worden gevonden in de GitHub producent en GitHub consument.

Meer details over de reactieve producent en consument zijn te vinden op ReactiveEventDriven. Spring Apache Kafka documenten meer informatie over DLQ.

Source:
https://dzone.com/articles/reactive-event-driven-app-with-dead-letter-queue