Trabalhando com Kafka em TypeScript: biblioteca KafkaJS e exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com Kafka em TypeScript usando KafkaJS



Apache Kafka é uma plataforma distribuída para streaming de dados, amplamente utilizada em arquitetura de microsserviços, processamento de eventos e análise em tempo real. Ao desenvolver em TypeScript, uma das bibliotecas mais populares para interagir com Kafka é o KafkaJS. Ela fornece uma API moderna e assíncrona com suporte completo a TypeScript, tornando-a a escolha ideal para criar aplicações robustas e escaláveis.



O que é KafkaJS?

KafkaJS é uma biblioteca cliente para Apache Kafka, escrita em JavaScript/TypeScript. Ela suporta todas as operações principais: envio e leitura de mensagens, gerenciamento de grupos de consumidores, trabalho com tópicos e partições. Graças aos tipos integrados, o KafkaJS oferece tipagem estrita e autocompletar na IDE, o que simplifica significativamente o desenvolvimento e a depuração.



Instalação do KafkaJS

Para começar, instale a biblioteca via npm:

npm install kafkajs

Se você usa TypeScript, tipos adicionais não são necessários — eles já estão incluídos no pacote.



Configuração básica e conexão

O primeiro passo é criar uma instância do cliente Kafka. Especifique o ID do cliente e os endereços dos brokers:

import { Kafka } from 'kafkajs';

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

// Verificar conexãoconst admin = kafka.admin();await admin.connect();console.log('Conectado ao Kafka');await admin.disconnect();


Criando um produtor (Producer)

O produtor envia mensagens para tópicos. O KafkaJS suporta a criação automática de tópicos ao enviar (se habilitado na configuração do broker).

import { Kafka, Partitioners } from 'kafkajs';

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

await producer.connect();

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

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

await producer.disconnect();


Criando um consumidor (Consumer)

O consumidor lê mensagens dos tópicos. Ele deve estar inscrito em um ou mais tópicos e registrado em um 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(), }); },});


Trabalhando com grupos de consumidores

Grupos de consumidores permitem distribuir a carga entre várias instâncias de consumidores. O Kafka atribui automaticamente partições de tópicos a diferentes consumidores dentro do mesmo grupo. Se um consumidor falhar, suas partições são redistribuídas.

// Dois consumidores no mesmo grupo lerão partições diferentesconst consumer1 = kafka.consumer({ groupId: 'order-group' });const consumer2 = kafka.consumer({ groupId: 'order-group' });

// Cada um se inscreve no mesmo tópicoawait consumer1.subscribe({ topic: 'orders' });await consumer2.subscribe({ topic: 'orders' });


Tratamento de erros e novas tentativas

Em aplicações reais, é importante tratar corretamente erros de conexão, timeouts e falhas. O KafkaJS oferece vários mecanismos:

Recommendations