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 kafkajsSi 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 :
- Retry — tentatives automatiques en cas d'erreurs temporaires.
Aussi dans la bibliothèque
Travailler avec XML en Go (Golang) : la bibliothèque standard encoding/xml
Génération de rapports PDF en PHP : aperçu des bibliothèques et exemples de code
Travailler avec les dates en TypeScript : bibliothèques populaires et exemples
Guide complet Swagger-PHP pour PHP : tutoriel et exemples
Composer pour PHP : guide complet avec exemples