La arquitectura orientada a eventos facilita que los sistemas respondan a eventos de la vida real, como cuando se actualiza el perfil del usuario. Esta publicación ilustra la construcción de aplicaciones reactivas basadas en eventos que manejan la pérdida de datos combinando Spring WebFlux, Apache Kafka y Dead Letter Queue. Cuando se utilizan juntos, proporcionan el marco para crear sistemas tolerantes a fallas, resilientes y de alto rendimiento que son importantes para aplicaciones grandes que necesitan manejar volúmenes masivos de datos de manera eficiente.
Características Utilizadas en este Artículo
- Spring Webflux: Proporciona un paradigma reactivo que depende de la presión trasera no bloqueante para el procesamiento simultáneo de eventos.
- Apache Kafka: Los productores y consumidores reactivos de Kafka ayudan a construir tuberías de procesamiento competentes y adaptables.
- Flujos Reactivos: No bloquean la ejecución de los flujos de productores y consumidores de Kafka.
- Cola de Mensajes no Procesados (DLQ): Una DLQ almacena temporalmente mensajes que no pudieron ser procesados debido a varias razones. Los mensajes de la DLQ pueden ser utilizados más tarde para reprocesar mensajes y evitar la pérdida de datos, lo que hace que el procesamiento de eventos sea resiliente.
Productor Reactivo de Kafka
Un productor Reactive Kafka empuja mensajes en paralelo y no bloquea otros hilos mientras se publica. Es beneficioso cuando se procesan grandes cantidades de datos. Se integra bien con Spring WebFlux y maneja la retroalimentación dentro de las arquitecturas de microservicios. Esta integración ayuda no solo a procesar mensajes grandes, sino también a administrar bien los recursos en la nube.
El productor de Kafka reactivo mostrado anteriormente se puede encontrar en GitHub.
Consumidor de Kafka Reactivo
El consumidor de Kafka reactivo extrae mensajes de Kafka sin bloquear y mantiene un alto rendimiento. También admite el manejo de retroalimentación y se integra perfectamente con WebFlux para el procesamiento de datos en tiempo real. La canalización de consumo reactiva administra bien los recursos y es muy adecuada para aplicaciones implementadas en la nube.
El consumidor de Kafka reactivo mostrado anteriormente se puede encontrar en GitHub.
Cola de cartas muertas (DLQ)
Una DLQ es un tema simple de Kafka que almacena mensajes enviados por productores que no se pueden procesar. En tiempo real, necesitamos que los sistemas sean funcionales sin bloqueos ni fallos, y esto se puede lograr redirigiendo dichos mensajes a la Cola de Mensajes No Procesados en la arquitectura impulsada por eventos.
Beneficios de la Integración de la Cola de Mensajes No Procesados
- Proporciona un mecanismo de respaldo para evitar interrupciones en el flujo de mensajes.
- Permite la retención de datos no procesados y ayuda a prevenir la pérdida de datos.
- Almacena metadatos sobre fallos, lo que eventualmente ayuda a analizar la causa raíz.
- Ofrece tantos reintentos como sea necesario para procesar mensajes no procesados.
- Desacopla el manejo de errores y hace que el sistema sea resiliente.
Los mensajes fallidos se pueden enviar a la DLQ desde el código del productor como se muestra a continuación:
Se necesita crear un Manejador de DLQ en el consumidor reactivo como se muestra a continuación:
Conclusión
La incorporación de DLQ con un productor y consumidor reactivos ayuda a construir aplicaciones eficientes, tolerantes a fallos y resistentes. Los productores reactivos garantizan la publicación de mensajes sin bloqueo; por otro lado, los consumidores reactivos procesan los mensajes con retroalimentación, mejorando la capacidad de respuesta. DLQ proporciona un mecanismo de respaldo que evita interrupciones y previene la pérdida de datos.
La arquitectura anterior garantiza el aislamiento de fallos del sistema y ayuda en la depuración, lo cual se puede abordar para mejorar las aplicaciones.
El código de referencia anterior se puede encontrar en el productor de GitHub y el consumidor de GitHub.
Se pueden encontrar más detalles sobre el productor y consumidor reactivos en ReactiveEventDriven. Spring Apache Kafka documenta más información sobre DLQ.
Source:
https://dzone.com/articles/reactive-event-driven-app-with-dead-letter-queue