Trabajo con Kafka en TypeScript: librería KafkaJS y ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con Kafka en TypeScript usando KafkaJS



Apache Kafka es una plataforma distribuida para transmisión de datos en flujo, ampliamente utilizada en arquitectura de microservicios, procesamiento de eventos y análisis en tiempo real. Al desarrollar en TypeScript, una de las librerías más populares para interactuar con Kafka es KafkaJS. Proporciona una API moderna y asíncrona con soporte completo para TypeScript, lo que la convierte en la elección ideal para crear aplicaciones robustas y escalables.



¿Qué es KafkaJS?

KafkaJS es una librería cliente para Apache Kafka, escrita en JavaScript/TypeScript. Soporta todas las operaciones principales: envío y lectura de mensajes, gestión de grupos de consumidores, trabajo con tópicos y particiones. Gracias a los tipos integrados, KafkaJS proporciona tipado estricto y autocompletado en el IDE, lo que simplifica enormemente el desarrollo y la depuración.



Instalación de KafkaJS

Para empezar, instale la librería mediante npm:

npm install kafkajs

Si usa TypeScript, no se requieren tipos adicionales, ya están incluidos en el paquete.



Configuración básica y conexión

El primer paso es crear una instancia del cliente Kafka. Especifique el identificador del cliente y las direcciones de los brokers:

import { Kafka } from 'kafkajs';

const kafka = new Kafka({ clientId: 'my-app', brokers: ['localhost:9092']});

// Verificar conexiónconst admin = kafka.admin();await admin.connect();console.log('Connected to Kafka');await admin.disconnect();


Creación de un productor (Producer)

El productor envía mensajes a los tópicos. KafkaJS admite la creación automática de tópicos al enviar (si está habilitado en la configuración del broker).

import { Kafka, Partitioners } from 'kafkajs';

const producer = kafka.producer({ createPartitioner: Partitioners.DefaultPartitioner});

await producer.connect();

// Enviar un solo mensajeawait producer.send({ topic: 'orders', messages: [ { key: 'order-123', value: JSON.stringify({ userId: 1, amount: 250 }) } ]});

// Enviar varios mensajesawait producer.send({ topic: 'orders', messages: [ { key: 'order-124', value: 'Message 2' }, { key: 'order-125', value: 'Message 3' } ]});

await producer.disconnect();


Creación de un consumidor (Consumer)

El consumidor lee mensajes de los tópicos. Debe suscribirse a uno o varios tópicos y estar registrado en un grupo de consumidores (consumer group).

const consumer = kafka.consumer({ groupId: 'order-group' });

await consumer.connect();await consumer.subscribe({ topic: 'orders', fromBeginning: true });

await consumer.run({ eachMessage: async ({ topic, partition, message }) => { console.log({ partition, offset: message.offset, key: message.key?.toString(), value: message.value?.toString(), }); },});


Trabajo con grupos de consumidores

Los grupos de consumidores permiten distribuir la carga entre varias instancias de consumidor. Kafka asigna automáticamente las particiones del tópico a diferentes consumidores dentro de un mismo grupo. Si un consumidor falla, sus particiones se redistribuyen.

// Dos consumidores en el mismo grupo leerán diferentes particionesconst consumer1 = kafka.consumer({ groupId: 'order-group' });const consumer2 = kafka.consumer({ groupId: 'order-group' });

// Cada uno se suscribe al mismo tópicoawait consumer1.subscribe({ topic: 'orders' });await consumer2.subscribe({ topic: 'orders' });


Manejo de errores y reintentos

En aplicaciones reales, es importante manejar correctamente errores de conexión, tiempos de espera y fallos. KafkaJS proporciona varios mecanismos:

Recommendations