ApacheKafka—当我们将avro兼容模式设置为向后并将其更改为完全可传递时,为什么avro兼容模式不尊重传递性

nxowjjhe  于 2021-06-04  发布在  Kafka
关注(0)|答案(0)|浏览(192)

我遇到了一个奇怪的情况,在avro中,一旦从向后转换为完全可传递,就无法检查与所有以前版本的兼容性。
情况:初始兼容模式是完全可传递的,但我在模式中犯了一个错误。为了发布,我将兼容模式改为backward,发布了schema,后来又将其改为完全可传递,但之后avro不会检查与所有注册版本的兼容性。我们正在使用这个黑客获得通过编码错误,但想更好地理解它。
兼容性:完全可传递
初始架构v1
'{“type”:“record”,“namespace”:“kafka avro”,“name”:“empdetails”,“fields”:[{“name”:“experience”,“type”:[“int”,“null”]},{“name”:“age”,“type”:[“int”,“null”]}]}
具有新字段fname的架构v2
'{“type”:“record”,“namespace”:“kafka avro”,“name”:“empdetails”,“fields”:[{“name”:“fname”,“type”:“string”,“default”:“vijay”},{“name”:“experience”,“type”:[“int”,“null”},{“name”:“age”,“type”:[“int”,“null”],“default”:“0}}
数据
{“fname”:“vijay”,“experience”:{“int”:1},“age”:{“int”:0}
最初失败,并将兼容性更改为向后和已发布的架构fname(无默认值)
'{“type”:“record”,“namespace”:“kafka avro”,“name”:“empdetails”,“fields”:[{“name”:“fname”,“type”:“string”},{“name”:“experience”,“type”:[“int”,“null”},{“name”:“age”,“type”:[“int”,“null”],“default”:0}}
{“fname”:“vijay”,“experience”:{“int”:1},“age”:{“int”:0}
现在呢
兼容性:完全可传递
我现在可以发布没有fname默认值的消息了。我预计这将失败,因为不是所有注册的版本都不兼容
'{“type”:“record”,“namespace”:“kafka avro”,“name”:“empdetails”,“fields”:[{“name”:“fname”,“type”:“string”},{“name”:“experience”,“type”:[“int”,“null”},{“name”:“age”,“type”:[“int”,“null”],“default”:0}}
{“fname”:“vijay”,“experience”:{“int”:1},“age”:{“int”:0}
知道为什么会这样吗?完全传递应该失败,即使一个版本是出版与落后的中间。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题