Apache Kafka: qué es y cómo funciona

Eventos distribuidos entre topics y particiones de un clúster Kafka

Apache Kafka es una plataforma distribuida de streaming de eventos. Permite publicar, almacenar y consumir secuencias de registros con alto rendimiento, tolerancia a fallos y desacoplamiento entre sistemas. Se utiliza para integrar aplicaciones, procesar eventos en tiempo real, replicar cambios y construir pipelines de datos.

El modelo de eventos

Un evento representa algo que ocurrió: una compra, una medición o un cambio de estado. Suele incluir una clave, un valor, una marca temporal y cabeceras. Los productores escriben eventos en topics y los consumidores los leen.

Kafka conserva los eventos durante el período configurado aunque hayan sido consumidos. Esta característica permite releer, reconstruir estados o incorporar un consumidor nuevo sin pedir al productor que repita datos.

Topics, particiones y orden

Un topic se divide en particiones. Cada partición es un registro ordenado y cada evento recibe un offset creciente. El orden se garantiza dentro de una partición, no entre todas las particiones del topic.

La clave del evento suele determinar la partición. Si todos los cambios de un cliente deben procesarse en orden, utiliza una clave estable basada en ese cliente. Una clave mal distribuida puede concentrar tráfico en una sola partición y crear un cuello de botella.

Más particiones permiten mayor paralelismo, pero también aumentan recursos, ficheros, elecciones y complejidad operativa. Dimensiona con pruebas de carga y necesidades de orden.

Brokers, líderes y réplicas

Los servidores del clúster son brokers. Cada partición tiene un líder que atiende lecturas y escrituras, además de réplicas en otros brokers. Si el líder falla, una réplica sincronizada puede asumir el papel.

El factor de replicación mejora la tolerancia a fallos a cambio de almacenamiento y tráfico de red. Configuraciones como acknowledgments del productor y mínimo de réplicas sincronizadas definen el equilibrio entre durabilidad, disponibilidad y latencia.

Productores

Un productor agrupa registros, comprime lotes y elige la partición. Parámetros como batch size, linger y compresión afectan rendimiento. Los productores idempotentes ayudan a evitar duplicados introducidos por reintentos dentro de determinadas garantías.

No envíes eventos gigantes si puedes almacenar el objeto pesado en otro sistema y publicar una referencia. Define límites, serialización y contrato antes de que múltiples equipos dependan del topic.

Consumidores y consumer groups

Los consumidores de un mismo grupo se reparten las particiones: cada partición se asigna a un consumidor del grupo a la vez. Dos grupos distintos leen el mismo topic de forma independiente, por ejemplo uno para fraude y otro para analítica.

El offset indica el progreso. Confirmarlo antes de procesar puede perder eventos si el proceso falla; confirmarlo después puede provocar reprocesamiento. Diseña consumidores idempotentes y registra resultados mediante claves únicas o transacciones cuando sea necesario.

Al entrar o salir consumidores, el grupo puede rebalancearse. Sesiones, asignación cooperativa y tiempos de procesamiento deben configurarse para evitar pausas frecuentes.

Retención y compactación

La retención por tiempo o tamaño conserva un historial. La compactación mantiene al menos el último valor conocido por clave, adecuada para estados como la configuración actual de cada cuenta. No equivale a una eliminación inmediata y requiere comprender los tombstones.

Combinar políticas depende del caso. Documenta si el topic representa hechos inmutables, estado, comandos o datos temporales.

Entrega y “exactly once”

At-most-once puede perder eventos y evita duplicados; at-least-once evita pérdidas a costa de posibles repeticiones. Las transacciones de Kafka permiten garantías más fuertes dentro de flujos compatibles, pero no convierten automáticamente en atómica una escritura a cualquier base externa.

La estrategia práctica es asumir reintentos, usar identificadores de evento, hacer efectos idempotentes y monitorizar inconsistencias.

Casos de uso y cuándo no elegirlo

Kafka destaca en integración asíncrona, CDC, telemetría, procesamiento continuo y arquitecturas dirigidas por eventos. Para una cola pequeña con enrutamiento complejo, una base de datos como fuente simple o una comunicación síncrona que necesita respuesta inmediata, otra herramienta puede ser más sencilla.

Operación profesional

Monitoriza retraso de consumidores, particiones sin réplica, latencia, errores, disco y equilibrio. Protege el clúster con autenticación, autorización por topic y cifrado. Usa un registro de esquemas y una política de compatibilidad para que productores y consumidores evolucionen sin romperse.

Prueba fallos de brokers, rebalances, duplicados, eventos fuera de orden y recuperación desde offsets. Kafka no elimina los problemas distribuidos: proporciona primitivas para tratarlos de forma explícita.

Continúa aprendiendo

Amplía este tema con nuestras guías sobre ETL frente a ELT, Apache Airflow, Apache Spark.

Fuentes oficiales

Preguntas frecuentes

¿Qué es Apache Kafka?
Es una plataforma distribuida que publica, almacena y consume flujos de eventos mediante topics particionados.

¿Kafka es una cola de mensajes?
Puede cubrir patrones de mensajería, pero conserva eventos y permite múltiples grupos y relecturas, por lo que su modelo es más amplio.

¿Dónde garantiza el orden?
Dentro de cada partición. No existe un orden global automático entre todas las particiones de un topic.

¿Qué es un consumer group?
Un conjunto de consumidores que se distribuyen las particiones para procesar el topic en paralelo.

¿Cómo se evitan duplicados?
Con productores idempotentes donde aplique y, sobre todo, consumidores y efectos idempotentes basados en identificadores únicos.

¿Qué se debe monitorizar?
Lag de consumidores, réplicas, latencia, errores, almacenamiento, rebalances y distribución de particiones.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir