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