我们使用schema registry将json记录从nifi推送到kakfa主题。
架构:
"type": "record",
"name": "Name",
"fields": [{
"name": "latitude",
"type": [
"null",
"float"
]
},
{
"name": "longitude",
"type": [
"null",
"float"
]
}]
例1-
输入记录: {"import_latitude":38.090925000000,"import_longitude":8.677760000000}
输出记录(Kafka主题): {"latitude":{"float":38.090923},"longitude":{"float":8.67776}}
38.090925000000 --> 38.090923
例2-
输入记录: {"import_latitude":38.090926000000,"import_longitude":8.677760000000}
输出记录(Kafka主题): {"latitude":{"float":38.090927},"longitude":{"float":8.67776}}
Kafka的avro模式有问题吗?
1条答案
按热度按时间to94eoyn1#
看起来你得到了预期的结果!这与avro无关,但与32位浮点精度(即6/7有效位)有关。
无论您如何看待java,都可以在java中看到这一点
float
:看起来json地理坐标有8或14个有效数字。
如果你需要,你可以跳到一个avro
DOUBLE
(15/16有效数字)而不是FLOAT
,请记住,无论您分配多少位,一些十进制文本表示法都不能用二进制精确表示。在许多方面,用浮点表示long/lat就足够精确了,而用double表示就太过分了。