Bibliothèque Confluent.Kafka pour travailler avec Apache Kafka en C# (.NET)
\n\nApache Kafka est une plateforme distribuée de streaming de données, devenue un standard dans la construction d'architectures orientées événements et de microservices. Pour les développeurs C# (.NET), la bibliothèque la plus populaire et la mieux maintenue est Confluent.Kafka — le client officiel de la société Confluent, construit sur la base du client C haute performance librdkafka. Dans cet article, nous allons détailler comment installer la bibliothèque, créer un producteur et un consommateur, et examiner les meilleures pratiques.
\n\nInstallation de Confluent.Kafka
\nPour commencer, ajoutez le paquet à votre projet via NuGet :
\ndotnet add package Confluent.Kafka\nOu via la console du gestionnaire de paquets :
\nInstall-Package Confluent.Kafka\n\nConfiguration de base du producteur (Producer)
\nLe producteur envoie des messages vers les topics Kafka. Voici un exemple simple :
\nusing Confluent.Kafka;\n\nvar config = new ProducerConfig\n{\n BootstrapServers = "localhost:9092"\n};\n\nusing (var producer = new ProducerBuilder<string, string>(config).Build())\n{\n var message = new Message<string, string>\n {\n Key = "user_123",\n Value = "Bonjour, Kafka!"\n };\n\n var deliveryReport = await producer.ProduceAsync("my-topic", message);\n Console.WriteLine($"Message envoyé. Partition : {deliveryReport.Partition}, Offset : {deliveryReport.Offset}");\n}\n\nPoints clés :
\n- \n
- BootstrapServers — adresse d'un ou plusieurs brokers Kafka. \n
ProduceAsync— envoi asynchrone avec attente d'accusé de réception. \n - Key permet de garantir l'ordre des messages pour une même clé. \n
Producteur avec sérialisation d'objets complexes
\nIl est souvent nécessaire d'envoyer non pas des chaînes, mais du JSON ou des données binaires. Utilisez un sérialiseur personnalisé ou la bibliothèque Newtonsoft.Json :
\nusing System.Text.Json;\nusing Confluent.Kafka;\n\nvar config = new ProducerConfig { BootstrapServers = "localhost:9092" };\n\nvar producer = new ProducerBuilder<string, Order>(config)\n .SetValueSerializer(new JsonSerializer<Order>())\n .Build();\n\nvar order = new Order { Id = 1, Amount = 150.50m, Customer = "Ivan" };\nawait producer.ProduceAsync("orders", new Message<string, Order> { Key = order.Id.ToString(), Value = order });\n\npublic class Order\n{\n public int Id { get; set; }\n public decimal Amount { get; set; }\n public string Customer { get; set; }\n}\n\npublic class JsonSerializer<T> : ISerializer<T>\n{\n public byte[] Serialize(T data, SerializationContext context) =>\n JsonSerializer.SerializeToUtf8Bytes(data);\n}\n\nConfiguration du consommateur (Consumer)
\nLe consommateur lit les messages d'un ou plusieurs topics. Exemple d'abonnement et de traitement :
\nusing Confluent.Kafka;\n\nvar config = new ConsumerConfig\n{\n BootstrapServers = "localhost:9092",\n GroupId = "my-consumer-group",\n AutoOffsetReset = AutoOffsetReset.Earliest\n};\n\nusing (var consumer = new ConsumerBuilder<string, string>(config).Build())\n{\n consumer.Subscribe("my-topic");\n\n CancellationTokenSource cts = new CancellationTokenSource();\n Console.CancelKeyPress += (_, e) => { e.Cancel = true; cts.Cancel(); };\n\n try\n {\n while (true)\n {\n var consumeResult = consumer.Consume(cts.Token);\n Console.WriteLine($"Reçu : Key={consumeResult.Message.Key}, Value={consumeResult.Message.Value}");\n }\n }\n catch (OperationCanceledException)\n {\n consumer.Close();\n }\n}\n\nParamètres de configuration importants :
\n- \n
- GroupId — identifiant du groupe de consommateurs. Kafka distribue les partitions entre
Aussi dans la bibliothèque
StoreKit Swift : guide complet avec exemples
Sérialisation d'objets en C# (.NET) : guide complet
Générateur de QR codes en TypeScript : la bibliothèque qrcode et son utilisation