pulsar 延时消息重放时间测试

背景

pulsar 将延时消息的索引保存在内存中,在 Broker 重启的时候需要将磁盘上的索引冲放到内存中来,如果重建索引的耗时过久,将会影响延时消息的时间准确性。
测试目的

  1. 测试 Broker 重启时重建延时消息索引的时间,评估延迟是否可接受
  2. 测试影响 Broker 重建延时消息索引的因素,包括
    1. 消息体大小
    2. 重放消息数量
    3. Subscription 数量
    4. Consume 数量

测试方案

在本地部署 Pulsar Standalone 进行测试,每个 case 测试 5 次,记录测试结果,测试流程如下图所示:

  1. 启动 Broker
  2. 启动 Producer,向测试 Topic 生产 200W 条消息,延时 1 小时
  3. 向测试 Topic 生成 16W 条消息,延时 5 分钟
  4. Kill Broker
  5. 启动 Consumer,消费 10 条消息,记录下第一条消息的消费时间
  6. 启动 Broker
  7. Conusmer 退出后,KIll -9 杀 Broker,转 4,直到收集到 10 个测试结果

测试环境及参数说明

  1. Broker 数量 1
  2. Topic 数量 1
  3. 消息数量 200W
  4. 消息种类 延时消息
  5. Producer 数量 16
  6. Consumer 数量 1
  7. 单条消息大小
    1. 100B
    2. 1KB
    3. 10KB
  8. 测试机器 Macbook Pro 20 款
    1. CPU 4c 2GHz
    2. 内存 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,与消息体本身的大小基本无关。

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(减掉基准启动时间之后),随消息体大小增加而增加。

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

如下图,随着重放消息数量增长,耗时线性增长,重放消息量越大耗时越久