Protocolos en el Digital Broker

Introducción

El Digital Broker simplifica la comunicación con la Plataforma aislándose del protocolo de comunicación subyacente.

Out-of-the-box, ofrece los siguientes protocolos:

  • REST

  • Kafka

  • MQTT

  • Websocket

  • Video RTSP

En estos protocolos se define un protocolo de mensajería que gestiona la comunicación entre el cliente y la plataforma. Permite la comunicación bidireccional, suscripciones, etc.

Además, el Digital Broker permite incorporar nuevos protocolos a través del concepto de plugin.

Protocolos soportados

REST

REST es una interfaz para conectar varios sistemas basados en el protocolo HTTP (uno de los protocolos más antiguos) y nos sirve para obtener y generar datos y operaciones, devolviendo esos datos en formatos muy específicos, como XML y JSON.

El formato más usado en la actualidad es el formato JSON, ya que es más ligero y legible en comparación al formato XML. Elegir uno será cuestión de la lógica y necesidades de cada proyecto.

Kafka

Introducción

A continuación, se presentan algunos puntos que describen Apache Kafka:

  • Kafka es un almacén de eventos distribuido y una plataforma de procesamiento de Streams de eventos.

  • Kafka es de código abierto y está escrito en Java.

  • El objetivo principal al diseñar Kafka es manejar datos en tiempo real y proporcionar una plataforma de alto rendimiento y baja latencia.

  • Kafka es una plataforma de Streams de eventos que tiene muchas capacidades para publicar (escribir) y suscribirse a (leer) flujos de eventos de un sistema diferente.

  • Además, para almacenar y procesar eventos de forma duradera todo el tiempo que queramos, por defecto, Kafka almacena los eventos de forma segura.

  • Kafka es un sistema distribuido, que cuenta con servidores y clientes que se comunican a través de TCP.

  • Puede desplegarse en diferentes máquinas virtuales y contenedores en entornos locales y en la nube según las necesidades.

  • En el mundo Kafka, un productor envía mensajes al Broker Kafka. Los mensajes se almacenan dentro de los tópicos y el consumidor se suscribe a ese tópico para consumir los mensajes enviados por el productor.

  • ZooKeeper se utiliza para gestionar los metadatos relacionados con Kafka. Realiza un seguimiento de los brokers que forman parte del clúster Kafka y las particiones de los diferentes tópicos. Por último, gestiona el estado de los nodos Kafka y mantiene una lista de tópicos y mensajes Kafka.

Principales conceptos de Kafka

  • Evento: Un evento o registro es el mensaje que leemos y escribimos en el servidor Kafka; lo hacemos en forma de eventos, y contiene una clave, un valor, una marca de tiempo y otras cabeceras de metadatos

  • Productor: Es una aplicación cliente que envía mensajes al nodo o broker Kafka.

  • Consumidor es una aplicación que recibe datos de Kafka.

  • Clúster Kafka es el conjunto de procesos Kafka que comparten la carga de trabajo entre sí con distintos fines.

  • Broker es un servidor Kafka que actúa como agente entre el productor y el consumidor, que se comunican a través del broker.

  • Tópico: Los eventos se almacenan dentro del "topic" (al estilo de una carpeta con ficheros). Cada tópico tiene uno o más productores y consumidores, que escriben y leen datos del tópico. Los eventos en el tópico pueden ser leídos tantas veces como sea necesario porque persiste los eventos (Kafka no es como otro sistema de mensajería que elimina los mensajes después de consumirlos).

  • Particiones: Los tópicos están particionados, lo que significa que el tópico está repartido en múltiples particiones que creamos dentro del tópico. Cuando el productor envía algún evento al tópico, lo almacenará dentro de las particiones particulares, y entonces, el consumidor puede leer el evento desde la partición del tópico correspondiente en secuencia.

  • Offset: Kafka asigna un ID único a un mensaje almacenado dentro de la partición del tópico cuando el mensaje llega desde el productor.

  • Grupos de consumidores: en el mundo Kafka, el grupo de consumidores actúa como una única unidad lógica.

  • Réplica: En Kafka, para hacer los datos tolerantes a fallos y altamente disponibles, podemos replicar tópicos en diferentes regiones y brokers.

APIs Kafka

Kafka cuenta con 5 APIs básicas que sirven para diferentes propósitos:

  • Admin API: Esta API gestiona los diferentes tópicos, brokers y objetos Kafka.

  • Producer API: Esta API se utiliza para escribir/publicar eventos en diferentes tópicos de Kafka.

  • Consumer API: Esta API se utiliza para recibir los diferentes mensajes correspondientes a los tópicos suscritos por el consumidor.

  • Kafka Stream API: Esta API se utiliza para realizar diferentes tipos de operaciones como ventanas temporales, uniones, agregación y muchas otras.

  • Kafka Connect API: Esta API funciona como un conector a Kafka, que ayuda a diferentes sistemas a conectarse con Kafka fácilmente. Tiene diferentes tipos de conectores listos para usar relacionados con Kafka.

MQTT

Message Queue Telemetry Transport (MQTT) es un protocolo de conectividad abierto Machine-to-Machine (M2M) que permite enviar datos estilo telemetría como mensajes a través de redes de alta latencia o con restricciones.

MQTT es un protocolo de conectividad enfocado a M2M (machine-to-machine) y al IoT (Internet of Things) ya que se ha diseñado para ser un protocolo de mensajería extremadamente ligero basado en TCP.

Es útil para conexiones con sitios remotos donde es fundamental un pequeño foodprint (como Arduino) y el ancho de banda es muy importante.

Una característica muy importante es que al ser un protocolo tan ligero existen clientes y servidores MQTT en diversos lenguajes (http://mqtt.org/software), desde Java y C a Arduino y JavaScript. Además muchos brokers de mensajería como IBM MQ o RabbitMQ soportan este ligero protocolo, de modo que el cliente pueda publicar y suscribirse a esta mensajería a través de este protocolo.

WebSockets

WebSocket es un protocolo de red basado en TCP que establece cómo deben intercambiarse datos entre redes. Puesto que es un protocolo fiable y eficiente, es utilizado por prácticamente todos los clientes. El protocolo TCP establece conexiones entre dos puntos finales de comunicación, llamados sockets. De esta manera, el intercambio de datos puede producirse en las dos direcciones.

En las conexiones bidireccionales, como las que crea WebSocket (a veces también websocket o web socket), se intercambian datos en ambas direcciones al mismo tiempo.

Las principales características de WebSockets son:

  • Bidireccional: Tanto el cliente como el Servidor pueden iniciar las conexiones

  • Full-duplex.

  • Conexión TCP única: Con REST, es necesaria una nueva conexión TCP por cada petición, mientras que en WebSockets el cliente y el servidor comunican sobre la misma petición

  • Protocolo ligero: Frente a una conexión HTTP, en WebSockets, una vez hecho el handshake, los datos se minimizan