Apache Kafka es una plataforma de streaming de eventos que se ha convertido en pocos años en una de las opciones más interesantes para integrar aplicaciones en tiempo real. Gracias a Apache Kafka, es posible construir aplicaciones productoras que publican eventos, así como aplicaciones consumidoras que reaccionan a dichos eventos. Estos eventos se almacenan de manera persistente de tal manera que ante un problema en las aplicaciones consumidoras, estas pueden volver a leer los mensajes de nuevo.
Apache Kafka se ha convertido en la herramienta estándar para hacer streaming de eventos en tiempo real. Es una herramienta open source que nació como un proyecto de Linkedin y que es capaz de capturar todo lo que está pasando en una compañía y convertirlo en flujos de información en tiempo real a los que otros procesos se pueden suscribir para procesarlos. Es una solución muy versátil en un contexto de integración de aplicaciones, ya que puede utilizarse por un lado como un sustituto para sistemas tradicionales de mensajería, pero también como una alternativa a las herramientas ETL que se utilizan para sincronizar datos de diferentes sistemas y bases de datos.
Existen multitud de casos de uso que se pueden implementar con Kafka, como por ejemplo detección de fraude, sensorización en vehículos, visión 360 grados de clientes, descarga de datos del mainframe, juegos online, etc.
Confluent es una empresa que fue fundada en 2014 por tres antiguos empleados de Linkedin (Jay Kreps, Neha Narkhede y Jun Rao) que habían participado desde 2010 en el desarrollo de Kafka mientras todavía trabajaban en Linkedin.
Confluent ofrece dos productos:
Algunas de las funcionalidades de Confluent Platform son:
Los principales componentes de la arquitectura de Kafka son:
Los topics son representaciones lógicas de los mensajes; puede haber un número ilimitado de topics. Los mensajes de un topic se distribuyen en diferentes particiones, siguiendo diferentes estrategias (round robin, en función de un hash de la clave del mensaje, etc.). Las particiones son útiles cuando los consumidores necesitan que se garantice el orden de entrega.
Los Brokers se ocupan de mantener de manera redundante diferentes particiones de cada topic de tal manera que ante un fallo en ese Broker, los restantes elementos del cluster puedan continuar dando servicio usando la copia que tienen de las pariciones. Por cada partición de cada topic, existe un Broker que ejerce como líder, y los demás Brokers actúan como followers.
Los consumidores se pueden agrupar en Grupos de Consumidores. Una partición de un topic solo puede ser leída como mucho por un Consumidor, pero un Consumidor puede leer varias particiones. A medida que se agregan o se eliminar consumidores de un Grupo, se lanzan operaciones de balanceo, ya sea para pasarle a un consumidor la tarea de leer en una nueva partición (cuando se eliminar un consumidor del grupo) o para quitarle la tarea de leer de una partición (cuando se agrega un consumidor a un grupo).
Es un framework con el que se pueden escribir conectores. Los conectores se utilizan tanto para ingestar mensajes en Kafka (sources) como para enviar información hacia otros sistemas (sinks).
Se trata de un interfaz RESTful que permite interactuar con un cluster de Kafka. Se puede utilizar tanto por aplicaciones que están fuera del firewall como por aplicaciones que no tienen posibilidad de interactuar con Kafka directamente.
Es una herramienta que permite comprobar que los mensajes que se publican en un topic cumplen con un esquema definido previamente. Gestiona cambios en el esquema y evita que se introduzcan cambios que no sean retrocompatibles.
La librería Kafka Streams está construida en un nivel superior que el de los productores y consumidores. Es una librería más potente y expresiva que los clientes Kafka tradicionales. Con Kafka Streams, la entrada y la salida se almacena en clusters de Kafka.
Confluent KSQL proporciona un nivel de abstracción superior, permitiendo escribir aplicaciones que procesan un flujo de datos usando SQL.
El siguiente diagrama muestra las diferentes opciones para interactuar con un cluster de Kafka:
Kakfa se ha convertido rápidamente en pocos años en una de las alternativas más atractivas para construir soluciones de procesado de eventos en tiempo real. Su arquitectura es altamente escalable y tolerante a fallos, lo cual convierte a Kafka en una opción muy interesante en entornos distribuidos. Confluent proporciona una plataforma Enterprise que amplía la potencia de Kafka dotándola de capacidades adicionales como conectores, esquemas, un proxy REST, un Control Center, etc.