共计 3512 个字符,预计需要花费 9 分钟才能阅读完成。
🎙️浏览本文需 7 分钟
本系列文章将重点探讨 Pulsar 与 Kafka 的提早性,之前的两篇文章曾经介绍了测试方法(下图绿色局部)与测试细节(下图蓝色内容),能够点击下列题目间接查看:
- Apache Pulsar 与 Kafka 性能比拟:提早性(测试方法)
- Apache Pulsar 与 Kafka 性能比拟:提早性(测试过程)
本文将具体介绍 Pulsar 与 Kafka 的测试后果(下图红色内容)。Fsync 状态是试验中的一个变量,此外,为了更好地比照二者,测试者还调整了分区的数量。
Apache Pulsar 的测试后果
本文将具体介绍 Apache Pulsar 提早性的测试后果。咱们会先介绍开启 fsync 的测试后果(Pulsar 默认的工作形式),再介绍敞开音讯 flush 的测试后果。
对于每个工作负载,有两张图可供参考:一张图是测试期间公布提早的 p99,另一张图是均匀端到端提早。另外,这两张图后附有在测试期间汇总提早测量值并整顿成的表格,提供提早散布数据。
公布提早的百分比计算比端到端提早更精确,因为端到端提早应用的是主动设置在音讯头中的工夫戳,并且该工夫戳的精度为毫秒,而公布提早的精度为纳秒。
所有测试均应用 100 字节的音讯。在 15 分钟测试期间,仅应用两个客户端(生产与生产)服务器,且生产速率和生产速率恒定为每秒 5 万条音讯。测试应用的 Apache Pulsar 版本为 2.4.0。
开启 fsync 时的提早测试
测试 1:1 个 topic,1 个分区
测试 2:1 个 topic,6 个分区
测试 3:1 个 topic,16 个分区
探讨
因为在 Pulsar 和 Kafka 中,分区都是并行单位,咱们期待在分区数量减少时,提早减小,理论测试后果也的确如此。总体而言,分区数量减少,公布提早和端到端提早都减小了。
每次测试中都有异样值,然而提早最大值始终不超过 267 毫秒。公布提早比端到端提早数值稳定更小。在所有测试中,公布提早的 p9999 始终没有超过 11.6 毫秒。在 16 个分区的端到端提早测试中,分区对提早的影响最为显著。16 个分区测试的均匀提早(3 毫秒)是 1 个分区测试(9 毫秒)的三分之一。
Pulsar 的公布提早不随工夫而变动。所有测试运行工夫均为 15 分钟。如图所示,测试期间均匀公布提早稳定很小。端到端提早随工夫发生变化,在 90 秒内,均匀提早稳定为 2 毫秒,并且提早稳定值简直恒定。例如,端到端提早的平均值为 1 个分区 9 毫秒,16 个分区 3 毫秒,然而变动值始终不超过 2 毫秒(9 毫秒增至 11 毫秒,3 毫秒变为 5 毫秒)。
敞开 fsync 时的提早测试
除了通过在 bookkeeper.conf 文件中设置 journalSyncData=false,以禁用刷新每条音讯到磁盘,并重启 Pulsar broker 和 BookKeeper 外,其余测试条件均雷同。
测试 4:1 个 topic,1 个分区
测试 5:1 个 topic,6 个分区
测试 6:1 个 topic,16 个分区
探讨
和料想的一样,不启用 Flush 时,提早减小,但不会减小太多。例如,1 个分区开启 Flush 时,p99 的公布提早为 4.129 毫秒,而在不开启 Flush 时,公布提早为 3.928 毫秒。在 16 个分区测试中,是否开启 Flush 对提早简直没有影响。在雷同工夫距离内,端到端提早周期性 2 毫秒的变动值和之前测试中一样(图中的波峰处)。
禁用 Flush 会损失一些持久性,因而在应用 Apache Pulsar 时,从提早角度来看,禁用 Flush 并有益处。
Apache Kafka 的测试后果
因为 Kafka 默认敞开 Flush,所以咱们先进行此项测试。与 Pulsar 测试一样,所有测试都应用 100 字节的音讯,音讯速率为每秒 5 万条,仅应用两个客户端。在测试期间记录提早,并整顿成表格。测试应用的 Apache Kafka 版本为 2.11-2.3.0。
敞开 fsync 时的提早测试
测试 7:1 个 topic,1 个分区
测试 8:1 个 topic,6 个分区
测试 9:1 个 topic,16 个分区
探讨
首先看一下 1 个分区状况下的公布提早,Kafka 对音讯敞开 Flush 时,提早小于 Pulsar(刷新时提早为 2.969 毫秒,不刷新时提早为 2.72 毫秒)。然而,在提早散布中,能够看到 Pulsar 和 Kafka 的次要区别。
Pulsar 的提早散布更集中,从 p50 到 p999,提早从 2.916 毫秒增至 4.095 毫秒),而 Kafka 的提早在 p999 达到 149.616 毫秒,后果相差很多。在 1 个分区的 p99,Pulsar 的提早为 52.958 毫秒,而 Kafka 的提早简直是 Pulsar 提早的 4 倍,为 201.701 毫秒。咱们在比拟默认模式下的不同,因而对 Pulsar 启用 Flush,Kafka 不启用 Flush。如果禁用 Pulsar 的磁盘 Flush,则 p999 的提早降为仅 4.508 毫秒。
察看 p99 的公布提早就会发现,Kafka 测试中呈现大量异样值的起因很显著。当公布提早从个位数跃升至 100 毫秒以上时,Kafka 呈现了周期性峰值。分区数量减少,公布提早的变动减小,但依然存在。将其与 Pulsar 进行比拟就会发现,整个测试期间,p99 的公布提早基本上是一条直线。
Pulsar 与 Kafka 之间的另一个不同点在于,分区数量减少,Pulsar 的公布提早减小,而 Kafka 的公布提早增大。尽管在 1 个分区测试中,Kafka 的均匀公布提早比 Pulsar 低,但在 6 个分区和 16 个分区测试中,Pulsar 的公布提早更低。在 16 个分区测试中,Pulsar 的均匀公布提早小于 3 毫秒,而 Kafka 的均匀公布提早则约为 8.5 毫秒。
再看均匀端到端提早,1 个分区测试中,Kafka 的测试后果更好,但在分区数量减少时,端到端提早与公布提早类似,都随之增大。在 16 个分区测试中,Kafka 的均匀端到端提早为 11 毫秒,而 Pulsar 的平均值则靠近 3 毫秒。在 Pulsar 测试中,能够察看到周期性 2 毫秒的峰值。在 Kafka 测试中,能够看到峰值更为频繁,且数值更高,通常在 5 毫秒以上
开启 fsync 时的提早测试
除了启用每条音讯刷新(fsync),对测试中的每个 topic 进行配置(flush.messages=1, flush.ms=0),测试条件与之前完全相同。
测试 10:1 个 topic,1 个分区
测试 11:1 个 topic,6 个分区
测试 12:1 个 topic,16 个分区
探讨
Pulsar 的默认模式为启用 Flush,这组比照测试结果显示 Pulsar 体现更好。在 1 个分区测试中,不启用 Flush 时,Kafka 体现更好,当都设置为启用 Flush 时,Pulsar 的均匀提早为 2.969 毫秒,而 Kafka 的均匀提早则超出 Pulsar 的两倍,为 6.652 毫秒。
分区数量减少,Kafka 的提早增大,在 16 个分区测试中,Pulsar 的提早为 2.72 毫秒,而 Kafka 的提早为 18.454 毫秒,超出 Pulsar 测试后果的 6 倍。
当配置 Kafka 为启用 Flush 时,依然会呈现较大的公布提早峰值,不过产生频率不高。
在 Kafka 中,启用 Flush 会减少端到端提早。Kafka 在 1 个分区中体现更好(7.129 毫秒 vs 9.052 毫秒),而 Pulsar 在 6 个分区和 16 个分区中体现更好。随着工夫的推移,Kafka 的端到端提早会呈现高达 5 毫秒的峰值。
总结
基于以上测试后果,总结如下:
- 随着工夫的推移,Pulsar 提早的可预测性更高。与 Kafka 相比,Pulsar 提早随工夫变动的曲线更平滑。比照图表(6 个分区,均匀端到端提早,不刷新)显示,Kafka 的提早低于 Pulsar,然而 Pulsar 的提早值更为稳固。
- Pulsar 的提早变动不大。Kafka 测试显示,大多数状况下,p999 提早减少。而在 Pulsar 测试中,只有极少数状况下,提早的 p999 会减少。比照图表(6 个分区,p99 的公布提早,开启 fsync)显示,与 Kafka 相比,Pulsar 的提早值更稳固:
- 在应用繁多 producer 和繁多 consumer 时,Pulsar topic 分区数量减少,提早减小;Kafka topic 分区数量减少,提早增大。
- 在最高的要求音讯要长久化的前提下(保障不丢音讯),Pulsar 的提早低于 Kafka。
- 敞开 fsync,Pulsar 会有更小的提早,不能保障音讯的持久性
对于提早敏感工作负载而言,Pulsar 整体体现更好。Pulsar 能够保障统一的低提早与强持久性。当然,并不是所有的工作负载都对提早敏感。为进步吞吐量,可能须要承当提早性更高的代价。
想要随时把握 Pulsar 的研发停顿、用户案例和热点话题吗?快来关注 Apache Pulsar 和 StreamNative 微信公众号,咱们第一工夫在这里分享与 Pulsar 无关的所有。
点击 链接,查看英文原稿