¿Qué es Kafka?
Kafka es un sistema distribuido para el procesamiento de streams.
La finalidad de Kafka es ofrecer una plataforma de baja latencia y alto rendimiento para gestionar feedings en tiempo real.
Para ello, dispone de una capa de almacenamiento de tipo publicador/suscriptor altamente escalable y permite conectarnos a múltiples sistemas para importar o exportar información.
Un clúster en Kafka permite su escalado. Cada nodo posee un bróker que lo gestiona. Los datos se almacenan en topics. Un topic puede estar particionado y sus particiones distribuidas/asignadas a distintos bróker. Si hemos particionado correctamente, podemos distribuir la carga de escritura o lectura entre múltiples bróker. En la imagen podemos ver un ejemplo de escritura, en la que nuestro software productor, conectado a Kafka, toma una ruta para almacenar nuestro mensaje.
¿Qué puedo guardar en Kafka?
Bueno, hemos visto que Kafka es altamente escalable, vital para los sistemas de hoy en día, pero ¿con qué datos puedo trabajar? Pues esta es precisamente la potencia de Kafka.
Kafka no está preparado para un tipo de dato concreto o almacenar unos logs. Kafka aporta un API de alto nivel para que podamos crear nuestros productores y consumidores a demanda.
Un productor en Kafka se encarga de enviar los mensajes al clúster, haciendo uso de la API proporcionada. Los mensajes deben poseer una clave (puede ser cualquier cosa como, por ejemplo, un timestamp).
Cuando nuestro productor se conecta al clúster, obtiene información del mismo. A la hora de enviar el mensaje, elige la partición correspondiente a la clave de nuestro mensaje y persiste en dicha partición del topic destino el mensaje.
¿Y quién puede leer esa información?
Pues haciendo uso del API podemos crear consumidores.
Un consumidor va a ser el encargado de obtener los mensajes de uno o varios topics y hacer con ellos lo que corresponda (como puede ser persistirlos bajo un HDFS, insertarlos en una colección de MongoDB o en una tabla de Cassandra…)
Kafka asegura que ningún consumidor leerá dos veces el mismo mensaje.
Pero esto no es todo, los consumidores también pueden escalar. Kafka puede tratar varios consumidores sobre un mismo topic como si de uno solo se tratase, distribuyendo la carga entre ellos. Y no es complicado, solo tienen que conectarse con el mismo “customer-id” al clúster.
Algunos ejemplos de uso de Kafka
- Como cola de mensajería: al permitir escalado y distribución de carga, ofrece un mejor rendimiento que sistemas tradicionales como ActiveMQ o RabbitMQ.
- Para seguir la actividad de un sitio web: seguir la actividad de un sitio web grande es complicado, ya que cada usuario puede generar mucha información. Kafka puede usarse para recoger estos datos en un topic y que un sistema los consuma.
- Como agregador de logs: Kafka puede recoger los logs generados en múltiples sistemas y centralizarlos hacia un sistema central (como puede ser un HDFS).
- Fuente de eventos: Kafka puede centralizar los cambios de estado de múltiples sistemas, ordenados en base a su timestamp.
¿Dónde busco más información?
Puedes empezar por la página web de la fundación apache de Kafka o la web de confluent, empresa que llevan los ingenieros que crearon Kafka, pero seguro que podemos ayudarte en CLEFormación.