关于 Apache Pulsar

Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性。
GitHub 地址:http://github.com/apache/pulsar/

本文作者:李鹏辉、郭斯杰,译者:滕达
如需转载,请后台留言沟通

为了更全面地了解 Pulsar 和 Kafka,我们“复现”了 Confluent 对 Pulsar 和 Kafka 基准测试。重复这一基准测试的原因有两个,一是 Confluent 的测试方法存在一些问题;二是 Confluent 的测试范围和测试场景不够全面。为了更准确地对比 Pulsar 和 Kafka,我们在测试中不仅修复了 Confluent 测试中的问题,还扩大了测试范围,纳入更多性能衡量标准,模拟更多实际场景。

和 Confluent 的测试相比,我们的测试主要有三项改进:

1.包含 Pulsar 和 Kafka 支持的所有持久性级别。在同等持久性级别下,对比二者的吞吐量和延迟。2.引入影响性能的其他因素和测试条件,如分区数量、订阅数量、客户端数量等。3.测试的混合负载同时包含写入、追赶读和追尾读,模拟实际使用场景。

本节将详述测试结果和结论。

最大吞吐量测试

测试目标:观测在处理发布和追尾读工作负载时 Pulsar 和 Kafka 可实现的最大吞吐量。

测试设置:通过调整分区数量,观测分区数量对吞吐量的影响。

测试策略:

•将所有消息都复制三次,确保容错;•改变 ack 数量,测试在不同持久性保证下,Pulsar 和 Kafka 的最大吞吐量;•启用 Pulsar 和 Kafka 的批处理,为不超过 10 ms 的响应延迟设置最大批处理为 1 MB 数据;•改变分区数量(1、100、2000 个分区),分别测试最大吞吐量;•当分区数量为 100 和 2000 时,使用 2 个 producer 和 2 个 consumer;•当分区数量为 1 时,改变 producer 和 consumer 的数量,观测吞吐量变化;•消息大小为 1 KB;•在所有测试场景中,改变持久性级别,观测最大吞吐量。

测试结果:

100 个分区,1 个订阅,2 个生产者/2 个消费者

分区数量为 100,改变持久性保证,分别观测 Pulsar 和 Kafka 的最大吞吐量。在 Pulsar 和 Kafka 中,都使用 1 个订阅、2 个生产者和 2 个消费者。测试结果如下。

•在 1 级持久性保证(同步复制持久性,异步本地持久性)下,Pulsar 的最大吞吐量约为 300 MB/s,达到日志磁盘带宽物理极限。Kafka 的最大吞吐量约为 420 MB/s。值得注意的是,在持久性为 1 级时,Pulsar 配置一个磁盘为日志磁盘进行写入,另一个磁盘为 ledger 磁盘进行读取;而 Kafka 同时使用两个磁盘进行写入和读取。尽管 Pulsar 的设置能够提供更好的 I/O 隔离,但单个磁盘最大带宽(〜300 MB/s)会限制吞吐量。•将持久性(同步复制持久性和异步本地持久性)配置为 2 级时,Pulsar 和 Kafka 的最大吞吐量均可达到约 600 MB/s 。两个系统都达到了磁盘带宽的物理极限。

图 1 为 100 个分区,同步本地持久性下,Pulsar 和 Kafka 的最大吞吐量。

图1· 有 100 个分区时,Pulsar 和 Kafka 的最大吞吐量(同步本地持久性)

图 2 为 100 个分区,异步本地持久性下,Pulsar 和 Kafka 的最大吞吐量。

图2· 100 个分区时,Pulsar 和 Kafka 的最大吞吐量(异步本地持久性)

2000 个分区,1 个订阅,2 个生产者/2 个消费者

分区数量从 100 增加到 2000,持久性保证不变(acks = 2),分别观测 Pulsar 和 Kafka 的最大吞吐量。在 Pulsar 和 Kafka 中,都使用 1 个订阅、两个生产者和两个消费者。测试结果如下。

•在 1 级持久性保证下,Pulsar 的最大吞吐量保持在约 300 MB/s,在 2 级持久性保证下则增加到约 600 MB/s;•单独为每条消息刷新数据时(kafka-ack-all-sync),Kafka 的最大吞吐量从 600MB/s (100 个分区) 降到了 300MB/s 左右;•使用系统默认的持久性设置(kafka-ack-all-nosync)时,Kafka 的最大吞吐量从约500 MB/s(100 个分区)下降到约 300 MB/s。

为了了解 Kafka 吞吐量下降的原因,我们绘制了 Kafka 和 Pulsar 在每一持久性保证下的平均发布延迟图。图 3 表明,分区数量增加到 2000 时,Kafka 的平均发布延迟增加到 200 毫秒,P99 发布延迟增加到 1200 毫秒。

图3· 2000 个分区时,Pulsar 和 Kafka 的最大吞吐量

发布延迟通常会对吞吐量造成显著影响。但由于 Pulsar 客户端充分利用了 Netty 强大的异步网络框架,Pulsar 的吞吐量没有受到影响。而 Kafka 客户端使用同步实现,Kafka 的吞吐量的确受到影响。把 producer 数量增加一倍可以提高 Kafka 的吞吐量。如果生产者数量增加到 4 个,Kafka 的吞吐量能达到约 600 MB/s。

图 4:2000 个分区时,Pulsar 和 Kafka 的发布延迟

图4· 2000 个分区时,Pulsar 和 Kafka 的发布延迟

1 个分区,1 个订阅,2 个生产者/2 个消费者

增加更多 broker 和分区有助于提高 Pulsar 和 Kafka 的吞吐量。为了更深入地了解这两个系统的效率,我们把分区数量设为 1,观测 Pulsar 和 Kafka 的最大吞吐量。在 Pulsar 和 Kafka 中,都使用 1 个订阅、2 个生产者和 2 个消费者。

测试结果如下:

•在所有持久性级别,Pulsar 的最大吞吐量都达到了约 300 MB/s;•在异步复制持久性下,Kafka 的最大吞吐量达到了约 300 MB/s,但在同步复制持久性下只有约 160 MB/s。

图 5:在 1 个分区,同步本地持久性下,Pulsar 和 Kafka 的最大吞吐量

图5· 1 个分区时,Pulsar 和 Kafka 的最大吞吐量(同步本地持久性)

图 6:在 1 个分区,异步本地持久性下,Pulsar 和 Kafka 的最大吞吐量

图6· 1 个分区时,Pulsar 和 Kafka 的最大吞吐量(异步本地持久性)

1 个分区,1 个订阅,1 个生产者/1 个消费者

分区数量为 1,订阅数量为 1(与上个测试相同),分别观测 Pulsar 和 Kafka 的最大吞吐量。在 Pulsar 和 Kafka 中,只使用 1 个生产者和 1 个消费者。

测试结果如下:

•在所有持久性级别,Pulsar 的最大吞吐量都保持在约 300 MB/s;•在异步复制持久性下,Kafka 的最大吞吐量从约 300 MB/s(测试#3中)下降到约 230 MB/s;•在同步复制持久性下,Kafka 的吞吐量从约 160 MB/s(测试#3中)下降到约 100 MB/s。

图 7 为在同步本地持久性,一个分区、一个生产者和一个消费者的情况下,Pulsar 和 Kafka 的最大吞吐量

图7· 一个分区、一个生产者和一个消费者时,Pulsar 和 Kafka 的最大吞吐量(同步本地持久性)

为了了解 Kafka 吞吐量下降的原因,我们绘制了 Kafka 和 Pulsar 在不同持久性保证下的平均发布延迟图(图8)和端到端延迟图(图9)。从下图中可以看到,即使只有一个分区,Kafka 的发布延迟和端到端延迟也从几毫秒上升到了几百毫秒。减少生产者和消费者数量会对 Kafka 吞吐量造成显著影响。相比之下,Pulsar 的延迟始终保持在几毫秒。

图8· 一个分区、一个生产者和一个消费者时,Pulsar 和 Kafka 的发布延迟(同步持久性)

图9· 一个分区、一个生产者和一个消费者时,Pulsar 和 Kafka 的端到端延迟(同步持久性)

发布和端到端延迟测试

测试目标:观测在处理发布和追尾读工作负载时 Pulsar 和 Kafka 可实现的最低延迟。

测试设置:通过调整订阅数量和分区数量,观测订阅数量和分区数量对发布延迟和端到端延迟的影响。

测试策略:

•将所有消息都复制三次,确保容错;•改变 ack 数量,测试在不同持久性保证下,Pulsar 和 Kafka 吞吐量的差异;•改变订阅数量(从 1 到 10),分别测试延迟;•改变分区数量(从 100 到 10000),分别测试延迟;•消息大小为 1KB;•生产者以 200000/s(约 200MB/s)的固定速度发送消息,追尾读消费者在生产者持续发送消息时处理消息。

各项测试结果如下。

100 个分区, 1 个订阅

我们从 100 个分区、1 个订阅开始,在所有不同持久性保证下,对 Pulsar 和 Kafka 能实现的最低延迟进行了基准测试。

测试证明,在所有持久性级别上,Pulsar 的发布延迟和端到端延迟都比 Kafka 低,是 Kafka 的 1/5 到 1/2。

发布延迟 - 同步本地持久性

使用两种复制持久性设置(分别为 ack-1 和 ack-2)和同步本地持久性时,Pulsar 和 Kafka 发布延迟的差异如图 10。表 2 为每种情况下的精确延迟数值。在异步复制持久性(ack-1)下,Pulsar P99 延迟是 Kafka 的 1/3; 在同步复制持久性(ack-2)下是 Kafka 的 1/5。

图10· Pulsar 和 Kafka 的发布延迟(数据同步)

表2· Pulsar 和 Kafka 的实际发布延迟测试结果(数据同步)

为了更深入地了解延迟如何随时间变化,我们绘制了 Pulsar 和 Kafka 采取不同复制持久性设置时的 P99 延迟图。如图 11 所示,Pulsar 的延迟比较稳定(约 5 毫秒),但 Kafka 的延迟波动较大。对于关键任务服务(mission-critical services)来说,稳定、持续的低延迟至关重要。

图11· Pulsar 和 Kafka 的 P99 延迟

端到端延迟--同步本地持久性

使用两种复制持久性设置(分别为 ack-1和 ack-2)和同步本地持久性时,Pulsar 和 Kafka 端到端延迟的差异如图 12。表 3 为每种情况下的精确延迟数值。在异步复制持久性(ack-1)下,Pulsar P99 端到端延迟是 Kafka 的 1/3,在同步复制持久性(ack-2)下是 Kafka 的 1/5。

图12· 1 个订阅时,Pulsar 和 Kafka 的端到端延迟(数据同步)

表3· 1 个订阅时,Pulsar 和 Kafka 的实际端到端延迟测试结果(数据同步)

发布延迟 - 异步本地持久性

使用两种复制持久性设置(分别为 ack-1 和 ack-2)和异步本地持久性时,Pulsar 和 Kafka 发布延迟的差异如图 13。表 4 为每种情况下的精确延迟数值。在异步复制持久性(ack-1)下,Kafka 性能更优,但 Pulsar P99 发布延迟更稳定(低于 5 毫秒),增加复制持久性保证(从 ack-1 到 ack-2)并未影响延迟。在同步复制持久性(ack-2)下,Kafka P99 发布延迟是 Pulsar 的 2 倍。

图13· Pulsar 和 Kafka 的发布延迟(无数据同步)

表4· Pulsar 和 Kafka 的实际发布延迟测试结果(无数据同步)

为了更深入地了解发布延迟如何随时间变化,我们绘制了 Pulsar 和 Kafka 在不同复制持久性设置下的 P99 发布延迟图。如图 14 所示,Pulsar 的延迟始终保持在较低的水平(低于 5 毫秒),而 Kafka 的延迟始终是 Pulsar 的 2 倍。

图14· 不同复制持久性设置下,Pulsar 和 Kafka 的 P99 发布延迟

端到端延迟--异步本地持久性

使用两种复制持久性设置(分别为 ack-1 和 ack-2)和异步本地持久性时,Pulsar 和 Kafka 端到端延迟的差异如图 15。表 5 为每种情况下的精确延迟数值。在所有情况下,Pulsar 的性能都优于 Kafka。Pulsar P99 端到端延迟保持稳定(约 5 毫秒),改变复制持久性设置对其并无影响。对于 ack-1,Kafka 的 P99 端到端延迟比 Pulsar 高;对于 ack-2,Kafka 的 P99 端到端延迟是 Pulsar 的 2 倍。

图15· 1 个订阅时,Pulsar 和 Kafka 的端到端延迟(无数据同步)

表5· 1 个订阅时,Pulsar 和 Kafka 的实际端到端延迟测试结果(无数据同步)

100 个分区, 10 个订阅

了解 Pulsar 和 Kafka 只有一个订阅时的性能后,我们想知道更改订阅数量会如何影响发布延迟和端到端延迟。于是我们把订阅数量从 1 增加到 10,并为每个订阅分配了 2 个消费者。

从如下数据中可以看出,我们的测试结果表明:

•Pulsar P99 发布延迟和端到端延迟保持在 5 到 10 毫秒之间。•增加订阅数量会对 Kafka 的 P99 发布和端到端延迟产生巨大影响,导致延迟增加到几秒。

发布延迟 - 同步本地持久性

使用两种复制持久性设置(分别为 ack-1和 ack-2)和同步本地持久性时,Pulsar 和 Kafka 发布延迟的差异如图 16。表 7 为每种情况下的精确延迟数值。在异步复制持久性(ack-1)下,Pulsar P99 发布延迟仍然是 Kafka 的 1/3。但在同步复制持久性(ack-2)下,Pulsar 的发布延迟是 Kafka 的 1/160(1 个订阅时,Pulsar 的发布延迟是 Kafka 的 1/5)。

图16· 10 个订阅时,Pulsar 和 Kafka 的发布延迟(数据同步)

表7· 10 个订阅时,Pulsar 和 Kafka 的实际发布延迟测试结果(数据同步)

端到端延迟--同步本地持久性

使用两种复制持久性设置(分别为 ack-1和 ack-2)和同步本地持久性时,Pulsar 和 Kafka 端到端延迟的差异如图 17。表 8 为每种情况下的精确延迟数值。在异步复制持久性(ack-1)下,Pulsar P99 延迟是 Kafka 的 1/20,在同步复制持久性(ack-2)下是 Kafka 的 1/110 。

图17· 10 个订阅时,Pulsar 和 Kafka 的端到端延迟(数据同步)

表8· 10 个订阅时,Pulsar 和 Kafka 的实际端到端延迟测试结果(数据同步)

发布延迟 - 异步本地持久性

使用两种复制持久性设置(分别为 ack-1 和 ack-2)和异步本地持久性时,Pulsar 和 Kafka 发布延迟的差异如图 18。表 9 为每种情况下的精确延迟数值。Pulsar 的性能显著优于 Kafka。Pulsar 的平均发布延迟约为 3 毫秒,P99 延迟在 5 毫秒以内。Kafka 在异步复制持久性(ack-1)下性能令人满意,但在同步复制持久性(ack-2)下性能差了很多。在同步复制持久性下,Kafka 的 P99 发布延迟是 Pulsar 的 270 倍。

图18· 10 个订阅时,Pulsar 和 Kafka 的发布延迟(无数据同步)

表9· 10 个订阅时,Pulsar 和 Kafka 的实际发布延迟测试结果(无数据同步)

端到端延迟--异步本地持久性

使用两种复制持久性设置(分别为 ack-1 和 ack-2)和异步本地持久性时,Pulsar 和 Kafka 端到端延迟的差异如图 19。表 10 为不同情况下的精确延迟数值。在所有情况下,Pulsar 的性能始终优于 Kafka。Pulsar 的端到端延迟始终保持在 4~7 毫秒之间,改变复制持久性设置对其并无影响。对于 ack-1,Kafka 的 P99 端到端延迟是 Pulsar 的 13 倍;对于ack-2,则是 187 倍。

图19· 10 个订阅时,Pulsar 和 Kafka 的端到端延迟(无数据同步)

表10· 10 个订阅时,实际端到端延迟测试结果(无数据同步)

100, 5000, 8000, 10000 个分区

了解更改订阅数量会如何影响 Pulsar 和 Kafka 的发布延迟后,我们想更改分区数量,看看会产生什么效果。于是,我们把分区数量从 100 个累加到 10000 个,观察发生了什么变化。

测试结果表明:

•分区数量增加时,Pulsar P99 发布延迟稳定在 5 毫秒内。•Kafka 的 P99 发布延迟受分区数量累加影响很大,延迟上升到几秒。•分区数量超过 5000 后,Kafka 的消费者就跟不上发布吞吐量了。

Ack = 1,同步本地持久性

使用同步本地持久性和异步复制持久性 (ack = 1) 更改分区数量时,Pulsar 和 Kafka 发布和端到端延迟的差异分别如图 20 和图 21。

图20· 分区数量不同,ACK=1 时的发布延迟(数据同步)

图21· 分区数量不同,ACK=1 时的端到端延迟(数据同步)

表 12 显示了分区数量不同,ACK=1 时的实际发布延迟测试结果。表 13 显示了分区数量不同,ACK=1 时的实际端到端延迟测试结果。

表12· 分区数量不同,ACK=1 时的实际发布延迟测试结果(数据同步)

表13· 分区数量不同,ACK=1 时的实际端到端延迟测试结果(数据同步)

图 22 给出了分区数量不同,ACK=1 时 Pulsar 端到端的延迟。图 23 给出了分区数量不同,ACK=1 时 Kafka 端到端的延迟。

图22· 分区数量不同,ACK=1 时 Pulsar 的端到端延迟(数据同步)

图23· 分区数量不同,ACK=1 时 Kafka 的端到端延迟(数据同步)

从以上图表可以看出:

•Pulsar P99 发布延迟稳定在 5 毫秒左右,更改分区数量对其并无影响。•Pulsar P99 端到端延迟稳定在 6 毫秒左右,更改分区数量对其并无影响。•Kafka 的 P99 发布延迟随着分区数量增加而逐渐拉长,在 10000 个分区时,其延迟增加了 5 倍(与 100 个分区时相比),比 Pulsar 的延迟高出 10 倍。•Kafka 的 P99 端到端延迟随着分区数量增加而逐渐拉长,在 10000 个分区时,其延迟高出 10000 倍(与 100 个分区时相比),增加到 180 秒,是 Pulsar 的 280000倍。

Ack = 2,同步本地持久性

使用同步本地持久性和同步复制持久性(ack = 2)更改分区数量时,Pulsar 和 Kafka 发布延迟的差异如图 24。表 14 为每种情况下的精切延迟数值。

图24· 分区数量不同,ack=2/all 时的发布延迟(数据同步)

表14· 分区数量不同, ack=2/all 时的实际发布延迟测试结果(数据同步)

图 25 和图 26 分别显示了更改分区数量如何影响 Pulsar 和 Kafka 端到端的延迟。

图25· 分区数量不同,ack=2 时 Pulsar 的端到端延迟(数据同步)

图26· 分区数量不同,ack=2 时 Kafka 的端到端延迟(数据同步)

从以上图表可以看出:

•Pulsar P99 发布延迟稳定在约 10 毫秒,增加分区数量对其并无影响。•随着分区数量增加,Kafka 的 P99 发布延迟逐渐拉长;有 10000 个分区时,其延迟是 100 个分区的 30 倍,增加到 1.7 秒,是 Pulsar 的 126 倍。•Pulsar P99 端到端延迟稳定在约 10 毫秒,增加分区数量仅对 Pulsar P99 端到端延迟产生轻微影响。但即使有 10000 个分区,延迟仍相对较低,约为 50 毫秒。•随着分区数量增加,Kafka 的 P99 端到端延迟逐渐拉长。有 10000 个分区时,Kafka P99 端到端延迟增加到 200 秒,是 Pulsar 的 14771 倍。

Ack = 1, Async 本地持久性

使用异步本地持久性和异步复制持久性(ack = 1)更改分区数量时,Pulsar 和 Kafka 发布延迟的差异如图 27。表 15 为不同情况下的精切延迟数值。

图27· 分区数量不同,ack=1 时的发布延迟(无数据同步)

表15· 分区数量不同,ack=1 时的实际发布延迟测试结果(无数据同步)

图 28 和图 29 分别显示了更改分区数量如何影响 Pulsar 和 Kafka 端到端的延迟。

图28· 分区数量不同,ack=1 时,Pulsar 端到端的延迟(无数据同步)

图29· 分区数量不同,ack=1 时,Kafka 端到端的延迟(无数据同步)

从以上图表可以看出:

•Pulsar P99 发布延迟稳定在约 4~5 毫秒之间,增加分区数量对其并无影响。•Kafka P99 发布延迟随着分区数量增加而逐渐拉长,有 10000 个分区时,延迟增加到 41 毫秒,是有 100 个分区时的 13 倍,是 Pulsar 的 8 倍。•Pulsar P99 端到端延迟稳定在约 4~6 毫秒之间,增加分区数量仅对 Pulsar P99 端到端延迟产生轻微影响,但即使有 10000 个分区,它也保持在相对较低的水平(24 毫秒以内)。•随着分区数量增加,Kafka P99 端到端延迟逐渐拉长。有 10000 个分区时,Kafka P99 端到端延迟高达 180 秒,是 Pulsar 的 34416 倍。

Ack = 2,异步本地持久性

使用异步本地持久性和同步复制持久性 (ack = 2)更改分区数量时,Pulsar 和 Kafka 发布延迟的差异如图 30。表 16 为每种情况下的精确延迟数值。

图30· 分区数量不同,ack=all/2 的发布延迟(无数据同步)

表16· 分区数量不同,ack=all/2 的实际发布延迟测试结果(无数据同步)

图 31 和图 32 分别显示了更改分区数量如何影响 Pulsar 和 Kafka 端到端的延迟。

图31· 分区数量不同,ack=2 时 Pulsar 的端到端延迟(无数据同步)

图32· 分区数量不同,ack=2 时 Kafka 的端到端延迟(无数据同步)

从以上图表可以看出:

•Pulsar P99 发布延迟稳定在约 4~5 毫秒之间,增加分区数量对其并无影响。•随着分区数量增加,Kafka P99 发布延迟逐渐拉长,有 10000 个分区时,其延迟增加到 1.7 秒,是 100 个分区时的 202 倍,是 Pulsar 的 278 倍。•Pulsar P99 端到端延迟稳定在约 4~6 毫秒之间,增加分区数量仅对其造成轻微影响,延迟仍保持在相对较低的水平(28 毫秒以内)。•随着分区数量增加,Kafka P99 端到端延迟逐渐拉长。有 10000 个分区时,Kafka P99 端到端延迟增加到 200 秒,是 Pulsar 的 32362 倍。

追赶读测试

测试目标:观测在处理仅包括追赶读工作负载时 Pulsar 和 Kafka 可实现的最大吞吐量。

测试策略:

•将所有消息都复制三次,确保容错;•改变 ack 数量,测试在不同持久性保证下,Pulsar 和 Kafka 的吞吐量变化;•启用 Pulsar 和 Kafka 的批处理,为不超过 10 ms 的响应延迟设置最大批处理为 1 MB 数据;•在 100 个分区的情况下,对两个系统进行基准测试;•共运行四个客户端--两个生产者和两个消费者;•消息大小为 1 KB。

测试一开始,生产者开始以 200K/s 的固定速率发送消息。队列中积累了 512GB 数据后,消费者开始处理数据,首先从头读取累积数据,然后在数据到达时继续处理传入数据。在测试期间,生产者持续以相同速率发送消息。

我们评估了每个系统读取 512GB 累积数据的速度,在不同持久性设置下对 Kafka 和 Pulsar进行了比较。各项测试结果如下:

启用 Pulsar 绕过 Journal 写入的异步本地持久性

本项测试中,我们在 Pulsar 和 Kafka 上使用了同等的异步本地持久性保证。我们启用了新的 Pulsar 绕过 Journal 写入,来匹配 Kafka 默认 fsync 设置中的本地持久性保证。

下图 33 给出了测试结果:

•只处理追赶读时,Pulsar 的最大吞吐量达到了 370 万条信息/秒(3.5 GB/s)。•Kafka 的最大吞吐量只达到 100 万条消息/秒(1GB/s)。•Pulsar 处理追赶读的速度比 Kafka 快 75%。

图33· Pulsar 和 Kafka 的追赶读吞吐量(绕过 Journal 写入)

未启用 Pulsar 绕过 Journal 写入的异步本地持久性

本项测试中,我们在 Pulsar 和 Kafka 上使用了异步本地持久性保证,但并未启用 Pulsar 绕过 Journal 写入。

下图 34 给出了测试结果:

•处理追赶读时,Pulsar 的最大吞吐量达到 180 万条信息/秒(1.7 GB/s)。•Kafka 的最大吞吐量仅达到 100 万条消息/秒(1GB/s)。•Pulsar 处理追赶读的速度是 Kafka 的两倍。

图34· Pulsar 和 Kafka 的追赶读吞吐量(数据同步)

同步本地持久性

本项测试中,我们在同等同步本地持久性保证下对 Kafka 和 Pulsar 进行了比较。

下图 35 给出了测试结果:

•只处理追赶读时,Pulsar 的最大吞吐量达到 180 万条/秒(1.7 GB/s)。•Kafka 的最大吞吐量只达到 100 万条消息/秒(1GB/s)。•Pulsar 处理追赶读的速度是 Kafka 的两倍。

图35· Pulsar 和 Kafka 的追赶读吞吐量(无数据同步)

混合工作负载测试

测试目标:评估追赶读对混合工作负载中的发布和追尾读的影响。

测试策略:

•将所有消息都复制三次,确保容错;•启用 Pulsar 和 Kafka 的批处理,为不超过 10 ms 的响应延迟设置最大批处理为 1 MB 数据;•在 100 个分区的情况下,对两个系统进行基准测试;•在不同耐久性设置下对 Kafka 和 Pulsar 进行比较;•共运行四个客户端--两个生产者和两个消费者;•消息大小为 1 KB;

测试一开始,两个生产者均开始以 200K/s 的固定速率发送数据,两个消费者中有一个立即开始处理追尾读。队列中积累了 512GB 数据后,另一个(追赶读)消费者开始从头读取累积数据,然后在数据到达时继续处理传入数据。在测试期间,两个生产者持续以相同的速率发布,而追尾读消费者继续以相同的速率消费数据。

测试结果如下:

启用 Pulsar 绕过 Journal 写入的异步本地持久性

本项测试中,我们在同等异步本地持久性保证下对 Kafka 和 Pulsar 进行了比较。我们启用了新的 Pulsar 绕过 Journal 写入,来匹配 Kafka 默认 fsync 设置的本地持久性保证。

下图 36 显示,追赶读对 Kafka 写入造成显著影响,但对 Pulsar 影响很小。Kafka 的 P99 发布延迟增加到 1-3 秒,而 Pulsar 的延迟则稳定在几毫秒到几十毫秒间。

图36· 追赶读对 Pulsar 和 Kafka 发布延迟的影响(绕过 Journal 写入)

未启用 Pulsar 绕过 Journal 写入的异步本地持久性

本项测试中,我们在 Pulsar 和 Kafka 上使用了异步本地持久性保证,但未启用 Pulsar 绕过 Journal 写入。

下图 37 显示,追赶读对 Kafka 写入造成显著影响,但对 Pulsar 影响很小。Kafka 的 P99 发布延迟增加到 2-3 秒,而 Pulsar 的延迟则稳定在几毫秒到几十毫秒之间。

图37· 追赶读对 Pulsar 和 Kafka 发布延迟的影响(数据同步)

同步本地持久性

本项测试中,我们在同等同步本地持久性保证下对 Kafka 和 Pulsar 进行了比较。

下图 38 显示,追赶读对 Kafka 写入造成显著影响,但对 Pulsar 影响很小。Kafka P99 发布延迟增加到约 1.2 至 1.4 秒,而 Pulsar 的延迟则稳定在几毫秒到几十毫秒之间。

图38· 追赶读对 Pulsar 和 Kafka 发布延迟的影响(无数据同步)

结论

基于基准测试结果,我们得出以下结论:

•纠正配置和调优错误后,Pulsar 与 Kafka 在 Confluent 有限测试用例中实现的端到端延迟基本一致。•在同等持久性保证下,Pulsar 在模拟实际应用场景的工作负载上性能优于 Kafka。•以上测试中,改变了持久性保证设置、订阅、分区和客户端数量,结果表明 Pulsar 在延迟和 I/O 隔离方面均明显优于 Kafka。
说明:表 1、表 6、表 11 为测试报告 PDF 版 / 网页版索引表,微信排版中删除,不影响报告结果数据及阅读。

相关阅读

•Pulsar和Kafka基准测试:Pulsar性能精准解析(完整版)•Pulsar 与 Kafka 全方位对比(上篇):功能、性能、用例•Pulsar 与 Kafka 全方位对比(下篇):案例、特性、社区•Apache Pulsar 与 Apache Kafka 在金融场景下的性能对比分析•Pulsar vs Kafka,CTO 如何抉择?•架构师的选择,Pulsar还是Kafka?

点击阅读原文,为 Apache Pulsar 点赞!

Pulsar 和 Kafka 基准测试报告(完整版)相关推荐

  1. Pulsar和Kafka基准测试:Pulsar性能精准解析(完整版)

    关于 Apache Pulsar Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息.存储.轻量化函数式计算为一体,采用计算与存储分离架构设计,支 ...

  2. 完整版 | 2021 年 Apache Pulsar 用户调查报告

    本篇文章翻译自 StreamNative 博客,作者郭斯杰.Carolyn King.本调查报告翻译由两位社区志愿者 Mattisonchao 与刘梓霖联合完成,特此感谢! 简介 在过去一年的社区观察 ...

  3. 计算机应用基础全套ppt,计算机应用基础全套PPT电子教案(完整版).ppt

    计算机应用基础全套PPT电子教案(完整版) 计算机应用基础;第一节 计算机概述第二节 计算机系统第三节 认识微型计算机第四节 计算机中信息的表示;一.计算机的定义二.计算机的产生和发展三.计算机的特点 ...

  4. 2018大数据培训学习路线图(详细完整版)

    2018大数据培训学习路线全课程目录+学习线路详解(详细完整版) 第一阶段:大数据基础Java语言基础阶段 1.1:Java开发介绍 1.1.1 Java的发展历史 1.1.2 Java的应用领域 1 ...

  5. android架构师解压密码,咕泡Java架构师第三期完整版

    课程目录:咕泡三Java架构师VIP培训班 2019年3月开班 [138.G] ┣━━第1部分:架构师内功心法 [16.9G] ┃ ┣━━01-为什么要从设计模式开始及工厂模式详解 [561.2M] ...

  6. 测绘工程与计算机论文,(完整版)测绘工程毕业论文.doc

    (完整版)测绘工程毕业论文.doc (完整版)测绘工程毕业论文 2006级工程测量专业函授毕业论文 RTK技术在线路测量中的应用 学 院:武汉大学测绘学院 专 业:工程测量 姓 名:邱仁华 指导老师: ...

  7. python接口自动化测试框架实战从设计到开发_【B0753】[java视频教程]Python接口自动化测试框架设计到开发完整版视频教程 it教程...

    Java视频教程名称:Python接口自动化测试框架设计到开发完整版视频教程   java自学网[javazx.com]  Python视频教程   it教程 Java自学网收集整理 java论坛&q ...

  8. 跳出任务管理的泥沼,拥抱甘特图的怀抱(完整版)

    跳出任务管理的泥沼,拥抱甘特图的怀抱(完整版) 写这篇文章,我不是要黑任何一个任务管理类的App或者方法论.相反,我是一个工具控,在试用各种任务管理类App上总是不遗余力.常见的Things 3,To ...

  9. 2017App Store 最新完整版审核指南

    近日,苹果更新了最新的App Store审核指南,新版指南本身核心内容并没有任何变化,但其规划得更有条理,且包含更多背景以便理解.在后续页面中,您会发现这些准则已被清晰地划分为五个部分:安全.性能.业 ...

最新文章

  1. 6个你必须知道的机器学习的革命性的教训
  2. 微软Windows 7实现10秒启动的背后
  3. 大唐波斯将军 机器人_参观长沙博物馆“粟特人在大唐”文物展,感叹多元文明的交融互鉴...
  4. java与json,java与json
  5. python报错处理_python mysql 断连报错处理
  6. Linux命令之 mkfs -- 在特定的分区创建 Linux 文件系统
  7. 仿形靠模的计算机设计方法,仿形靠模的计算机设计方法.pdf
  8. 苹果禁用FaceTime多人聊天功能:漏洞将很快修复
  9. Spring 框架学习 有用
  10. 如何绘制平台框架的设计图:使用UML工具
  11. 征集 | AAAI 2021线下论文预讲会讲者征集
  12. linux fread函数的用法,fread和fwrite用法详解
  13. 商城GW-SHOP,基于 微信小程序 + springboot + vue 技术构建
  14. python判断素数的函数_python判断是否为素数
  15. 大学生职业生涯规划书性格特征_个人职业生涯规划书性格分析范文-职业规划书性格分析...
  16. Blender图解教程:手把手教你独立游戏开发必备的极简式贴图法
  17. 给开酒馆的小白六句忠告(下)
  18. 实现可点击的幸运大转盘
  19. 究竟什么时候该看哪个后视镜?老司机用经验告诉你答案
  20. ADB打开蓝牙,给蓝牙wifi 芯片上下电

热门文章

  1. python time模块sleep之进度条应用
  2. node插件, MD5密码加密 与 解密
  3. Focusky教程 | 输出Focusky网页格式为什么打不开超链接?
  4. mklink 创建链接(当文件已存在时,无法创建该文件||位置不可用)
  5. 正则表达式 1-100的整数
  6. Python Scrap框架教学,爬取某食品论坛数据
  7. java通过扫码枪获取数据
  8. ubuntu20.04 火狐打开b站 视频空白 评论空白问题
  9. 微信小程序开发合同样本
  10. 自动喷水灭火系统设计规范