如何进行Apache Pulsar 与 Kafka的延迟性比较

发布时间:2021-12-15 09:08:04 作者:柒染
来源:亿速云 阅读:236

本篇文章为大家展示了如何进行Apache Pulsar 与 Kafka的延迟性比较,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

重点讨论 Pulsar 与 Kafka 的延迟性

下面将详细介绍 Pulsar 与 Kafka 的测试结果(下图红色内容)。Fsync 状态是实验中的一个变量,此外,为了更好地对比二者,测试者还调整了分区的数量。

如何进行Apache Pulsar 与 Kafka的延迟性比较


  Apache Pulsar 的测试结果  

小编将详细介绍 Apache Pulsar 延迟性的测试结果。我们会先介绍开启 fsync 的测试结果(Pulsar 默认的工作方式),再介绍关闭消息 flush 的测试结果。

对于每个工作负载,有两张图可供参考:一张图是测试期间发布延迟的 p99,另一张图是平均端到端延迟。另外,这两张图后附有在测试期间汇总延迟测量值并整理成的表格,提供延迟分布数据。

发布延迟的百分比计算比端到端延迟更准确,因为端到端延迟使用的是自动设置在消息头中的时间戳,并且该时间戳的精度为毫秒,而发布延迟的精度为纳秒。

所有测试均使用 100 字节的消息。在 15 分钟测试期间,仅使用两个客户端(生产与消费)服务器,且生产速率和消费速率恒定为每秒 5 万条消息。测试使用的 Apache Pulsar 版本为 2.4.0。

开启 fsync 时的延迟测试  

测试 1:1 个 topic,1 个分区

如何进行Apache Pulsar 与 Kafka的延迟性比较  
如何进行Apache Pulsar 与 Kafka的延迟性比较

如何进行Apache Pulsar 与 Kafka的延迟性比较

测试 2:1 个 topic,6 个分区

如何进行Apache Pulsar 与 Kafka的延迟性比较
如何进行Apache Pulsar 与 Kafka的延迟性比较

如何进行Apache Pulsar 与 Kafka的延迟性比较


测试 3:1 个 topic,16 个分区

如何进行Apache Pulsar 与 Kafka的延迟性比较
如何进行Apache Pulsar 与 Kafka的延迟性比较

如何进行Apache Pulsar 与 Kafka的延迟性比较
讨论

由于在 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 个分区

如何进行Apache Pulsar 与 Kafka的延迟性比较
如何进行Apache Pulsar 与 Kafka的延迟性比较

如何进行Apache Pulsar 与 Kafka的延迟性比较
测试 5 :1 个 topic,6 个分区

如何进行Apache Pulsar 与 Kafka的延迟性比较
如何进行Apache Pulsar 与 Kafka的延迟性比较

如何进行Apache Pulsar 与 Kafka的延迟性比较
测试 6:1 个 topic,16 个分区

如何进行Apache Pulsar 与 Kafka的延迟性比较
如何进行Apache Pulsar 与 Kafka的延迟性比较

如何进行Apache Pulsar 与 Kafka的延迟性比较
讨论
和预想的一样,不启用 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 个分区

如何进行Apache Pulsar 与 Kafka的延迟性比较
如何进行Apache Pulsar 与 Kafka的延迟性比较
如何进行Apache Pulsar 与 Kafka的延迟性比较
测试 8:1 个 topic,6 个分区

如何进行Apache Pulsar 与 Kafka的延迟性比较
如何进行Apache Pulsar 与 Kafka的延迟性比较

如何进行Apache Pulsar 与 Kafka的延迟性比较
测试 9:1 个 topic,16 个分区

如何进行Apache Pulsar 与 Kafka的延迟性比较
如何进行Apache Pulsar 与 Kafka的延迟性比较

如何进行Apache Pulsar 与 Kafka的延迟性比较
讨论
首先看一下 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 个分区

如何进行Apache Pulsar 与 Kafka的延迟性比较
如何进行Apache Pulsar 与 Kafka的延迟性比较
如何进行Apache Pulsar 与 Kafka的延迟性比较
测试 11:1 个 topic,6 个分区

 
如何进行Apache Pulsar 与 Kafka的延迟性比较
如何进行Apache Pulsar 与 Kafka的延迟性比较
如何进行Apache Pulsar 与 Kafka的延迟性比较
测试 12:1 个 topic,16 个分区

 
如何进行Apache Pulsar 与 Kafka的延迟性比较
如何进行Apache Pulsar 与 Kafka的延迟性比较

如何进行Apache Pulsar 与 Kafka的延迟性比较
讨论
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 毫秒的峰值。

  总结  

基于以上测试结果,总结如下:

1. 随着时间的推移,Pulsar 延迟的可预测性更高。与 Kafka 相比,Pulsar 延迟随时间变化的曲线更平滑。对比图表(6 个分区,平均端到端延迟,不刷新)显示,Kafka 的延迟低于 Pulsar,但是 Pulsar 的延迟值更为稳定。

如何进行Apache Pulsar 与 Kafka的延迟性比较

2. Pulsar 的延迟变化不大。Kafka 测试显示,大多数情况下,p999 延迟增加。而在 Pulsar 测试中,只有极少数情况下,延迟的 p999 会增加。对比图表(6 个分区,p99 的发布延迟,开启 fsync)显示,与 Kafka 相比,Pulsar 的延迟值更稳定。

3. 在使用单一 producer 和单一 consumer 时,Pulsar topic 分区数量增加,延迟减小;Kafka topic 分区数量增加,延迟增大。

4. 在最高的要求消息要持久化的前提下(保证不丢消息),Pulsar 的延迟低于 Kafka。

5. 关闭 fsync,Pulsar 会有更小的延迟,不能保证消息的持久性


对于延迟敏感工作负载而言,Pulsar 整体表现更好。Pulsar 可以保证一致的低延迟与强持久性。当然,并不是所有的工作负载都对延迟敏感。为提高吞吐量,可能需要承担延迟性更高的代价。

上述内容就是如何进行Apache Pulsar 与 Kafka的延迟性比较,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. 如何进行Apache Pulsar 与 Apache Kafka 在金融场景下的性能对比分析
  2. Apache Kafka、Apache Pulsar和RabbitMQ性能测试对比是怎么进行的

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

apache pulsar kafka

上一篇:WCF协定案例分析

下一篇:WCF事物处理是怎样的

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》