Kafka en 5 minutos: ¿Qué es Kafka?

Rodrigo Navarro
4 min readMay 13, 2021

--

Hola! este es mi primer post y espero lo encuentres entretenido de leer y sea un aporte para ti, en esta serie voy a pasar por varios aspectos de Kafka desde el punto de vista de desarrollo de aplicaciones, si bien eres nuevo en el tema o ya desarrollas aplicaciones con Kafka espero encuentres cosas interesantes.

Comencemos desde lo básico… 😜

¿Qué es Kafka?

Es un sistema de mensajería publicador/suscriptor también conocido como un registro de log distribuido, diseñado para almacenar mensajes de forma ordenada y que estos puedan ser leídos de forma determinista. Es un data store muy utilizado en la industria y es una base para el procesamiento de datos en streaming.

En el mundo de Kafka la unidad más pequeña de información se llama mensaje y está conformado por al menos una llave y un valor y estos son inmutables, es decir, cuando Kafka recibe un mensaje, este no se puede modificar. Tanto la llave como el valor son simplemente una matriz de bytes, así que en cuanto a Kafka se refiere, estos mensajes no tienen un significado específico, sin embargo, la llave es una metadata que se utiliza internamente para guardar y servir mensajes de forma ordenada (Esto lo veremos más en detalle en otro post 😉).

Kafka almacena colecciones de mensajes o stream de mensajes, que se almacenan en una estructura llamada tópico, que haciendo un símil con una base de datos, es un especie de tabla donde los mensajes se guardan de forma ordenada.

Internamente Kafka es un colección de logs, es decir, literalmente son archivos de log donde cada mensaje nuevo se añade al final de este append-only log y viven dentro de una carpeta o tópico.

Cuando un cliente envía un mensaje a Kafka lo hace a uno o varios tópicos, desde los cuales cualquier cliente puede consumir y a diferencia de otros sistemas de mensajería los datos en Kafka son persistentes y se consultan siempre de inicio a fin, volveremos a esto en otro post.

El cliente que empuja datos a Kafka se llama productor, que no es más que una aplicación que envía datos a uno o más tópicos. El cliente por defecto de Kafka envía datos en bloques y esto lo hace para aprovechar mejor las capacidades de la red y es un tema a considerar para nuestros casos de uso, este comportamiento se puede configurar y ajustar.

Cuando un cliente produce datos a Kafka lo hace hacia un tópico y más específico a una partición que es un concepto que es parte del tópico y se refiere a un espacio lógico donde los mensajes son almacenados en forma ordenada.

El cliente que consume datos de Kafka se llama consumidor, que no es más que una aplicación que recibe datos de uno o más tópicos. El cliente por defecto de Kafka recibe datos en bloque y esto lo hace ser muy muy rápido y permite aprovechar las capacidades de la red reduciendo el costo extra de ir al cluster por cada mensaje, al igual que el productor esto es un tema a considerar para nuestros casos de uso y se puede configurar y ajustar.

Kafka es muy conocido por su capacidad de escalar, ser altamente a prueba de fallos y por ser muy rápido, es realmente rápido, y para lograr esto se basa en una arquitectura distribuida, donde los datos y las responsabilidades están distribuidas en los nodos del cluster.

Esto permite tener multiples productores y consumidores con altas garantías de entrega. Entonces..

¿Porqué usar Kafka?

  • Múltiples productores
  • Múltiples consumidores
  • Retención de datos en disco
  • Alta capacidad de escalar
  • Alto performance

Y… ¿Para qué puedo usar Kafka?

  • Bus de mensajería
  • Seguimiento de actividad
  • Métricas y logging
  • Procesamiento de datos en streaming
  • Micro servicios basados en eventos

Este es un pequeño resumen de Kafka en el lenguaje más humano posible 😊 en los siguientes post iremos mas a profundidad.

Por lo pronto te invito a revisar este repositorio en Github donde están todos los temas de la serie con algunos laboratorios que ejemplifican los temas 😉

Glosario de términos

- Stream: una secuencia ilimitada de datos ordenados e inmutables.
- Procesamiento de datos en streaming: cálculos continuos de uno o más streams.
- Data inmutable: data que no puede ser modificada una vez creada.
- Data store: un lugar genérico donde se almacenan datos de cualquier tipo.
- Append-only log: archivos en los que los eventos entrantes se escriben al final del archivo a medida que se reciben.

Happy coding 💙

--

--

Rodrigo Navarro
Rodrigo Navarro

Written by Rodrigo Navarro

Technical Lead at Mercado Libre

No responses yet