Pulsar 消费者中“最新”和“最早”的意外行为

Posted

技术标签:

【中文标题】Pulsar 消费者中“最新”和“最早”的意外行为【英文标题】:Unexpected behavior for "latest" and "earliest" in Pulsar consumer 【发布时间】:2021-11-11 15:59:12 【问题描述】:

在玩弄消费者的初始位置时,我遇到了一些意想不到的行为。来自文档:

“最新”= LIFO 队列

“最早” = FIFO 队列。

我看到的是:

“最新”在创建订阅之前忽略所有消息。然后它成为一个 FIFO 队列,从创建订阅的点开始。在消费者上使用“最新”时,请参阅下面的输出,查看 ID 和发布时间戳显示 FIFO 行为。

receiving message
<pulsar.Message object at 0x7f011ec92220>
Received message 'b'Hello-10-lifo-v3'' id='(15537,40,-1,-1)' time='0' publish_time='1631809207044'
receiving message
<pulsar.Message object at 0x7f011ebfa310>
Received message 'b'Hello-9-lifo-v3'' id='(15537,41,-1,-1)' time='0' publish_time='1631809207165'
receiving message
<pulsar.Message object at 0x7f011ec92220>
Received message 'b'Hello-8-lifo-v3'' id='(15537,42,-1,-1)' time='0' publish_time='1631809207256'
receiving message
<pulsar.Message object at 0x7f011ebfa310>
Received message 'b'Hello-7-lifo-v3'' id='(15537,43,-1,-1)' time='0' publish_time='1631809207307'
receiving message
<pulsar.Message object at 0x7f011ec92220>
Received message 'b'Hello-6-lifo-v3'' id='(15537,44,-1,-1)' time='0' publish_time='1631809207396'
receiving message
<pulsar.Message object at 0x7f011ebfa310>
Received message 'b'Hello-5-lifo-v3'' id='(15537,45,-1,-1)' time='0' publish_time='1631809207463'
receiving message
<pulsar.Message object at 0x7f011ec92220>
Received message 'b'Hello-4-lifo-v3'' id='(15537,46,-1,-1)' time='0' publish_time='1631809207512'
receiving message
<pulsar.Message object at 0x7f011ebfa310>
Received message 'b'Hello-3-lifo-v3'' id='(15537,47,-1,-1)' time='0' publish_time='1631809207608'
receiving message
<pulsar.Message object at 0x7f011ec92220>
Received message 'b'Hello-2-lifo-v3'' id='(15537,48,-1,-1)' time='0' publish_time='1631809207675'
receiving message
<pulsar.Message object at 0x7f011ebfa310>
Received message 'b'Hello-1-lifo-v3'' id='(15537,49,-1,-1)' time='0' publish_time='1631809207723'

当使用“最早”时,我得到了真正的 FIFO 队列,自主题开始以来的所有消息都在 FIFO 中接收。输出在id和发布时间戳方面与上面基本相同。

这是预期的行为吗?

谢谢!

【问题讨论】:

【参考方案1】:

Pulsar 只有 FIFO 行为。 “最早”和“最新”仅指您在队列中开始消费的位置:您想要获取所有过去未确认的消息还是只获取新传入的消息?详情请见https://pulsar.apache.org/docs/en/concepts-clients/。

【讨论】:

我想得到所有未确认的消息,即“最早的”。我对“最新”的定义感到困惑。文档暗示 LIFO 表示“最新”,即最新消息优先,而不是订阅开始时的 FIFO。

以上是关于Pulsar 消费者中“最新”和“最早”的意外行为的主要内容,如果未能解决你的问题,请参考以下文章

在 Pulsar 中,有没有办法清理没有附加消费者的旧的持久订阅?

Boost Threads Producer/Consumer 意外行为

Pulsar

从不同的独占订阅消费时,Pulsar 分区主题是不是支持全局排序?

Spring Boot整合Pulsar生产和消费消息 简单示例代码

Spring Boot整合Pulsar生产和消费消息 简单示例代码