如何在 avro 模式中定义 byte[] 和 LocalDateTime?

Rat*_*tha 6 java avro apache-kafka

我是 Avro 架构的新手。我尝试使用 kafka 发布/使用我的 java 对象。我有 java bean 类,其中包含带有 LocalDateTime 和 byte[] 的字段。我如何在 avro 模式原始类型中定义两者?我可以用于 LocalDateTime 的最佳原始类型是什么?

private LocalDateTime timestamp; 
private byte[] content; 
Run Code Online (Sandbox Code Playgroud)

我定义了这样的东西;但得到

 {
            "name": "content", "type": "bytes"
         },
Run Code Online (Sandbox Code Playgroud)

类转换异常[1]

[1] 引起:java.lang.ClassCastException:[B 无法在 org.apache.avro.generic.GenericDatumWriter.writeBytes(GenericDatumWriter.java:219) at org.apache.avro.generic 处强制转换为 java.nio.ByteBuffer .GenericDatumWriter.write(GenericDatumWriter.java:77) at org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:114) at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:104) at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:66) 在 org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:58)

小智 2

对于 byte[],您可以使用 bytes 原语,如 miguno 所说。对于 LocalDateTime 对象,您可以将其转换为毫秒,将其存储为 long 原语。Avro 还支持逻辑类型,您可以使用逻辑类型直接反序列化为不属于基本类型的内容。请参阅此处了解更多详细信息以及与您想要实现的目标类似的示例。