lunes, 8 de marzo de 2021

Simple Event Processing (Procesamiento Simple de Eventos) y Kafka

 En una Arquitectura Orientada a Eventos (EDA ó Event Driven Architecture) existen varios enfoques de eventos, dependiendo del tipo de procesamiento.

En este post analizaremos el tipo de procesamiento más simple: SEP (Simple Event Processing)


¿Qué es un Procesamiento Simple de Eventos?

En SEP, cuando se produce un evento, se enruta inmediatamente para realizar una acción posterior, sin aplicar restricciones ni consideraciones. El flujo de trabajo se ejecuta en tiempo real, reduciendo así la latencia entre el momento en que se produce el evento y la acción resultante.

Un escenario habitual de un patrón SEP es en escenarios donde se producen cambios medibles, tales como un cambio de temperatura, de presión, de humedad, de CO2, etc, en un sensor.

Pero no debemos limitar un SEP a un ambiente IoT o de sensores, pues también se puede aplicar a diferentes entornos. Por ejemplo, un evento simple se podría producir en un complejo sistema, en donde, al realizar un pedido, cuando se accede al inventario para realizar la reserva del pedido, si supera cierto umbral, se puede lanzar un evento de inventario bajo para el producto que se ha adquirido. De esta forma, dicho evento se propaga como alerta o/y a un buzón para que el responsable de compras adquiera una nueva remesa de productos.

La clave para entender un SEP, es que procesa un único evento a la vez, sin tener en cuenta otros eventos.  En este aspecto, SEP funciona como un "flujo de trabajo humano" o "una cosa a la vez".

Este tipo de procesamiento se ha tratado típicamente mediante un servicio de mensajería, como AMQ, RabbitMQ o JMS (Java Messaging Service). Los servicios de mensajería publican y consumen una única vez el mensaje, es decir, que cuando el mensaje es leído y procesado por un consumidor, el mensaje desaparece.

Con Apache Kafka o con Apache Pulsar elevan el concepto de mensajería a otro nivel, utilizando un broker en lugar de una cola de mensajes. Esto significa que un mensaje puede estar publicado durante un tiempo largo y ser consumido por uno o varios consumidores, sin necesidad de eliminarlo del pool de mensajes.