如何在avro架构中定义byte []和LocalDateTime?

时间:2016-04-14 05:14:13

标签: java apache-kafka avro

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

private LocalDateTime timestamp; 
private byte[] content; 

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

 {
            "name": "content", "type": "bytes"
         },

类投射异常[1]

  

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

1 个答案:

答案 0 :(得分:1)

对于byte [],您可以使用bytes原语作为miguno说。对于LocalDateTime对象,您可以将其存储为长基元,方法是将其转换为毫秒。 Avro还支持逻辑类型,您可以使用它直接反序列化为不属于基本类型的内容。有关详细信息,请参阅here以及与您希望实现的类似的示例。