我们正在使用kafka存储消息并推送大量消息(一分钟> 30k)。我不确定它是否相关,但是作为kafka消息的生产者的代码是在jruby中。
对消息进行序列化和反序列化也会对系统产生性能影响。
在序列化和反序列化的速度方面,有人可以帮助比较Avro与协议缓冲区。
答案 0 :(得分:30)
我不想告诉你这个,但你的问题没有简单的答案。
序列化格式的性能取决于许多因素。首先,性能是实现的属性,而不是格式本身。您真正想知道的是每种格式的特定JRuby实现的执行情况(或者如果您只是将它们包装起来,可能是Java实现)。答案可能与其他语言(如C ++)的答案大不相同。
此外,性能将根据您使用库的方式而有所不同。许多图书馆' API提供了简单,缓慢和#34;之间的权衡。方式和快速,坚硬"办法。在进行优化时,您需要仔细研究文档并查找库中的示例代码'作者要了解如何挤出最高性能。
最后 - 最重要的是 - 根据您使用的数据,性能会有很大差异。不同的格式和实现针对不同类型的数据进行优化。例如,字符串繁重的数据将从数量繁重的数据中运用非常不同的代码路径。对于每种格式 - 甚至是JSON和XML * - 总能找到一个比其他所有格式都要好的用例。警惕来自图书馆的基准测试'作者因为这些将倾向于强调对他们有利的用例。
不幸的是,如果您真的想知道哪种格式对您来说效果更好,那么您唯一能找到的方法就是编写两个版本的代码,一个使用每个库,然后比较它们。没有外部基准测试可以给你真正的答案。
(我是Protobuf v2和Cap'n Proto的作者,所以我花了很多时间查看序列化基准并考虑性能。)
*开个玩笑吧。