从 apache pulsar 主题中检索所有过去的消息

Posted

技术标签:

【中文标题】从 apache pulsar 主题中检索所有过去的消息【英文标题】:Retrieving all past messages from a apache pulsar topic 【发布时间】:2021-05-01 10:19:29 【问题描述】:

我认为一个简单的例子可以更好地描述我的问题。

例如,假设有一个名为“A”的主题,我已经生成了 100 条消息(message1...message100)。我已经使用独占类型的订阅“A_1”消费并确认了消息 50。由于某种原因,我的应用程序关闭了,所以在重新启动应用程序时,我需要再次读取消息 1。这可以实现吗?我在想有可能创建一个新订阅(“A_2”)并再次开始阅读消息,但我不确定“A_2”是否会从 message1 或 message51 开始阅读......任何方向或提示都会很棒!

提前致谢

【问题讨论】:

【参考方案1】:

在 Pulsar 中保持消息的接收和确认是分开的,这意味着它可以编写您的应用程序,以便它只在不再需要消息时才确认消息。

当您确定应用程序不再需要该消息时,考虑仅确认该消息可能会很有用。

否则,@david-kjerrumgaard 所说的。

【讨论】:

【参考方案2】:

是的,这可以实现,所需要的只是创建一个新订阅,例如“A_2”,并使用 subscriptionInitialPosition 参数指定要从最早可用的消息开始消费消息,如下所示:

return getClient().newConsumer()
        .topic(topic)
        .subscriptionName("A_2") 
        .subscriptionType(SubscriptionType.Exclusive)
        .subscriptionInitialPosition(SubscriptionInitialPosition.Earliest)
        .subscribe();

这假设由于邮件保留政策而未删除邮件。

【讨论】:

以上是关于从 apache pulsar 主题中检索所有过去的消息的主要内容,如果未能解决你的问题,请参考以下文章

Apache Pulsar 主题复制随着集群大小的增加

Apache-Pulsar 吞吐量

在 Apache Pulsar 中使用注册模式发布到主题

Apache Pulsar 中的主题复制

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

在 Apache Pulsar 中授予命名空间权限