当生成或使用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类型。支持的类型为空、布尔、整数、长、浮点、双、字符串、byte[]和IndexedRecord
我的用户对象只是一个案例类,类似于:
case class User(id: Int, name: String)我认为我需要使用某种形式的Avro来实现java类生成器,这样它就可以正确地序列化/反序列化,对吗?
有什么方法可以跳过这一步,让它以某种方式使用Avro4s或其他工具自动映射到scala案例类?
我有什么选择?
我希望只将我的模式存储在模式-注册表中,理想情况下也是这样。
发布于 2021-03-17 22:14:13
默认情况下,case类不是Avro子类。
您可以使用像avro4s这样的项目来生成Avro模式并将其映射到类,但据我所知,没有办法跳过它。
如果要跳过类生成,请使用GenericRecord
https://stackoverflow.com/questions/66681592
复制相似问题