Sistema de mensajería usando UDP AVRO y NiFi

Consumiendo mensajes en NiFi enviados por UDP y serializados en AVRO

Siguiendo con las pruebas de concepto de desacople de procesos usando NiFi hay otro caso que es bastante interesante y que se puede implementar con NiFI. Imaginemos que tenemos un caso de uso en el que la garantía de entrega no es importante, en el que además no queremos saturar la red y en el que se requiere una frecuencia de muestro alta...en ese escenario lo normal es no optar por el uso de TCP y usar UDP para las comunicaciones. NiFI dispone de dos Listeners que podemos usar para implementar esta PoC.
 * ListenUDP
 * ListenUDPRecord

Ambos funciona bajo el mismo paradigma, al igual que el resto de listeners, levantan un canal, en este caso  UDP en el puerto indicado, y enrutan los mensajes que llegan a este puerto a la relación success. El primero no transforma el mensaje y el segundo convierte el mensaje en un Record

Lo que hemos hecho en este caso, es programar un cliente que crear eventos, los serializa en avro y los manda por el canal UDP configurado en NiFi (es solo una prueba de concepto)

El código de la clase java que hemos usando está publicado en el siguiente proyecto de github. La template de NiFi también está en el proyecto. Al buscar clientes UDP en java encontré este proyecto que es del que partí. Este proyecto usa Netty como servidor UDP, no así NiFi. Una vía que me gustaría explorar es ver si el rendimiento del servidor UDP usando Netty es superior al de NiFi, en tal caso lo ideal sería implementar un nuevo LitenUDPNetty en NiFi. Hay una prueba, preliminar, de un server UDP en netty en el proyecto de github.

Después de hacer unas pruebas de rendimiento, muy básicas, lo que vemos es que el sistema es capaz de procesar unos 10000 eventos por segundo, pero que como era de esperar a veces se pierden mensajes. Con este sistema podemos sentar las bases de un sistema de captura que cumpla los requisitos anteriormente mencionados

  • Muy rápido
  • No orientado a la conexión
  • Sin garantía de entrega
  • Con un bajo overhead

Lo interesante en este caso es que la comunicación se realiza por UDP y que los mensajes se envían en binario usando AVRO, lo que minimiza el tamaño del mensaje (bajo overhead) y el coste de la serialización en envío y recepción. El otro punto interesante es que NiFi es capaz de entender los mensajes en el formato enviado, y que por tanto podemos hacer uso de toda su potencia sin tener que desarrollar ningún nuevo processor.

00

Más entradas de blog

thumbnail
thumbnail

Añadir comentarios