Envoyer/produire json message par le biais de kafka

0

La question

C'est ma première fois à l'aide de Kafka et je suis à la planification de l'utilisation de kafka avec .net

Je voulais savoir si je peux envoyer JSON comme un message quand je produisant un événement

Je suis le tutoriel: https://developer.confluent.io/get-started/dotnet/#build-producer

Aussi, est-il un moyen pour que la valeur soit mappé à un modèle de sorte que la valeur/structure json est toujours liée à ce modèle

Ainsi, par exemple: si je veux que mon json de la valeur de la

{
  "customerName":"anything",
  "eventType":"one-of-three-enums",
  "columnsChanged": "string value or something"
}

La plupart des exemples que je peux trouver sont comme ceci:

using Confluent.Kafka;
using System;
using Microsoft.Extensions.Configuration;

class Producer {
    static void Main(string[] args)
    {
        if (args.Length != 1) {
            Console.WriteLine("Please provide the configuration file path as a command line argument");
        }

        IConfiguration configuration = new ConfigurationBuilder()
            .AddIniFile(args[0])
            .Build();

        const string topic = "purchases";

        string[] users = { "eabara", "jsmith", "sgarcia", "jbernard", "htanaka", "awalther" };
        string[] items = { "book", "alarm clock", "t-shirts", "gift card", "batteries" };

        using (var producer = new ProducerBuilder<string, string>(
            configuration.AsEnumerable()).Build())
        {
            var numProduced = 0;
            const int numMessages = 10;
            for (int i = 0; i < numMessages; ++i)
            {
                Random rnd = new Random();
                var user = users[rnd.Next(users.Length)];
                var item = items[rnd.Next(items.Length)];

                producer.Produce(topic, new Message<string, string> { Key = user, Value = item },
                    (deliveryReport) =>
                    {
                        if (deliveryReport.Error.Code != ErrorCode.NoError) {
                            Console.WriteLine($"Failed to deliver message: {deliveryReport.Error.Reason}");
                        }
                        else {
                            Console.WriteLine($"Produced event to topic {topic}: key = {user,-10} value = {item}");
                            numProduced += 1;
                        }
                    });
            }

            producer.Flush(TimeSpan.FromSeconds(10));
            Console.WriteLine($"{numProduced} messages were produced to topic {topic}");
        }
    }
}

Je voudrais l'élément à une classe dans la structure json.

.net apache-kafka asp.net-core
2021-11-23 21:53:21
1

La meilleure réponse

0

je voulais savoir si je peux envoyer JSON comme un message quand je produisant un événement

Oui. Kafka stocke les octets et les convertit les octets à l'aide de Sérialiseurs. Lors de la construction d'un Producteur, vous avez l'option d'appeler SetValueSerializer.

Certains de sérialiseurs peut être trouvé à https://github.com/confluentinc/confluent-kafka-dotnet/blob/master/src/Confluent.Kafka/Serializers.cs

Vous devez écrire votre propre générique de gérer tout JSON types de modèle.

Lors de l'utilisation de la Utf8Serializer pour les chaînes, vous aurez besoin de pré-sérialiser l'objet de votre modèle de classe, puis de l'envoyer qu'en tant que valeur. Dans votre exemple, vous souhaitez remplacer var item avec certains objets sérialisés.

Comment puis-je transformer un objet de C# dans une chaîne JSON dans .NET?

Lors de l'utilisation de classes du modèle, vos données seront généralement fortement typées jusqu'à ce que vous commencez l'écriture manuelle de l'JSON ou de l'utilisation du Dictionnaire types. Si vous voulais externe de message de validation, le Confluent de Registre Schéma est un exemple qui prend en charge JSONSchema et la JsonSerializer à partir de confluent-dotnet-kafka le projet prend en charge cette.

2021-11-23 22:27:28

Juste une question de suivi. Savez-vous si je peux limiter la taille des messages et est-il un moyen pour les producteurs de vérifier ce qui est de la taille de l'événement avant l'envoi et ne permettent pas d'envoyer le message si la taille est plus que la limite?
Learn AspNet

Kafka a une limite par défaut de 1 mo de lots de message. Si vous obtenez la taille de la sérialisé tableau d'octets, qui devrait être une approximation de l'enregistrement d'un individu de taille (il y a les charges supplémentaires tels que les en-têtes d'enregistrement et d'horodatage, tout de même)
OneCricketeer

Je vous remercie. Pouvez-vous s'il vous plaît répondre: stackoverflow.com/questions/70097676/...
Learn AspNet

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................