簡體   English   中英

字節 avro 類型不使用 kafka confluent GenericAvroDeserializer 反序列化

[英]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.BytesDeserializerGenericAvroDeserializer不是反序列化器具有以下類型的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM