Post

Apache Kafka para desarrolladores

Apache Kafka para desarrolladores

¿Te suena familiar alguna de estas situaciones?

  • Tu jefe menciona Kafka como solución y tú asientes mientras piensas “¿de qué demonios está hablando?”
  • Estás en un proyecto con Kafka pero cada vez que algo falla te sientes perdido
  • Has leído la documentación oficial y saliste más confundido que cuando entraste

Si has respondido “sí” a alguna, este artículo es para ti. Vamos a entender Kafka de una vez por todas, sin jerga técnica innecesaria y con ejemplos que realmente tienen sentido.

¿Para qué diablos sirve Kafka?

Antes de meternos en tecnicismos, hablemos claro: Kafka es el sistema nervioso de las aplicaciones modernas.

Imagina una empresa donde cada departamento necesita saber qué pasa en los demás: cuando se hace una venta, lo necesita saber contabilidad, el almacén, marketing, atención al cliente… En lugar de que cada uno llame a todos los demás (un caos), Kafka actúa como un tablón de anuncios inteligente donde cada departamento puede publicar sus novedades y suscribirse a las que le interesan.

Esto no solo vale para departamentos, sino para microservicios, sistemas de IoT, análisis de datos en tiempo real, y cualquier escenario donde necesites que distintas partes de tu sistema se comuniquen de forma eficiente.

Los personajes de nuestra historia

Para entender Kafka, necesitas conocer a sus protagonistas:

  • Topics y particiones: Dónde se almacenan los mensajes
  • Productores: Quién envía los mensajes
  • Consumidores: Quién lee los mensajes
  • Brokers: Quién gestiona todo el sistema

La mejor forma de entender cómo trabajan juntos es con una historia que puedas visualizar fácilmente.


🏢 Nuestro almacén

Imagina que tienes que organizar el almacén de documentos más eficiente del mundo. Este almacén es Kafka.

Las estanterías

Decides crear estanterías especializadas. Una para “Facturas”, otra para “Pedidos”, otra para “Alertas de inventario”. En el mundo Kafka, cada estantería es un Topic.

Pero aquí viene lo inteligente: cada estantería tiene varios cajones numerados. Si sabes que las facturas van a llegar a montones, creas una estantería con 5 cajones. Si las alertas son pocas, una con 2 cajones bastará. Cada cajón es una Partición.

¿Por qué cajones separados? Porque varios empleados pueden trabajar en paralelo, cada uno con su cajón, sin estorbarse.

El encargado súper eficiente

En la entrada hay un empleado que lo controla todo: el Broker. Este tipo es increíble:

  • Recibe cualquier documento y sabe exactamente dónde va
  • Nunca pierde nada
  • Mantiene todo perfectamente ordenado por fecha de llegada
  • Recuerda exactamente qué ha entregado a cada empleado

Los repartidores incansables

Cada vez que tu empresa genera un documento (una venta, un pedido, una alerta), alguien lo lleva corriendo al almacén. Estos son los Productores: aplicaciones que envían mensajes a Kafka.

El repartidor le entrega el documento al encargado y este lo archiva en la estantería y cajón correspondientes, manteniendo siempre el orden de llegada.


👥 Los equipos que procesan los documentos

El equipo de contabilidad

Cada jueves llega el equipo de contabilidad. Son tres contables que trabajan juntos, pero de forma inteligente:

“Somos del equipo de contabilidad. Venimos por las facturas nuevas.”

El encargado, que es muy organizado, les dice:

  • “María, tú te encargas del cajón 1 de facturas”
  • “Carlos, tú del cajón 2”
  • “Ana, tú del cajón 3”

Cada uno procesa su parte sin pisar el trabajo de los demás. En Kafka, este equipo es un Consumer Group, y cada contable es un Consumidor.

La memoria perfecta

El encargado tiene una memoria prodigiosa. Recuerda exactamente cuál fue el último documento que entregó a cada equipo. Así, cuando vuelven la semana siguiente, continúan justo donde lo dejaron.

En Kafka, esto se llama Offset: la posición exacta donde cada consumidor se quedó la última vez.


🚨 ¿Qué pasa cuando las cosas se complican?

Cuando alguien falta al trabajo

Un jueves, Carlos se pone enfermo. Solo llegan María y Ana.

El encargado, sin inmutarse, redistribuye el trabajo:

  • “María, además de tu cajón 1, hoy también te toca el cajón 2 de Carlos”
  • “Ana, tú sigue con el cajón 3”

Nada se queda sin procesar. En Kafka esto es el rebalanceo automático: cuando un consumidor se cae, los demás se reparten su trabajo.

Cuando se pierde algo

Imagina que un cajón se daña. En un almacén normal sería un desastre, pero nuestro encargado es prevenido: tiene copias de todo en otros almacenes cercanos.

Si un cajón se pierde, automáticamente activa una copia y el trabajo continúa sin interrupciones. Estas son las réplicas de Kafka: cada partición se duplica en varios brokers para garantizar que nunca se pierda información.


🎯 El secreto del orden perfecto

Aquí viene una parte crucial que muchos no entienden bien:

¿Cómo decide el encargado dónde poner cada documento?

Cada documento tiene una etiqueta (la key en Kafka). Puede ser el ID del cliente, el código del producto, o cualquier cosa que identifique el documento.

El encargado usa una fórmula matemática simple: toma la etiqueta, la convierte en un número, y ese número determina el cajón. Siempre la misma etiqueta va al mismo cajón.

Esto es genial porque:

  • Todos los documentos del cliente “12345” van al mismo cajón
  • Siempre están en orden cronológico

La regla de oro del orden

Kafka garantiza orden solo dentro de cada cajón (partición).

Si necesitas que todos los mensajes estén ordenados globalmente, tendrás que usar un solo cajón… pero entonces solo un consumidor podrá procesarlos. Es el trade-off entre orden y velocidad.

La fórmula mágica

Recuerda esto: Número de particiones = Número máximo de consumidores en paralelo

  • Más particiones = más paralelismo = más velocidad
  • Menos particiones = más orden = menos velocidad

🗑️ La limpieza automática

Nuestro almacén no puede crecer infinitamente. El encargado tiene dos estrategias de limpieza:

Retention Time (limpieza por tiempo): “Los documentos más antiguos de X días se destruyen automáticamente” En Kafka esto se configura con retention.ms. Es perfecto para logs, eventos, o cualquier cosa donde solo necesites un historial temporal. Por ejemplo, puedes configurar que los logs se mantengan por 7 días y después se eliminen automáticamente.

Log Compaction (limpieza por clave): “Solo me quedo con la última versión de cada etiqueta” Esta es más inteligente. El encargado revisa todos los documentos con la misma etiqueta y solo conserva el más reciente. En Kafka se activa con cleanup.policy=compact. Es ideal para estados: el último precio de un producto, la última ubicación de un vehículo, el último estado de un pedido.


🚀 Consejos para no meter la pata

1. Elige bien las claves (keys)

  • Si usas la misma clave para todo, todo irá al mismo cajón (partición)
  • Si no usas claves, Kafka distribuye aleatoriamente
  • Usa claves que representen cómo quieres agrupar y ordenar tus datos

2. Dimensiona las particiones pensando en el futuro

  • Empezar con pocas particiones y aumentar después es fácil
  • Reducir particiones es complejo y problemático
  • Piensa en tu pico máximo de consumidores

3. No abuses de los topics

  • Un topic por concepto en tu dominio.
  • No mezcles conceptos diferentes en el mismo topic
  • Nombres descriptivos y consistentes

4. Maneja las versiones de tus mensajes

  • Los mensajes cambiarán de formato con el tiempo
  • Usa herramientas como Schema Registry + Avro o Protobuf para versionado
  • Piensa en compatibilidad hacia atrás y hacia adelante

🎭 Casos de uso reales

E-commerce

  • Topic “pedidos”: Cada vez que alguien compra algo
  • Consumidores: inventario (descuenta stock), contabilidad (factura), logística (prepara envío), marketing (recomienda productos)

Banca

  • Topic “transacciones”: Cada movimiento de dinero
  • Consumidores: detección de fraude, contabilidad, notificaciones, análisis de riesgo

IoT

  • Topic “sensores”: Datos de temperatura, humedad, movimiento
  • Consumidores: alertas en tiempo real, análisis histórico, machine learning

📊 Cheat Sheet: Kafka vs Almacén

Concepto KafkaMetáfora del almacénPara qué sirve
ClusterEl almacén completoEl sistema Kafka en conjunto
BrokerEncargado del almacénServidor que gestiona mensajes
TopicEstanteríaCategoría de mensajes
PartitionCajónDivisión para paralelismo
ProducerRepartidorAplicación que envía mensajes
ConsumerContableAplicación que lee mensajes
Consumer GroupEquipo de contablesGrupo de consumidores colaborando
OffsetÚltimo documento revisadoPosición de lectura
KeyEtiqueta del documentoCriterio de particionamiento
ReplicationCopias en otros almacenesRedundancia para disponibilidad

🏁 Conclusión

Kafka no es magia negra. Es simplemente un almacén muy bien organizado que permite que tus aplicaciones se comuniquen de forma eficiente y confiable.

La próxima vez que alguien mencione Kafka en una reunión, ya no vas a tener que asentir fingiendo que entiendes. Vas a saber exactamente de qué están hablando.

Y si te toca implementarlo, ya tienes una base sólida para empezar. Solo recuerda: piensa en el almacén, visualiza los cajones, y todo va a tener sentido.


This post is licensed under CC BY 4.0 by the author.