将Avro十进制解码为字节数组字符串



我在Avro消息中使用Kafka。我的一个字段定义如下:

{ 
"name": "a_number", 
"type": "bytes", 
"logicalType": "decimal", 
"precision": 4, 
"scale": 4 
}

使用Avro控制台消费者,我看到这样的消息:

{"a_number": "tu0000°"}

我希望它等于59

据推测,字节数组应该是数字的二次互补。我尝试过使用Python的struct模块对其进行解码,但我得到的值没有任何意义:

bs = 'tu0000°'.encode('utf8')    # b'tx00xc2xb0'
struct.unpack('>l', bs)[0] / 1e4   # 15104.4784

如何验证消息?我能以某种方式解码字符串吗,或者Avro控制台消费者已经损坏了它?

你似乎正在艰难地完成这项工作。How to extract schema for avro file in python建议的方法是使用:

reader = avro.datafile.DataFileReader(open('filename.avro',"rb"),avro.io.DatumReader())
schema = reader.meta

在调试器中迈出一步,看看阅读器如何解码你的消息,应该会让你更接近于组装一个"原始"的手工解码。