【问题标题】:How to define byte[] and LocalDateTime in avro schema?如何在 avro 模式中定义 byte[] 和 LocalDateTime?
【发布时间】:2016-08-05 11:46:18
【问题描述】:

我是 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 在 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)

【问题讨论】:

  • byte[] 的 Avro 的“字节”原语怎么样? avro.apache.org/docs/current/spec.html#schema_primitive
  • 可以使用 Avro 字节存储 byte[] 而不丢失信息吗?我尝试了 base64 编码并使用了有效的 avro 字符串数据类型,想知道它是否可以在没有编码的情况下工作。我正在尝试将 png 图像存储在 avro 的一个字段中。如果有一个例子说明如何做,那就太好了。
  • 知道了。已使用 ByteBuffer 将 byte[] 存储在 avro 中。 ByteBuffer.wrap 将帮助您完成从 byte[] 到 ByteBuffer 的转换。虽然不确定编码部分。

标签: java apache-kafka avro


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 2023-01-27
    • 2018-01-02
    相关资源
    最近更新 更多