Ereignisgesteuerte Architektur ermöglicht es Systemen, auf reale Ereignisse zu reagieren, wie zum Beispiel wenn das Benutzerprofil aktualisiert wird. Dieser Beitrag veranschaulicht den Aufbau reaktiver, ereignisgesteuerter Anwendungen, die den Datenverlust durch die Kombination von Spring WebFlux, Apache Kafka und Dead Letter Queue bewältigen. In Kombination bieten diese ein Framework zur Erstellung fehlertoleranter, robuster und leistungsstarker Systeme, die für große Anwendungen wichtig sind, die große Datenmengen effizient verarbeiten müssen.
Verwendete Funktionen in diesem Artikel
- Spring Webflux: Es bietet ein reaktives Paradigma, das von nicht-blockierender Rückdruckverarbeitung für die gleichzeitige Verarbeitung von Ereignissen abhängt.
- Apache Kafka: Reaktive Kafka-Produzenten und -Konsumenten helfen beim Aufbau kompetenter und anpassungsfähiger Verarbeitungs-Pipelines.
- Reaktive Streams: Sie blockieren nicht die Ausführung der Streams von Kafka-Produzenten und -Konsumenten.
- Dead Letter Queue (DLQ): Eine DLQ speichert vorübergehend Nachrichten, die aus verschiedenen Gründen nicht verarbeitet werden konnten. DLQ-Nachrichten können später verwendet werden, um Nachrichten erneut zu verarbeiten, um Datenverlust zu verhindern und die Ereignisverarbeitung resilient zu gestalten.
Reaktiver Kafka-Produzent
Ein Reactive Kafka-Produzent versendet Nachrichten parallel und blockiert andere Threads nicht während des Veröffentlichens. Dies ist vorteilhaft, wenn große Datenmengen verarbeitet werden sollen. Es harmoniert gut mit Spring WebFlux und handhabt Rückdruck innerhalb von Microservices-Architekturen. Diese Integration hilft nicht nur bei der Verarbeitung großer Nachrichten, sondern auch bei der effizienten Verwaltung von Cloud-Ressourcen.
Der oben gezeigte reaktive Kafka-Produzent kann auf GitHub gefunden werden.
Reaktiver Kafka-Verbraucher
Ein reaktiver Kafka-Verbraucher zieht Kafka-Nachrichten ohne Blockierung und ermöglicht eine hohe Durchsatzrate. Er unterstützt auch die Handhabung von Rückdruck und integriert sich perfekt mit WebFlux für die Echtzeit-Datenverarbeitung. Die reaktive Verbraucher-Pipeline verwaltet Ressourcen gut und eignet sich hervorragend für Anwendungen, die in der Cloud bereitgestellt werden.
Der oben gezeigte reaktive Kafka-Verbraucher kann auf GitHub gefunden werden.
Dead Letter Queue (DLQ)
Eine DLQ ist ein einfaches Kafka-Topic, das Nachrichten speichert, die von Produzenten gesendet wurden und nicht verarbeitet werden konnten. In Echtzeit benötigen wir Systeme, die funktionsfähig sind, ohne Blockaden und Ausfälle, und dies kann erreicht werden, indem solche Nachrichten in der ereignisgesteuerten Architektur an die Dead Letter Queue umgeleitet werden.
Vorteile der Integration der Dead Letter Queue
- Es bietet einen Rückfallmechanismus, um Unterbrechungen im Nachrichtenfluss zu verhindern.
- Es ermöglicht die Aufbewahrung von unverarbeiteten Daten und hilft, Datenverlust zu verhindern.
- Es speichert Metadaten für Fehler, was letztendlich bei der Analyse der Ursache hilft.
- Es bietet so viele Wiederholungsversuche zur Verarbeitung von unverarbeiteten Nachrichten.
- Es entkoppelt die Fehlerbehandlung und macht das System widerstandsfähig.
Fehlgeschlagene Nachrichten können vom Produzenten-Code wie unten gezeigt in die DLQ verschoben werden:
Ein DLQ-Handler muss im reaktiven Verbraucher erstellt werden, wie unten gezeigt:
Fazit
Die Integration von DLQ mit einem reaktiven Produzenten und Verbraucher trägt dazu bei, widerstandsfähige, fehlertolerante und effiziente ereignisgesteuerte Anwendungen zu erstellen. Reaktive Produzenten gewährleisten eine nicht blockierende Nachrichtenveröffentlichung; reaktive Verbraucher hingegen verarbeiten Nachrichten mit Rückdruck, was die Reaktionsfähigkeit verbessert. Die DLQ bietet einen Ausweichmechanismus, der Störungen verhindert und Datenverlust vorbeugt.
Die obige Architektur gewährleistet die Isolierung von Systemausfällen und hilft beim Debuggen, das zur Verbesserung von Anwendungen weiter adressiert werden kann.
Der oben genannte Referenzcode ist im GitHub-Produzenten und im GitHub-Verbraucher zu finden.
Weitere Details zu reaktiven Produzenten und Verbrauchern finden Sie unter ReactiveEventDriven. Spring Apache Kafka Dokumentiert weitere Informationen zur DLQ.
Source:
https://dzone.com/articles/reactive-event-driven-app-with-dead-letter-queue