Definición
Imagina una imprenta de periódicos masiva que nunca tira las ediciones antiguas. Cada artículo (evento) que se publica queda almacenado en el rollo maestro de la imprenta, organizado por sección (topic). Los lectores (consumidores) pueden suscribirse a secciones específicas y leer a su propio ritmo, ya sea que quieran las noticias de hoy, las de la semana pasada o artículos de hace seis meses. Eso es esencialmente lo que hace Apache Kafka con los datos en las aplicaciones modernas.
Kafka es una plataforma de streaming de eventos distribuida, que es una forma elegante de decir que es una cola de mensajes súper potente diseñada para manejar enormes cantidades de datos fluyendo a través de un sistema en tiempo real. A diferencia de las colas de mensajes tradicionales que borran los mensajes una vez que se leen, Kafka mantiene los mensajes durante un período configurable (días, semanas o incluso para siempre). Esto significa que múltiples sistemas pueden leer los mismos datos, los nuevos sistemas pueden “reproducir” eventos históricos, y nunca pierdes datos aunque un consumidor se caiga temporalmente.
Lo que hace especial a Kafka es su capacidad de manejar millones de mensajes por segundo mientras los mantiene organizados y durables. Lo usan empresas como Netflix, Uber y LinkedIn para procesar desde clics de usuarios hasta transacciones financieras. Piensa en él como el sistema nervioso central de las aplicaciones intensivas en datos: cada evento significativo fluye a través de Kafka, y cualquier sistema que le importe ese evento puede suscribirse y reaccionar en consecuencia.
Ejemplo
Escenario Real 1: Seguimiento de Viajes en Uber Cuando pides un Uber, docenas de eventos se publican en Kafka: viaje solicitado, conductor asignado, actualizaciones de ubicación del conductor (cada pocos segundos), recogida confirmada, viaje iniciado, cambios de ruta, viaje completado, pago procesado. Diferentes servicios consumen estos eventos: la visualización del mapa lee las actualizaciones de ubicación, el calculador de ETA lee los datos de ruta, la detección de fraude analiza los eventos de pago, y analytics procesa todo para insights de negocio. Kafka maneja millones de estos eventos por minuto en todos los viajes que ocurren globalmente.
Escenario Real 2: Analytics de Visualización en Netflix Cada vez que presionas play, pausa, rebobinas o dejas de ver algo en Netflix, un evento va a Kafka. El motor de recomendaciones consume estos eventos para entender tus preferencias. La función “Continuar viendo” lee eventos para saber dónde lo dejaste. Los analytics de contenido los usan para entender qué shows son populares. El equipo de encoding usa los patrones de visualización para decidir qué niveles de calidad pre-codificar. Un stream de eventos, muchos consumidores, cada uno extrayendo valor diferente.
Escenario Real 3: Procesamiento de Transacciones Bancarias Cuando pasas tu tarjeta de crédito, el evento de transacción va a Kafka. El servicio de autorización lo lee inmediatamente para aprobar/rechazar (milisegundos). El servicio de detección de fraude lo analiza contra patrones (segundos). El servicio de notificaciones te envía una alerta (segundos). El sistema contable lo registra para tu estado de cuenta (minutos). El sistema de cumplimiento regulatorio lo archiva (batch, durante la noche). Cada sistema procesa el mismo evento a su propio ritmo para su propio propósito.
Escenario Real 4: Flujo de Pedidos en E-commerce Cuando haces clic en “Comprar ahora” en Amazon, un evento PedidoRealizado va a Kafka. El servicio de inventario reserva los artículos. El servicio de pagos cobra a tu tarjeta. El servicio de almacén pone en cola la preparación. El servicio de envíos calcula fechas de entrega. El servicio de email envía confirmación. El servicio de recomendaciones anota tu compra para futuras sugerencias. Todos estos servicios están desacoplados: simplemente escuchan a Kafka y hacen su trabajo.
Analogía
La Oficina Central de Correos para Eventos: Imagina una oficina de correos donde las cartas (eventos) se clasifican en buzones (topics) pero nunca se destruyen. Los suscriptores pueden recoger correo de cualquier buzón, leer tan rápido o lento como quieran, e incluso solicitar leer cartas de hace semanas. Los nuevos suscriptores pueden empezar a leer desde cualquier punto en la historia. La oficina de correos maneja millones de cartas por día y nunca pierde una.
El Servicio de Noticias Deportivas: Piensa en cómo funcionan las noticias deportivas: cada marcador, lesión, traspaso y declaración se publica en un servicio central (como AP o Reuters). Cada web deportiva, app, canal de TV y periódico se suscribe a este servicio y procesa las noticias según sus necesidades. Algunos reaccionan instantáneamente (marcadores en vivo), algunos curan contenido (programas de highlights), algunos archivan (bases de datos estadísticas). Kafka es este servicio de noticias para eventos de aplicación.
El Sistema de Agua de la Ciudad: El agua fluye desde un embalse (productores) a través de tuberías principales (topics de Kafka) hacia muchos edificios (consumidores). Cada edificio toma del mismo suministro de agua pero la usa diferente: los restaurantes cocinan con ella, las oficinas enfrían servidores, los hogares la beben. El sistema de agua maneja volúmenes masivos, y si un edificio tiene un problema de fontanería, los demás no se ven afectados. Kafka es la fontanería de datos para aplicaciones modernas.
El Panel de Salidas del Aeropuerto: En un aeropuerto, la información de vuelos (eventos) se publica en un sistema central. Los paneles de salidas la consumen y muestran. Las aerolíneas la usan para programación de tripulación. Los servicios de tierra la usan para asignación de puertas. Los pasajeros la consultan en la app. Una fuente de verdad, muchos consumidores con diferentes necesidades. Si un sistema consumidor se cae, los datos no se pierden: puede ponerse al día cuando se recupere.
Diagrama
flowchart TB
subgraph Productores
P1[Servicio Pedidos]
P2[Servicio Usuarios]
P3[Servicio Pagos]
end
subgraph Cluster Kafka
subgraph Topic: pedidos
Part0[Partición 0
offset: 0,1,2...]
Part1[Partición 1
offset: 0,1,2...]
Part2[Partición 2
offset: 0,1,2...]
end
end
subgraph Grupo Consumidores A
CG1A[Consumidor 1]
CG2A[Consumidor 2]
end
subgraph Grupo Consumidores B
CG1B[Consumidor 1]
end
P1 -->|key: user-123| Part0
P2 -->|key: user-456| Part1
P3 -->|key: user-789| Part2
Part0 --> CG1A
Part1 --> CG1A
Part2 --> CG2A
Part0 --> CG1B
Part1 --> CG1B
Part2 --> CG1B
subgraph Características
F1[Mensajes persistidos
por tiempo configurable]
F2[Cada grupo consumidor
rastrea su propio offset]
F3[Particiones permiten
procesamiento paralelo]
end
Ejemplo de Código
// Productor Kafka en Node.js
const { Kafka } = require('kafkajs');
const kafka = new Kafka({
clientId: 'api-service',
brokers: ['kafka1:9092', 'kafka2:9092']
});
const producer = kafka.producer();
await producer.connect();
await producer.send({
topic: 'api-events',
messages: [
{
key: 'user-123',
value: JSON.stringify({
event: 'api.request',
endpoint: '/users/123',
timestamp: Date.now()
})
}
]
});
Notas de Seguridad
Requisitos Principales:
- Habilita SSL/TLS para comunicación con brokers y conexiones de clientes.
- Implementa autenticación SASL (PLAIN, SCRAM o GSSAPI).
- Usa ACLs para controlar el acceso a topics por usuario/servicio.
Mejores Prácticas:
- Habilita cifrado en reposo para datos sensibles.
- Implementa autorización a nivel de topic.
- Monitoriza intentos de creación de topics no autorizados y exfiltración de datos..