Introducción a Apache Kafka

¿Qué es Apache Kafka?

Apache Kafka es un sistema de eventos distribuido de código abierto. Fue originalmente desarrollado por LinkedIn, para suplir las necesidades causadas por su rápido crecimiento, y pasó a infraestructura basada en microservicios. 

Es también una parte esencial en el manejo de datos en tiempo real de Netflix, lo cual se debe, principalmente, a la baja latencia y tolerancia a fallos derivada de su arquitectura. Además, al ser fácilmente escalable, es muy beneficioso para este tipo de empresas.

Componentes principales de Apache Kafka

Vamos a discutir más en detalle la arquitectura de Apache Kafka para entender cómo funciona este sistema de streaming.

Topics

Los topics no son más que un flujo de datos de un cierto tipo asociados a un canal con un nombre concreto. En estos flujos, encontraremos productores y consumidores en cada uno de sus extremos. 

Cada topic está dividido en un número de partes, conocidas como particiones. El número de particiones se indica al crear un topic, pero siempre puede cambiarse posteriormente. Generalmente, los mensajes enviados a un topic contendrán una key, que se utiliza para determinar en qué partición va a recaer un mensaje. Todos los mensajes con la misma key irán a la misma partición y se podrán realizar operaciones como compactados sencillos. Si la key no está incluida en el mensaje, éste se distribuirá uniformemente entre las particiones.

Para distinguir cada uno de los mensajes contenidos en una partición, se les asignará un número incremental único dentro de la misma. Este número es conocido como offset y un registro más antiguo tendrá un offset menor ya que los mensajes siempre se añaden al final de la partición.

Brokers

Un clúster de Kafka está formado por uno o más servidores que son conocidos como brokers, debido al significado de este término en inglés (Un individuo encargado de preparar las transacciones entre un comprador y un vendedor por una comisión). En el caso de Kafka, un broker mantiene múltiples topics con sus respectivas particiones. Además, permite obtener mensajes por nombre de topic, partición u offset. 

Los brokers comparten información entre los componentes de un clúster directamente o a través de un nodo de Apache Zookeeper y, en caso de tener un clúster, sólo uno de los brokers actuará como controlador o líder.

Consumidores y productores

Toda aplicación que lea de un topic de kafka será considerada como un consumidor. Los datos son extraídos del servidor cuando la aplicación está lista para leerlos. Estos consumidores pueden ser agrupados bajo un cierto nombre, de manera que se mantienen, por ejemplo, todos los componentes de que ingestan datos a una aplicación desde distintas fuentes y a distintos topics bajo un mismo nombre.

Igual que pasa con los consumidores, se considerará a toda aplicación que escriba en un topic como un productor, estos se comunicarán directamente con uno de los brokers y podrán especificar en qué topic y partición quieren incluir ese mensaje.

Casos de uso de Apache Kafka

Mensajería

Apache Kafka puede funcionar de manera similar a sistemas como RabbitMQ, por normal general, tendrá mayor capacidad, menor latencia y mayor resistencia a fallos.

Métricas

Apache Kafka puede servir como un punto central encargado de recoger todos los logs de las distintas aplicaciones.

Procesamiento en stream

Muchos casos de transformación de los datos pueden realizarse en tiempo real y de manera secuencial. Apache Kafka puede ser muy beneficioso en este aspecto, ya que permite garantizar el procesado de los mensajes al menos una vez o únicamente una vez. Además, desde la versión 0.10.0.0, Kafka incorpora ya una librería de procesamiento en streams llamada Kafka Streams

Por otro lado, muchas librerías disponen también de módulos como es Alpakka para la librería de Akka. Con este modelo podríamos, por ejemplo, recibir información de un cliente de varias fuentes, realizar su normalización dejando el resultado en un nuevo topic y, posteriormente, realizar la deduplicación de los clientes de todas las fuentes.

Ventajas y desventajas

Ya se han descrito muchas de las fortalezas de Apache Kafka, como son la baja latencia, resistencia a fallos, gran capacidad de procesamiento o escalabilidad. Sin embargo, cabe destacar algunas de las situaciones donde Kafka puede no ser tan conveniente. 

Si una aplicación requiere de comodines en los nombres de los topics, Kafka no ofrece soporte para tal funcionalidad actualmente. Algunos paradigmas de mensajería no tienen soporte por parte de Kafka, como son las point-to-point queues o el modelo de request / reply. Dado que Kafka comprime los mensajes, este proceso de compresión y descompresión puede resultar costoso en mensajes grandes reduciendo su rendimiento y capacidad de procesamiento.

Posibles alternativas a Apache Kafka

Las principales alternativas a Apache Kafka son otros sistemas de mensajería, como RabbitMQ o ActiveMQ, en cuanto a paquetería de código abierto. Sin embargo, también hay que tener en cuenta otras alternativas como Red Hat AMQ o SQS de Amazon.

Si comparamos Apache Kafka con un producto similar como es RabbitMQ, veremos que las diferencias en su arquitectura determinan su utilidad en distintos casos de uso. Por ejemplo, Kafka puede mantener grandes cantidades de datos sin mucho sobrecoste, pero las colas de RabbitMQ son más lentas cuanto más llenas están. Además, veremos que RabbitMQ ofrece soporte para mensajes con distintas prioridades, mientras que Kafka, no.

Conclusión

Estos son los principales conceptos necesarios para entender cómo funciona Apache Kafka, sin embargo, existen muchos más detalles y parámetros de configuración explorables en su documentación oficial. Te animamos a seguir su guía de inicio rápido y probar esta tecnología hoy mismo aquí.

Si te ha parecido interesante este artículo, te animamos a que visites la categoría de Software de nuestro blog para ver posts similares a este y a que lo compartas en redes con todos tus contactos. No olvides mencionarnos para hacernos llegar tu opinión @Damavisstudio. ¡Hasta pronto!
Víctor Prats
Víctor Prats
Artículos: 8