Kafka üzerinden json mesajı gönderme / üretme

0

Soru

Bu Kafka'yı ilk kez kullanıyorum ve kafka'yı. net ile kullanmayı planlıyorum

Bir etkinlik oluşturduğumda json'u mesaj olarak gönderip gönderemeyeceğimi bilmek istedim

Öğreticiyi takip ediyorum: https://developer.confluent.io/get-started/dotnet/#build-producer

Ayrıca, bu değerin bir modele eşlenmesinin bir yolu var mı, böylece değer/json yapısı her zaman bu modele bağlı mı

Örneğin: json değerimin olmasını istersem

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

Bulabildiğim örneklerin çoğu şu şekildedir:

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}");
        }
    }
}

Öğenin json yapısında bir sınıf olmasını istiyorum.

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

En iyi cevabı

0

bir etkinlik oluşturduğumda json'u mesaj olarak gönderip gönderemeyeceğimi bilmek istedim

Evet. Kafka baytları depolar ve baytları Seri hale Getiricileri kullanarak dönüştürür. Bir Yapımcı oluştururken, arama seçeneğiniz vardır SetValueSerializer.

Yerleşik serileştiricilerden bazıları şu adreste bulunabilir: https://github.com/confluentinc/confluent-kafka-dotnet/blob/master/src/Confluent.Kafka/Serializers.cs

Herhangi bir JSON model türünü genel olarak işlemek için kendinizinkini yazmanız gerekir.

Dizeler için utf8serializer'ı kullanırken, nesneyi model sınıfınızdan önceden seri hale getirmeniz ve ardından bunu değer olarak göndermeniz gerekir. Örneğinizde, değiştirirsiniz var item bazı seri nesne ile.

Bir C # nesnesini. net'te bir JSON dizesine nasıl dönüştürebilirim?

Model sınıflarını kullanırken, json'u el ile yazmaya başlayana veya Sözlük türlerini kullanana kadar verileriniz genellikle güçlü bir şekilde yazılır. Dış ileti doğrulaması istiyorsanız, Birleştirici Şema Kayıt Defteri jsonschema'yı destekleyen bir örnektir ve JsonSerializer -den confluent-dotnet-kafka proje bunu destekliyor.

2021-11-23 22:27:28

Sadece bir takip sorusu. İleti boyutu sınırı olabilir ve olayın boyutunun ne kadar yapımcı göndermeden önce kontrol edin ve eğer boyutu sınırı daha fazla ise, mesaj göndermek için izin vermez bir yol olduğunu biliyor musunuz?
Learn AspNet

Kafka'nın varsayılan 1MB ileti grubu sınırı vardır. Seri hale getirilmiş bayt dizisinin boyutunu alırsanız, bu, tek bir kayıt boyutunun yakın bir yaklaşımı olmalıdır (yine de kayıt üstbilgileri ve zaman damgaları gibi ek yük vardır)
OneCricketeer

Teşekkür ederim. Lütfen cevap verebilir misiniz: stackoverflow.com/questions/70097676/...
Learn AspNet

Diğer dillerde

Bu sayfa diğer dillerde

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