具有嵌套类型的 Avro 到 Scala case class 注释

Avro to Scala case class annotation with nested types

我目前正在使用 Avro 序列化 Kafka 上的消息,并使用 this annotation method 使用一些自定义 Scala 代码进行处理。以下是带有嵌套记录的基本模式:

{
  "type": "record",
  "name": "TestMessage",
  "namespace": "",
  "fields": [
    {"name": "message", "type": "string"},
    {
      "name": "metaData",
      "type": {
        "type": "record",
        "name": "MetaData",
        "fields": [
          {"name": "source", "type": "string"},
          {"name": "timestamp", "type": "string"}
        ]
      }
    }
  ]
}

还有注释,我相信应该看起来很简单:

@AvroTypeProvider("schema-common/TestMessage.avsc")
@AvroRecord
case class TestMessage()

消息本身类似于以下内容:

{"message":"hello 1",
 "metaData":{
   "source":"postman",
   "timestamp":"123456789"
 }
}

然而,当我记录 TestMessage 类型或在控制台的 Kafka 消费者中查看输出时,我所看到的是:

{"message":"hello 1"}

而不是我添加的用于捕获元数据的子类型。我有什么想念的吗?让我知道是否可以提供更多信息 - 谢谢!

现在应该在 Scala 2.11 的 0.10.3 版本和 Scala 2.10

0.4.5 版本中修复此问题

请记住,对于架构中的每种记录类型,都需要有一个案例 class 来表示它。对于 Scala 2.10,嵌套最多的 classes 必须首先定义。安全定义如下:

@AvroTypeProvider("schema-common/TestMessage.avsc")
@AvroRecord
case class MetaData()

@AvroTypeProvider("schema-common/TestMessage.avsc")
@AvroRecord
case class TestMessage()