【问题标题】:Benefits of batching Avro messages under one schema?在一个模式下批处理 Avro 消息的好处?
【发布时间】:2016-09-23 06:22:44
【问题描述】:

我想知道将 Avro 消息批处理成一条 Avro 消息会有多大好处(性能和大小方面)。它将为所有记录使用一种模式,而不是每条记录一种模式。 (假设 schema 管理是不可能的,所以每次我们发送消息时,我们必须将 schema 连同它一起发送)

例如,假设我们有一个代表“人”的 Avro 模式,该模式具有“身高”、“体重”和“年龄”。假设我们要在 Avro 消息中记录 10 个人。我们可以发送 10 条单独的 Avro 消息,每条消息都在元数据中包含其架构(占用空间),或者发送 1 条 Avro 消息,其中包含一组人员且只有一个架构。

我想知道这种压缩会产生多大的影响 - 架构的相对大小是多少,是否值得费心构建这种压缩?或者它是否有效,在这种情况下只发送 10 条单独的消息会更容易?

提前致谢。 丹妮尔

【问题讨论】:

  • 此问题与您使用的batch-file 标签无关。您可以阅读将鼠标指针移过它的批处理文件标签描述。请删除批处理文件标签。

标签: performance compression schema avro


【解决方案1】:

TL;DR:您很可能希望批量处理您的消息,否则您最好直接将数据作为 JSON 发送。

例如,让我们使用类似于您建议的Person 记录:

{
  "name": "Person",
  "type": "record",
  "fields": [
    {"name": "height", "type": "float"},
    {"name": "weight", "type": "float"},
    {"name": "age", "type": "int"}
  ]
}

然后,不压缩:

  • 架构本身约为 150 字节。
  • 随机记录(例如{"height": 213.47,"weight": 365.4,"age": 78})是:
    • 二进制编码时约为 10 个字节。
    • JSON 编码时约为 50 个字节。

因此,粗略地说,如果您一次批处理 5 条以上的记录,则仅值得使用二进制编码(这需要包括架构)。压缩也可能有利于 JSON 编码,因此您需要进行更多批处理。

当然,这一切都取决于您的特定架构和价值观。例如,如果您的值包含大型数组或字符串,则在每条消息中包含架构的相对成本会更小。

【讨论】:

    猜你喜欢
    • 2019-08-30
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    相关资源
    最近更新 更多