Используя библиотеку Confluent.Kafka
, я создал потребителя. NET Kafka, который считывает данные из топи c и десериализует данные Avro в. NET классы.
Теперь я пытаюсь сериализовать его обратно в формат Avro и отправить его в BigQuery. Я ожидаю, что BigQuery автоматически сгенерирует структуру таблицы на основе схемы Avro.
Я настроил свой потребительский десериализатор следующим образом (AvroGeneratedDto -. NET класс, который представляет схему Avro):
var builder = new ConsumerBuilder<string, AvroGeneratedDto>(
consumerConfig
).SetValueDeserializer(
new SyncOverAsyncDeserializer<AvroGeneratedDto>(
new AvroDeserializer<AvroGeneratedDto>(_configProvider.SchemaRegistryClient)));
It десериализует данные в AvroGeneratedDto OK.
Теперь я пытаюсь сериализовать их обратно, используя схему, хранящуюся в реестре схем:
var serializer = new AvroSerializer<AvroGeneratedDto>(_configProvider.SchemaRegistryClient);
var avroSerialized = await serializer.SerializeAsync(item.Value, new SerializationContext(MessageComponentType.Value, topic: "MyTopic"));
И загрузить их в BigQuery:
MemoryStream avroStream = new MemoryStream(avroSerialized);
var job = await _bigQueryClient.UploadAvroAsync(projectId: projectId, datasetId: ArtsdatasetId, tableId: TableId, schema: null, input: avroStream, options: options);
Однако из BigQuery я получаю следующее:
" Ошибка при чтении данных, сообщение об ошибке: Библиотеке Apache Avro не удалось проанализировать заголовок со следующей ошибкой: Неверный файл данных . Волхвы c не совпадают".
В чем здесь проблема?