Я создал схему Avro для записей, которые мы публикуем в нашей теме Kafka.Наша фактическая схема записи Kafka более сложная, но я просто приложил соответствующие части для краткости.У нас есть более одного вложенного подкласса в записи, но по какой-то причине я получаю следующее исключение при попытке опубликовать запись (имена пакетов скрыты):
java.lang.ClassCastException: aaa.bbb.ccc.ddd.Amount cannot be cast to org.apache.avro.generic.IndexedRecord
class KafkaRecord {
private Amount amount;
class Amount {
String currency;
long value;
}
}
И это текущее подмножество из схемы Avro, которую я определил.
{
"type" : "record",
"name" : "KafkaRecord",
"namespace" : "com.company.department",
"fields" : [ {
"name" : "amount",
"type" : {
"type" : "record",
"name" : "Amount",
"namespace" : "aaa.bbb.ccc.ddd",
"fields" : [ {
"name" : "value",
"type" : "long"
}, {
"name" : "currency",
"type" : "string"
} ]
}
}
}
Наше JSON-представление объекта (KafkaRecord) выглядит так:
{
"amount": {
"currency": "GBP",
"value": 12345
}
}
Iне могу понять, почему Avro не нравится эта вложенная запись, и я бы предпочел не разбирать эти вложенные классы, так как это сделало бы запись JSON очень трудной для чтения и сложной для управления классами.
Если кто-нибудь сможет указать, что я здесь делаю неправильно, это было бы здорово!