Предполагая, что вы используете Confluent Schema Regsitry, вы можете использовать их .NET-клиент 1
https://github.com/confluentinc/confluent-kafka-dotnet
Скопировано из папки примеров
using (var serdeProvider = new AvroSerdeProvider(avroConfig))
using (var producer = new Producer<string, GenericRecord>(producerConfig, serdeProvider.GetSerializerGenerator<string>(), serdeProvider.GetSerializerGenerator<GenericRecord>()))
{
Console.WriteLine($"{producer.Name} producing on {topicName}. Enter user names, q to exit.");
int i = 0;
string text;
while ((text = Console.ReadLine()) != "q")
{
var record = new GenericRecord(s);
record.Add("name", text);
record.Add("favorite_number", i++);
record.Add("favorite_color", "blue");
producer
.ProduceAsync(topicName, new Message<string, GenericRecord> { Key = text, Value = record })
.ContinueWith(task => task.IsFaulted
? $"error producing message: {task.Exception.Message}"
: $"produced to: {task.Result.TopicPartitionOffset}");
}
}
cts.Cancel();
}
Где, в вашем случае, обновление record.Add
использует соответственно
Однако , так как у вас есть класс, следовательно, вы должны попытаться использовать SpecificRecord , а не сериализацию туда-сюда между Avro и классом .NET через GenericRecord.См. Раздел README в инструменте AvroGen для примеров этого
1.Мне неизвестна альтернативная библиотека .NET