Avro 与 Protobuf 的性能指标

Performance Metrics for Avro vs Protobuf

我们正在使用 kafka 存储消息并推送大量消息(一分钟 > 30k)。我不确定它是否相关,但作为 kafka 消息生产者的代码在 jruby 中。

序列化和反序列化消息也会对系统性能产生影响。

有人可以帮助比较 Avro 与 Protocol Buffer 的序列化和反序列化速度。

我不想告诉你这个,但你的问题没有简单的答案。

序列化格式的性能取决于许多因素。首先,性能是 实现 的 属性,而不是格式本身。您真正想知道的是每种格式的特定 JRuby 实现的执行情况(或者可能是 Java 实现,如果您只是包装它们)。答案可能与其他语言(如 C++)的答案大不相同。

此外,性能会因您使用库的方式而异。许多库的 API 提供了 "easy, slow" 方式和 "fast, hard" 方式之间的权衡。优化时,您需要仔细研究文档并查找库作者的示例代码,以了解如何发挥最大性能。

最后 - 也是最重要的 - 性能会因您使用的数据而大不相同。不同的格式和实现针对不同类型的数据进行优化。例如,字符串密集型数据将使用与数字密集型数据截然不同的代码路径。对于每一种格式——甚至 JSON 和 XML*——总能找到一个比其他格式表现更好的用例。警惕来自库作者的基准,因为它们往往会强调对他们有利的用例。

不幸的是,如果您真的想知道哪种格式更适合您,唯一的方法就是编写两个版本的代码,一个使用每个库,然后比较它们。没有外部基准能够给你真正的答案。

(我是 Protobuf v2 和 Cap'n Proto 的作者,所以我花了很多时间查看序列化基准并思考性能。)

* XML.

开个玩笑