背景
pulsar 将延时消息的索引保存在内存中,在 Broker 重启的时候需要将磁盘上的索引冲放到内存中来,如果重建索引的耗时过久,将会影响延时消息的时间准确性。
测试目的
- 测试 Broker 重启时重建延时消息索引的时间,评估延迟是否可接受
- 测试影响 Broker 重建延时消息索引的因素,包括
- 消息体大小
- 重放消息数量
- Subscription 数量
- Consume 数量
测试方案
在本地部署 Pulsar Standalone 进行测试,每个 case 测试 5 次,记录测试结果,测试流程如下图所示:
![](/2021/10/09/testing-of-pulsar-delay-message-replay-on-restart/local-delayed-message-test-flow.jpg)
- 启动 Broker
- 启动 Producer,向测试 Topic 生产 200W 条消息,延时 1 小时
- 向测试 Topic 生成 16W 条消息,延时 5 分钟
- Kill Broker
- 启动 Consumer,消费 10 条消息,记录下第一条消息的消费时间
- 启动 Broker
- Conusmer 退出后,KIll -9 杀 Broker,转 4,直到收集到 10 个测试结果
测试环境及参数说明
- Broker 数量 1
- Topic 数量 1
- 消息数量 200W
- 消息种类 延时消息
- Producer 数量 16
- Consumer 数量 1
- 单条消息大小
- 100B
- 1KB
- 10KB
- 测试机器 Macbook Pro 20 款
- CPU 4c 2GHz
- 内存 16GB
测试结论
单次消息重放的延迟如下表所示,可以得出结论
基准
下表为 broker 重启后消费第一条消息的耗时,作为 Broker 启动耗时的基准
次数/消息体大小/延迟(s) | 100B | 1KB | 10KB |
---|---|---|---|
1 | 20.897 | 21.266 | 22.3 |
2 | 22.634 | 18.350 | 21.592 |
3 | 19.401 | 22.194 | 20.199 |
4 | 22.501 | 19.882 | 21.795 |
5 | 21.313 | 21.904 | 24.051 |
6 | 21.233 | 22.187 | 21.835 |
7 | 21.232 | 23.313 | 24.541 |
8 | 22.695 | 20.459 | 20.21 |
9 | 19.793 | 21.845 | 20.858 |
10 | 19.642 | 22.579 | 20.925 |
min | 19.401 | 18.35 | 20.199 |
max | 22.695 | 23.313 | 24.541 |
avg | 21.134 | 21.397 | 21.831 |
结论
如下图所示,Broker 启动到 Consumer 消费到第一条消息的时间基本为 20s,与消息体本身的大小基本无关。
![](/2021/10/09/testing-of-pulsar-delay-message-replay-on-restart/baseline.png)
Case 1 消息体大小 → 重放时间
次数/消息体大小/延迟(s) | 100B | 1KB | 10KB |
---|---|---|---|
1 | 56.967 | 64.377 | 78.725 |
2 | 58.098 | 65.492 | 87.969 |
3 | 59.261 | 67.188 | 71.241 |
4 | 62.790 | 78.362 | 82.823 |
5 | 55.250 | 62.649 | 78.524 |
6 | 56.698 | 66.623 | 86.247 |
7 | 57.641 | 63.832 | 77.722 |
8 | 63.726 | 63.275 | 85.135 |
9 | 57.045 | 62.898 | 88.610 |
10 | 59.613 | 64.909 | 84.985 |
min | 55.256 | 2.649 | 71.241 |
max | 63.726 | 78.362 | 88.61 |
avg | 58.708 | 965.9605 | 82.1981 |
结论
如下图所示,重放 2M 延时消息的耗时约为 40 ~ 60 s(减掉基准启动时间之后),随消息体大小增加而增加。
![](/2021/10/09/testing-of-pulsar-delay-message-replay-on-restart/case1.png)
Case 2 重放消息数量 → 重放时间
次数/消息数量/延迟(s) | 2M | 5M | 10M |
---|---|---|---|
1 | 56.967 | 129.301 | 199.07 |
2 | 58.098 | 148.14 | 186.66 |
3 | 59.261 | 110.748 | 201.107 |
4 | 62.79 | 109.004 | 190.389 |
5 | 55.25 | 124.509 | 181.921 |
6 | 56.698 | 108.119 | 183.779 |
7 | 57.641 | 106.763 | 193.303 |
8 | 63.726 | 124.127 | 186.575 |
9 | 57.045 | 107.763 | 184.699 |
10 | 59.613 | 106.83 | 185.984 |
min | 55.25 | 106.763 | 181.921 |
max | 63.726 | 148.14 | 201.107 |
avg | 58.7089 | 117.5304 | 189.3487 |
如下图,随着重放消息数量增长,耗时线性增长,重放消息量越大耗时越久
![](/2021/10/09/testing-of-pulsar-delay-message-replay-on-restart/case2.png)