Kafka

En el año 2001 el término kafkiano se aceptó por la Real Academia de la Lengua Española. Entre sus acepciones están «Perteneciente o relativo a Franz Kafka, escritor checo, o a su obra» o «Dicho de una situación: Absurda, angustiosa.».

En el mundo de la tecnología, donde en ocasiones se dan situaciones absurdas o angustiosas, precisamente Kafka puede ser la solución a nuestros problemas.

Apache Kafka es una plataforma de streaming de eventos distribuida de código abierto. Se trata de solución de alto rendimiento para manejar flujos de eventos (datos) en tiempo real. Fue desarrollado por LinkedIn y más tarde se convirtió en parte del proyecto de la Fundación Apache. Con la proliferación de sistemas event-driven, Kafka está tomando un papel relevante como solución para casos sencillos y complejos.

Los usos de Kafka en las aplicaciones modernas son muy variados, desde la recopilación de registros y métricas, hasta la alimentación de recomendaciones en tiempo real, pasando por el seguimiento de actividad de usuarios en sitios web.

Kafka posee ciertas características que lo hacen destacar como una solución para el procesamiento de eventos en tiempo real, por ejemplo:

Alto rendimiento: Kafka puede manejar millones de eventos por segundo, lo que lo hace ideal para aplicaciones de alto volumen.

Escalabilidad: Kafka puede escalar horizontalmente para manejar aún más eventos simplemente agregando más nodos al clúster.

Durabilidad: Los eventos en Kafka se almacenan en disco y se replican dentro del clúster para evitar la pérdida de datos.

Tiempo real: Kafka permite el procesamiento de eventos en tiempo real, lo que es crucial para muchas aplicaciones modernas.

El tema de Apache Kafka es suficientemente amplio como para poder abarcar varios libros, desde conocer las diversas implementaciones o la administración del sistema hasta la programación avanzada.

Pero vamos a adentrarnos un poco para conocer algo más de su funcionamiento.

Conceptos básicos de Kafka

Para entender cómo funciona Kafka, es útil familiarizarse con algunos de sus conceptos clave:

Eventos: Un evento es un registro o mensaje que se envía a Kafka. Cada evento consta de una clave, un valor y un timestamp.

Topics: Los eventos se agrupan en categorías llamadas topics. Un topic es una secuencia ordenada e inmutable de eventos que se distribuyen entre varios archivos.

Productores: Los productores son las entidades que publican datos en los topics de Kafka.

Consumidores: Los consumidores leen los eventos desde los topics de Kafka.

Conectores: Los conectores son una interfaz que permite a Kafka conectarse con sistemas externos para importar o exportar datos.

Conceptos de Kafka

¿Cómo funciona?

Kafka se basa en el modelo de publicación-suscripción, donde los productores envían mensajes a un topic y los consumidores se suscriben a uno o más topics para recibir los mensajes .

Los pasos principales del funcionamiento de Kafka son los siguientes:

Creación de un topic: Un topic es una categoría o un nombre lógico que agrupa los mensajes que tienen un propósito o un significado común. Un topic se divide en particiones, que son unidades de almacenamiento independientes que contienen los mensajes. Cada partición tiene un orden secuencial y un identificador único. Para crear un topic, se puede usar la herramienta de línea de comandos kafka-topics.sh o la API de administración de Kafka. Por ejemplo, para crear un topic llamado test con 3 particiones y un factor de replicación de 2, se puede ejecutar el siguiente comando:

kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 3 --topic test

Producción de mensajes: Un mensaje es una unidad de datos que se envía a un topic. Un mensaje consta de una clave, un valor y un desplazamiento. La clave se usa para determinar a qué partición se asigna el mensaje, el valor es el contenido del mensaje y el desplazamiento es un número que identifica la posición del mensaje dentro de la partición . Para producir mensajes, se puede usar la herramienta de línea de comandos kafka-console-producer.sh o la API de productor de Kafka. Por ejemplo, para enviar mensajes al topic test desde la consola, se puede ejecutar el siguiente comando:

kafka-console-producer.sh --broker-list localhost:9092 --topic test

Consumo de mensajes: Un consumidor es una aplicación que lee los mensajes de uno o más topics. Un consumidor se puede asignar a un grupo de consumidores, que es un conjunto de consumidores que cooperan para consumir los mensajes de un topic. Cada partición de un topic se asigna a un solo consumidor dentro de un grupo de consumidores, y cada consumidor puede consumir de una o más particiones . Para consumir mensajes, se puede usar la herramienta de línea de comandos kafka-console-consumer.sh o la API de consumidor de Kafka. Por ejemplo, para consumir los mensajes del topic test desde el principio, se puede ejecutar el siguiente comando:

kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

Esta es una pequeña introducción que espero haya servido al lector para conocer cómo Kafka puede ayudar a desacoplar funcionalidades y hacer los sitemas altamente escalables y que tambien le haya abierto el apetito por conocer más sobre Apache Kafka.