Apache Pulsar 与 Kafka 性能比较:延迟性(测试过程)

️阅读本文需 4 分钟

本系列文章将重点讨论 Pulsar 与 Kafka 的延迟性,后续文章中会讨论吞吐量等。

本文将介绍测试细节(下图蓝色部分),下一篇文章将详细介绍测试方法(下图绿色部分),而测试结果在上一篇文章中详述(下图红色部分)。

测试细节介绍:

Apache Pulsar 与 Kafka 性能比较:延迟性(测试过程)_第1张图片

设定基准

To set up the benchmark tests, we followed the steps documented on the OpenMessaging site. After applying the Terraform configuration, you get the following set of EC2 instances: 我们根据 OpenMessaging 网站上提供的步骤进行了基准测试。应用 Terraform 配置可以得到以下 EC2 实例集:

Apache Pulsar 与 Kafka 性能比较:延迟性(测试过程)_第2张图片

用于 Pulsar/BookKeeper 和 Kafka broker 的 i3.4xlarge 实例包含两个 NVMe SSD,以提高性能。这两个功能强大的虚拟机都有 16 个 vCPU、122 GiB 内存和高性能磁盘。

两个 SSD 对 Pulsar 而言是理想设定,因为不仅可以写入两个数据流,数据流还能在磁盘上并行。Kafka 还可以通过分配两个驱动器的分区来使用这两个 SDD。

用于 Pulsar 和 Kafka 的 Ansible playbook 使用 tuned-adm 命令(延迟性能配置文件)调优低延迟性能。

tuned-adm 命令详情参考 https://linux.die.net/man/1/t...

工作负载

虽然基准测试中附带了一些可以立即运行的工作负载,但是为了更接近 LinkedIn Engineering 博客中 Kafka 的测试结果,我们仍进行了一些修改。定义新工作负载并不难,只需创建带有测试更新参数的 YAML 文件即可。

阅读 LinkedIn 博客你便会发现,他们运行的消息大小都是 100 字节的,因为通常而言,如果消息太小(远小于100字节),测试对比结果并不明显;而所有的消息队列都不擅长处理“大消息”(远大于 100 字节),所以这里选择了一个折中的大小,即 100 字节,这也是所有消息系统测试中选择使用的单条消息的大小。

这个大小更有利于测试消息系统本身的性能。无论每条消息大小如何,用于测试的消息总量是固定的,消息系统处理消息的效率越高,性能越好;同时,网络或磁盘吞吐量限制对测试结果产生影响的可能性越低。消息系统在处理“大消息”时的性能表现也是一个值得探讨的话题,但我们目前只测试“小消息”。

另外,在测试中,我们还添加了 partition 数目为 6(简称:6 分区)的一项基准测试。因为在 LinkedIn 测试中使用了很多 6 分区,所以我们也把它添加进来。

LinkedIn 博客中包含 producer-only 和 consumer-only 工作负载,而我们在测试中使用的工作负载都同时包括 producer 和 consumer。原因有以下两点。

首先,就目前的情况来看,基准测试不支持 producer-only 或 consumer-only 工作负载;其次,在实际情况中,消息系统同时为 producer 和 consumer 服务。我们决定采用生产消息和消费消息的实际场景来测试。

综上所述,我们用于测试的负载集如下:

Apache Pulsar 与 Kafka 性能比较:延迟性(测试过程)_第3张图片

Kafka consumer group 和 Pulsar 订阅很相似,都允许一个或多个 consumer 接收一个 topic 上的所有消息。当一个 topic 与多个 consumer group/subscription 有关联时,消息系统向 topic 提供每条消息的多个副本,或“扇出“消息。

发布在 topic 上的每条消息都被发送到所有 consumer group/subscription。如果所有消息都被发送到同一 topic,且这一 topic 上只有一个 consumer group/subscription,则 producer 速率与 consumer 速率相等。

如果单个 topic 上有两个 consumer group/subscription,则 consumer 速率是 producer 速率的两倍。我们尽量简化测试,所以采用了前者,即多个 consumer 接收一个 topic 上的所有消息。

上一篇文章详述 Pulsar 与 Kafka 的测试结果。Fsync 的状态是测试中的一个变量,另外,我们还在测试中调节了分区数量,以更好地对比 Pulsar 与 Kafka 的延迟性。

想要随时掌握 Pulsar 的研发进展、用户案例和热点话题吗?快来关注 Apache Pulsar 和 StreamNative 微信公众号,我们第一时间在这里分享与 Pulsar 有关的一切。

Apache Pulsar 与 Kafka 性能比较:延迟性(测试过程)_第4张图片

点击 链接,查看英文原稿

你可能感兴趣的