非持久消息在吞吐量高时丢失

non-persistent message is lost when throughput is high

我发现即使我的 Pulsar 客户端已启动并且 运行,非持久性消息有时也会丢失。 那些非持久化的消息在吞吐量很高(很短的时间内超过1000条消息。我个人认为这并不高)时丢失。 如果我增加参数 receiverQueueSize 或将消息类型更改为持久消息,问题就消失了。

我查看了 Pulsar 源代码(我不确定这是最新的)

https://github.com/apache/pulsar/blob/35f0e13fc3385b54e88ddd8e62e44146cf3b060d/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/nonpersistent/NonPersistentDispatcherMultipleConsumers.java#L185

我认为如果没有消费者可以处理新到达的非持久消息,Pulsar 会简单地忽略那些非持久消息。 这里的“无消费者”是指

我的理解正确吗?

Pulsar 代理不会对 non-persistent 主题的消息进行任何缓冲,因此如果消费者未连接或已连接但跟不上生产者,消息将被简单地丢弃。

这样做是因为任何 in-memory 缓冲无论如何都会非常有限并且不足以改变任何语义。

Non-persistent 主题实际上是为数据丢失是可以接受的情况的用例而设计的(例如:传感器数据每 1 秒更新一次,您只关心最后一个值)。对于所有其他情况,持久性主题是可行的方法。