Apache Kafka: plataforma de mensajería y transmisión de datos

La ejecución de apps, servicios web, aplicaciones de servidor y otros sistemas similares puede plantear muchos desafíos a los profesionales: uno de los más habituales es garantizar una transmisión fluida y un procesamiento rápido y eficiente de los flujos de datos. Existe un software que facilita mucho ambas cosas: la aplicación de mensajería y transmisión de Apache Kafka. Esta solución de código abierto, desarrollada como servicio de cola de mensajes para la plataforma de LinkedIn en sus inicios, ofrece en la actualidad un completo paquete para el almacenamiento, la transmisión y el procesamiento de datos.

¿Qué es Apache Kafka?

El software Apache Kafka es una aplicación multiplataforma de código abierto desarrollada por Apache Software Foundation y especializada en el procesamiento de flujos de datos. El proyecto original fue lanzado en 2011 por LinkedIn, la empresa responsable de la red social profesional del mismo nombre. Por aquel entonces, el objetivo era crear un sistema de cola de mensajes. Sin embargo, desde que se publicó con licencia libre (Apache 2.0), el software no ha dejado de evolucionar, pasando de ser una sencilla aplicación de cola de mensajes a convertirse en una plataforma de transmisión de alto rendimiento y gran potencia utilizada por empresas tan conocidas como Netflix, Microsoft o Airbnb.

Para mostrar este video, se requieren cookies de terceros. Puede acceder y cambiar sus ajustes de cookies aquí.

En 2014, los primeros desarrolladores del equipo de LinkedIn fundaron la empresa Confluent, que desde entonces ofrece la versión más completa de Apache Kafka bajo el nombre de Confluent Platform. Esta versión complementa el programa con muchas funciones adicionales, de las cuales algunas también son de código abierto y otras, de pago.

¿Cuáles son las funciones básicas de Apache Kafka?

Ante todo, Apache Kafka ha sido diseñado para optimizar la transmisión y el procesamiento de los flujos de datos que se intercambian entre la fuente y el receptor por conexión directa. Kafka actúa como una entidad de mensajería entre el emisor y el receptor, solventando los inconvenientes más habituales que conlleva este tipo de conexión.

Uno de los problemas más típicos que soluciona la plataforma de Apache es la imposibilidad de almacenar datos o mensajes en caché si el destinatario no está disponible (por ejemplo, si hay fallos en la red). Además, una cola de Kafka bien configurada evita que el receptor se vea saturado por el emisor, como suele pasar cuando la información enviada por conexión directa va más rápido de lo que puede recibirse y procesarse. El software de Kafka también responde bien cuando al receptor le llega el mensaje, pero se bloquea en el momento de procesarlo: con Apache Kafka, el emisor recibe un aviso de error que le informa del fallo, en lugar de asumir que se ha procesado el mensaje.

A diferencia de los meros servicios de colas de mensajes, como las bases de datos, el software de Apache Kafka tolera los errores, lo que le permite procesar los mensajes o datos de forma continua. Esta característica de Apache Kafka, en combinación con su alta escalabilidad y su capacidad para distribuir la información a un número ilimitado de sistemas (registro de transacciones distribuidas), lo convierte en una solución ideal para los servicios que deban asegurar un procesamiento y almacenamiento rápido de datos, así como una gran disponibilidad.

Las claves de la arquitectura de Apache Kafka

Apache Kafka se ejecuta como un clúster (red de ordenadores) en uno o más servidores que pueden encontrarse en centros de datos diferentes. Los nodos o puntos de intersección del clúster, denominados brokers, almacenan los flujos de datos entrantes, clasificándolos en los llamados topics. Los datos se dividen en particiones y se replican y distribuyen en el clúster, recibiendo un sello de tiempo. De esta manera, la plataforma de transmisión asegura una gran disponibilidad y un acceso de lectura rápido. Apache Kafka distingue los temas entre “normal topics” y “compacted topics”. Los mensajes de normal topics pueden borrarse una vez se ha excedido el período o el límite de almacenamiento, mientras que las entradas de compacted topics no están sujetas a limitaciones de tiempo ni espacio.

Las aplicaciones que escriben datos en los clústeres de Kafka se denominan productores, mientras que las aplicaciones que leen los datos de un clúster se llaman consumidores. El componente central al que acceden los productores y consumidores cuando procesan secuencias de datos es una biblioteca de Java llamada Kafka Streams. La característica de escritura transaccional garantiza que los mensajes se transmitan solo una vez (sin duplicación), lo que también se conoce como “exactly-once delivery” (o “entrega una sola vez”).

Nota

La biblioteca Kafka Streams de Java es la solución estándar recomendada para el procesamiento de datos en clústeres de Kafka. No obstante, también es posible utilizar Apache Kafka con otros sistemas de procesamiento.

Principios técnicos: las interfaces de Kafka

Apache Kafka ofrece cinco interfaces básicas distintas, mediante las cuales las aplicaciones pueden acceder al software:

  • Kafka Producer: la API Producer permite que las aplicaciones envíen flujos de datos a los brokers de los clústers de Apache para categorizarlos y almacenarlos (en los topics mencionados anteriormente).
  • Kafka Consumer: la API Consumer proporciona a los consumidores de Apache Kafka acceso de lectura a los datos almacenados en los topics del clúster.
  • Kafka Streams: mediante la API Streams, las aplicaciones pueden actuar como procesadores de flujos para convertir los flujos de datos entrantes en salientes.
  • Kafka Connect: gracias a la API Connect, es posible configurar productores y consumidores reutilizables que comuniquen los topics de Kafka con las aplicaciones o sistemas de bases de datos existentes.
  • Kafka AdminClient: la interfaz AdminClient se utiliza para facilitar la administración y supervisión de los clústeres de Kafka.

Las aplicaciones cliente y los servidores individuales de los clústeres de Apache se comunican a través de un protocolo sencillo, de alto rendimiento y multilenguaje basado en TCP. De manera predeterminada, los desarrolladores ponen a disposición un cliente Java para Apache Kafka, aunque también hay clientes en muchos otros lenguajes, como PHP, Python, C/C ++, Ruby, Perl o Go.

Casos de aplicación de Apache Kafka

Desde sus inicios, Apache Kafka ha sido diseñado para ofrecer un alto rendimiento de lectura y escritura. Gracias a las API mencionadas, así como a su gran flexibilidad, escalabilidad y tolerancia a errores, este software de código abierto supone una buena solución para las aplicaciones más diversas. Apache Kafka es especialmente adecuado en los siguientes escenarios:

  • Publicar y suscribirse a flujos de datos: la historia de este proyecto de código abierto comenzó con el uso de Apache Kafka como sistema de mensajería. Aunque el software ha evolucionado mucho, sigue siendo óptimo tanto para la transmisión directa de mensajes a través del sistema de colas como para el envío de mensajes broadcast.
  • Procesar flujos de datos: las aplicaciones que necesitan reaccionar a ciertos eventos en tiempo real y, por este motivo, deben procesar los flujos de datos de la manera más rápida y eficaz posible, encuentran un poderoso aliado en Apache Kafka gracias a la API Streams.
  • Almacenar flujos de datos: con su tolerancia a los errores, Apache Kafka también resulta un excelente sistema de almacenamiento distribuido. Obtendrás los mismos resultados tanto si deseas guardar 50 kilobytes como 50 terabytes de datos coherentes en un servidor o servidores.

Por supuesto, puedes combinar como quieras todos estos elementos. Por ejemplo, como plataforma de transmisión compleja, Apache Kafka no solo almacena los datos y los pone a disposición en cualquier momento, sino que también los procesa en tiempo real y los vincula a todas las aplicaciones y sistemas deseados.

Algunos casos de aplicación típicos de Apache Kafka:

  • Sistema de mensajería
  • Analítica web
  • Sistema de almacenamiento
  • Procesamiento de flujo
  • Event sourcing
  • Análisis/gestión de archivos de registro
  • Soluciones de monitoreo
  • Registro de transacciones