Можно ли преобразовать сообщения Avro с помощью реестра схем в классы сценариев scala?

При создании или использовании сообщений в kafka вместе со схемой Avro, хранящейся в реестре схем, возможно ли автоматическое преобразование сообщений в классы сценария scala?

val props = new Properties()
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, classOf[KafkaAvroSerializer].getName)
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, classOf[KafkaAvroSerializer].getName)
props.put(AbstractKafkaAvroSerDeConfig.SCHEMA_REGISTRY_URL_CONFIG, "http://localhost:8081")
...

val producer = new KafkaProducer[String, User](props)
val user = User(123, "my-name")
producer.send(new ProducerRecord[String, User]("my-topic", user.id, user)

Сейчас, когда я это делаю, я получаю сообщение об ошибке:

java.lang.IllegalArgumentException: неподдерживаемый тип Avro. Поддерживаемые типы: null, Boolean, Integer, Long, Float, Double, String, byte [] и IndexedRecord.

Мой объект User - это просто класс case, например:

case class User(id: Int, name: String)

Я считаю, что мне нужно использовать какой-то генератор классов Avro для java, чтобы он правильно сериализовал / десериализовался, верно?

Есть ли способ пропустить этот шаг и каким-то образом автоматически сопоставить его с классом scala case с использованием Avro4s или чего-то еще?

Какие у меня варианты?

В идеале я хочу хранить только свои схемы в реестре схем.


person Blankman    schedule 17.03.2021    source источник


Ответы (1)


По умолчанию классы case не являются подклассами Avro.

Вы можете использовать такие проекты, как avro4s, для создания и сопоставления схем Avro с классами, но, насколько мне известно, это невозможно пропустить.

Если вы хотите пропустить создание класса, используйте GenericRecord

person OneCricketeer    schedule 17.03.2021