Невозможно десериализовать тему Кафки в потоке с помощью сериализации avro

У меня есть проект Quarkus и производитель Kafka, у которого есть

SpecificAvroSerializer<MyObject>

который успешно пишет в тему, и я вижу сообщение ок

Затем я прикрепляю поток к этой теме с помощью

  SpecificAvroSerde<MyObject> myObject = new SpecificAvroSerde<>(schemaRegistry);

Но во время обработки сообщения внутри потока я все равно получаю

java.lang.ClassCastException: class org.apache.avro.generic.GenericData$Record cannot be cast to class org.apache.avro.specific.SpecificRecord (org.apache.avro.generic.GenericData$Record and org.apache.avro.specific.SpecificRecord are in unnamed module of loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @3c0a50da)

похоже, возникла проблема с QuarkusClassLoader при попытке привести результат к SpecificAvroSerde

Это библиотека Avro, в которой говорится, что вы пытаетесь понизить значение, а не Quarkus... В десериализаторе есть свойство, которое вы должны явно установить для конкретного avro-ридера.

OneCricketeer 26.09.2023 18:27

@OneCricketeer какой объект?

simonC 26.09.2023 19:32

Точно забыл, но это что-то вроде value.deserializer.specific.avro.reader=true, по крайней мере для десериализатора Confluent docs.confluent.io/platform/current/schema-registry/fundament‌​als/…

OneCricketeer 26.09.2023 22:43

@OneCricketeer ... это сработало ... можешь ли ты написать ответ, чтобы я мог принять правильное решение

simonC 27.09.2023 10:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка говорит о том, что GenericRecord нельзя преобразовать в более конкретный тип (SpecificRecord).

Поведение Confluent Deserializer по умолчанию заключается в использовании GenericRecord, и вам необходимо явно указать ему использовать типы SpecificRecord (или ReflectDatum) Avro.

value.deserializer.specific.avro.reader=true

https://docs.confluent.io/platform/current/schema-registry/fundamentals/serdes-develop/serdes-avro.html

Другие вопросы по теме