Pulsar 中意外的积压大小
Unexpected backlog size in Pulsar
我正在使用 Pulsar 进行服务之间的通信,但我在对生产者和消费者进行的非常简单的测试中遇到了问题。
在 JUnit 4 测试中,我启动了(我自己的包装器)一个 ZooKeeper 服务器、一个 BookKeeper bookie 和一个 PulsarService
;配置应该挺标准的。
测试可以总结为以下步骤:
- 建立生产者;
- 构建一个消费者(例如,一个 reader 的 Pulsar 主题);
- 检查message backlog(使用精确积压);
- 这是通过
PulsarAdmin
#topics
#getStats
#subscriptions
获取当前订阅来完成的
- 我希望它是 0,因为没有发送任何关于该主题的内容,但有时它是 1,但这似乎是另一个问题...
- 建立一个新的生产者并同步向主题发送消息;
- 建立一个新的消费者并阅读该主题的消息;
- 我预计会积压一条消息,而我实际上阅读了一条
- 新建生产者,同步发送4条消息;
- 再次获取消息,使用在第 5 步读取的消息 ID 作为 start message ID;
- 我预计这里会积压 4 条消息,大多数时候这个值是正确的,但是 运行 测试大约十次我总是得到 2 或 5
我尝试调试测试,但无法弄清楚这些值的来源;我是不是误会了什么?
您可以尝试(如果还没有)的事情:
- 要求进行精确的积压测量。默认情况下,它只是被估计为获得精确测量是一项成本更高的操作。为此使用
admin.topics().getStats(topic, true)
。 (参见 https://github.com/apache/pulsar/blob/724523f3051def9577d6bd27697866c99f4a7b0e/pulsar-client-admin-api/src/main/java/org/apache/pulsar/client/admin/Topics.java#L862)
- 在生产者端停用批处理。
msgBacklog
中返回的数字是条目数,因此在单个条目中批处理的多条消息将计为 1。请参阅相关问题:https://github.com/apache/pulsar/issues/7623。它可以解释为什么如果将 4 条消息放在同一批中,您会看到 msgBacklog
的值为 2。请注意,停用批处理会对性能产生巨大影响。
我正在使用 Pulsar 进行服务之间的通信,但我在对生产者和消费者进行的非常简单的测试中遇到了问题。
在 JUnit 4 测试中,我启动了(我自己的包装器)一个 ZooKeeper 服务器、一个 BookKeeper bookie 和一个 PulsarService
;配置应该挺标准的。
测试可以总结为以下步骤:
- 建立生产者;
- 构建一个消费者(例如,一个 reader 的 Pulsar 主题);
- 检查message backlog(使用精确积压);
- 这是通过
PulsarAdmin
#topics
#getStats
#subscriptions
获取当前订阅来完成的
- 我希望它是 0,因为没有发送任何关于该主题的内容,但有时它是 1,但这似乎是另一个问题...
- 这是通过
- 建立一个新的生产者并同步向主题发送消息;
- 建立一个新的消费者并阅读该主题的消息;
- 我预计会积压一条消息,而我实际上阅读了一条
- 新建生产者,同步发送4条消息;
- 再次获取消息,使用在第 5 步读取的消息 ID 作为 start message ID;
- 我预计这里会积压 4 条消息,大多数时候这个值是正确的,但是 运行 测试大约十次我总是得到 2 或 5
我尝试调试测试,但无法弄清楚这些值的来源;我是不是误会了什么?
您可以尝试(如果还没有)的事情:
- 要求进行精确的积压测量。默认情况下,它只是被估计为获得精确测量是一项成本更高的操作。为此使用
admin.topics().getStats(topic, true)
。 (参见 https://github.com/apache/pulsar/blob/724523f3051def9577d6bd27697866c99f4a7b0e/pulsar-client-admin-api/src/main/java/org/apache/pulsar/client/admin/Topics.java#L862) - 在生产者端停用批处理。
msgBacklog
中返回的数字是条目数,因此在单个条目中批处理的多条消息将计为 1。请参阅相关问题:https://github.com/apache/pulsar/issues/7623。它可以解释为什么如果将 4 条消息放在同一批中,您会看到msgBacklog
的值为 2。请注意,停用批处理会对性能产生巨大影响。