我想知道将Avro消息批量处理到一个Avro消息中有多么有用(性能和大小)。它将为所有记录设置一个模式,而不是每个记录一个。 (假设模式管理是不可能的,所以每次发送消息时,我们都必须发送模式)
例如,假设我们有一个代表一个人的Avro架构'有高度','重量'和'年龄'假设我们想要在Avro消息中记录10个人。我们可以发送10条单独的Avro消息,每条消息在元数据中占用架构(占用空间),或者使用一组人员和一个架构发送1条Avro消息。
我想知道这种压缩会有多大影响 - 架构的相对大小是多少,是否值得去设计这种压缩?或者它是否最低效,在这种情况下,发送10条单独的消息会更容易?
提前致谢。 丹尼尔
答案 0 :(得分:0)
TL; DR:您很可能想要批量处理您的消息,否则您最好直接将数据作为JSON发布。
例如,让我们使用类似于您建议的Person
记录:
{
"name": "Person",
"type": "record",
"fields": [
{"name": "height", "type": "float"},
{"name": "weight", "type": "float"},
{"name": "age", "type": "int"}
]
}
然后,没有压缩:
{"height": 213.47,"weight": 365.4,"age": 78}
)是:
所以,粗略地说,如果你一次批量记录5+,那么它只值得使用二进制编码(需要包括模式)。压缩也可能有利于JSON编码,因此您希望批量更多。
当然,所有这些都取决于您的特定架构和值。例如,如果您的值包含大型数组或字符串,则在每条消息中包含架构的相对成本将会更小。