[英]Bytes avro type not deserializing with kafka confluent GenericAvroDeserializer
我正在使用io.confluent.kafka.streams.serdes.avro.GenericAvroDeserializer
反序列化 Kafka Message<Bytes>
並將 kafka“ value.deserializer
”配置為org.apache.kafka.common.serialization.BytesDeserializer
但GenericAvroDeserializer
不是反序列化器具有以下類型的 avro 有效負載
{
"name": "totalAmount",
"type": [
"null",
{
"logicalType": "decimal",
"precision": 13,
"scale": 2,
"type": "bytes"
}
]
}
屬性“ amount
”的結果反序列化負載如下
"amount": {"bytes": "\u0001C"}
我將 AbstractKafkaAvroDeserializer 的內部實現視為
if (schema.getType().equals(Type.BYTES)) {
byte[] bytes = new byte[length];
buffer.get(bytes, 0, length);
result = bytes;
}
有什么方法可以使用io.confluent.kafka.streams.serdes.avro.GenericAvroDeserializer
將 avro 類型作為字節正確反序列化有效負載
我設法使用這種方式將這種字節反序列化為十進制:
LogicalTypes.Decimal decimalType = LogicalTypes.decimal(precision, scale);
BigDecimal bigDecimal = new Conversion.DecimalConversion().fromBytes((ByteBuffer) decimalInBytes, schema, decimalType);
當我們從有效負載的 GenericRecord 實例中執行 get("totalAmount") 時,這個 decimalInBytes 實際上來自 GenericRecord。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.