Travailler avec Kafka en TypeScript : la bibliothèque KafkaJS et exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec Kafka en TypeScript à l'aide de KafkaJS



Apache Kafka est une plateforme distribuée de streaming de données, largement utilisée dans l'architecture de microservices, le traitement d'événements et l'analyse en temps réel. Lors du développement en TypeScript, l'une des bibliothèques les plus populaires pour interagir avec Kafka est KafkaJS. Elle offre une API asynchrone moderne avec un support complet de TypeScript, ce qui en fait un choix idéal pour créer des applications robustes et évolutives.



Qu'est-ce que KafkaJS ?

KafkaJS est une bibliothèque cliente pour Apache Kafka, écrite en JavaScript/TypeScript. Elle prend en charge toutes les opérations de base : envoi et lecture de messages, gestion des groupes de consommateurs, travail avec les sujets et les partitions. Grâce aux types intégrés, KafkaJS assure un typage strict et l'autocomplétion dans l'IDE, ce qui simplifie considérablement le développement et le débogage.



Installation de KafkaJS

Pour commencer, installez la bibliothèque via npm :

npm install kafkajs

Si vous utilisez TypeScript, aucun type supplémentaire n'est nécessaire — ils sont déjà inclus dans le paquet.



Configuration de base et connexion

La première étape consiste à créer une instance du client Kafka. Spécifiez l'identifiant du client et les adresses des courtiers :

import { Kafka } from 'kafkajs';

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

// Vérification de la connexionconst admin = kafka.admin();await admin.connect();console.log('Connecté à Kafka');await admin.disconnect();


Création d'un producteur (Producer)

Le producteur envoie des messages dans les sujets. KafkaJS prend en charge la création automatique de sujets lors de l'envoi (si activée dans la configuration du courtier).

import { Kafka, Partitioners } from 'kafkajs';

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

await producer.connect();

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

// Envoi de plusieurs messagesawait producer.send({ topic: 'orders', messages: [ { key: 'order-124', value: 'Message 2' }, { key: 'order-125', value: 'Message 3' } ]});

await producer.disconnect();


Création d'un consommateur (Consumer)

Le consommateur lit les messages des sujets. Il doit être abonné à un ou plusieurs sujets et enregistré dans un groupe de consommateurs (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(), }); },});


Travail avec les groupes de consommateurs

Les groupes de consommateurs permettent de répartir la charge entre plusieurs instances de consommateurs. Kafka attribue automatiquement les partitions du sujet à différents consommateurs au sein d'un même groupe. Si un consommateur tombe en panne, ses partitions sont redistribuées.

// Deux consommateurs dans le même groupe liront des partitions différentesconst consumer1 = kafka.consumer({ groupId: 'order-group' });const consumer2 = kafka.consumer({ groupId: 'order-group' });

// Chacun s'abonne au même sujetawait consumer1.subscribe({ topic: 'orders' });await consumer2.subscribe({ topic: 'orders' });


Gestion des erreurs et tentatives

Dans les applications réelles, il est important de gérer correctement les erreurs de connexion, les délais d'attente et les pannes. KafkaJS propose plusieurs mécanismes :

Recommendations