我有 Java POJO
class LibraryEvent {
String name ;
int id ;
Book book;
}
class Book{
String name;
String author ;
}
如何将其转换为 avro 模式,然后以编程方式进行 avro 记录?有没有办法通过使用注释在 out 文件夹中自动生成 avro 模式和类来做到这一点?我试图避免将模式生成为字符串,然后显式填充 avro 记录。
我有 Java POJO
class LibraryEvent {
String name ;
int id ;
Book book;
}
class Book{
String name;
String author ;
}
如何将其转换为 avro 模式,然后以编程方式进行 avro 记录?有没有办法通过使用注释在 out 文件夹中自动生成 avro 模式和类来做到这一点?我试图避免将模式生成为字符串,然后显式填充 avro 记录。
避免将模式生成为字符串
您可以使用它SchemaBuilder
来避免该问题,并为您提供一种类型安全的方式来以编程方式定义模式。
如果没有从 Java 开始的特定原因(可以通过@AvroEncode
annotation或 ReflectData来完成),那么从 IDL 文件开始会容易得多
这些 POJO 类的直接翻译如下所示
protocol EventProtocol {
record Book {
union {null, string} name;
union {null, string} author;
}
record LibraryEvent {
union {null, string} name;
int id;
union {null, Book} book;
}
}
然后文档中提到的 Maven 插件将创建这两个类,其中每个类中嵌入的 AVSC 模式作为静态字段。
您仍然需要“显式填充记录”,因为这只是创建类,不调用任何 setter 方法
如果您仍然反对模式优先,并且如果您将 Kafka 与 Confluent Avro 序列化器一起使用,那么他们有一个关于使用反射的部分