1

我有 Java POJO

class LibraryEvent {
   String name ;
   int id ;
   Book book;
 
}

class Book{
  String name;
  String author ;
}

如何将其转换为 avro 模式,然后以编程方式进行 avro 记录?有没有办法通过使用注释在 out 文件夹中自动生成 avro 模式和类来做到这一点?我试图避免将模式生成为字符串,然后显式填充 avro 记录。

4

1 回答 1

0

避免将模式生成为字符串

您可以使用它SchemaBuilder来避免该问题,并为您提供一种类型安全的方式来以编程方式定义模式。


如果没有从 Java 开始的特定原因(可以通过@AvroEncodeannotation或 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 序列化器一起使用,那么他们有一个关于使用反射的部分

于 2021-08-20T00:13:00.457 回答