如果我们在kafka中使用schema registry,是否要求每个生产者每次将记录发送给代理时都发送kafka的当前版本?如果是的话,因为我们已经在每个avro文件中发送了模式,所以这个额外开销的意义是什么?如果没有,请原谅我的问题愚蠢,请帮助我更好地理解。
tzxcd3kk1#
是否要求每个制作人每次将记录发送给代理时都发送当前版本的Kafka假设您指的是avro模式的版本,那么不是,序列化程序和注册表在幕后处理这个问题。模式本身被转换为json并发布到注册表,在那里它被散列、存储,然后返回一个增量id。序列化程序获得这个id之后,avro消息的剩余字节数组被发送给kafka。使用者反序列化程序必须读取此id,查找注册表,然后使用注册表返回的模式读取avro字节。您可以通过将模式与使用者一起存储来覆盖此行为(类似于您需要如何使用protobuf或json)因为我们已经在每个avro文件中发送了模式,所以这个额外开销的意义是什么?合流序列化程序在kafka消息中不包含模式,只包含在 GET /schemas/ids/:id 对于注册表中的任何给定id使用注册表会有很大的不同吗这是一个很难回答的问题;)与向主题发送随机的值字符串相比,我认为是这样。默认情况下,注册表强制通过兼容性检查使用新使用者读取主题中的所有模式。如果您使用json或字符串,那么有人可以发送 {"hello" : "world"} 后面是数字 2 ,并且如果您的使用者需要json对象,它将立即中断
GET /schemas/ids/:id
{"hello" : "world"}
2
1条答案
按热度按时间tzxcd3kk1#
是否要求每个制作人每次将记录发送给代理时都发送当前版本的Kafka
假设您指的是avro模式的版本,那么不是,序列化程序和注册表在幕后处理这个问题。模式本身被转换为json并发布到注册表,在那里它被散列、存储,然后返回一个增量id。
序列化程序获得这个id之后,avro消息的剩余字节数组被发送给kafka。
使用者反序列化程序必须读取此id,查找注册表,然后使用注册表返回的模式读取avro字节。您可以通过将模式与使用者一起存储来覆盖此行为(类似于您需要如何使用protobuf或json)
因为我们已经在每个avro文件中发送了模式,所以这个额外开销的意义是什么?
合流序列化程序在kafka消息中不包含模式,只包含在
GET /schemas/ids/:id
对于注册表中的任何给定id使用注册表会有很大的不同吗
这是一个很难回答的问题;)与向主题发送随机的值字符串相比,我认为是这样。默认情况下,注册表强制通过兼容性检查使用新使用者读取主题中的所有模式。
如果您使用json或字符串,那么有人可以发送
{"hello" : "world"}
后面是数字2
,并且如果您的使用者需要json对象,它将立即中断