4

我有一个应用程序在特定主题下向 Pulsar 生成消息,并在完成后关闭应用程序;同时,不存在阅读该主题的消费者。

过了一段时间,当我创建一个消费者,想把写入的数据读出来的时候,我发现我写的主题被Pulsar删除了,所有的数据都丢失了。

如何禁用 Pulsar 中非活动主题的自动删除?

4

2 回答 2

6

通常,有两种方法可以实现这一点。

  • 首先,保留策略将数据保留至少 X 小时(直到 Y GB),您可以pulsar-admin在命名空间级别将其设置为无限。
  pulsar-admin namespaces set-retention my-tenant/my-ns \
  --size 1T \
  --time -1
  • 其次,手动设置也可以禁用不活动主题brokerDeleteInactiveTopicsEnabled=falseconf/broker.conf删除。

建议同时设置以上两个设置以进行正确控制。

于 2019-07-24T07:20:57.677 回答
2

如果您使用 Consumer 客户端界面或 REST API 在主题上创建订阅,则会保留消息,直到它们被确认。订阅积压中未确认的消息将永远不会被删除,除非您配置一个生存时间 (TTL),它会在一段时间后自动确认该消息。

不在订阅中或已确认的消息将根据保留策略保留在主题中。您可以指定要按大小或时间保留的消息。

如果你想使用一个 Pulsar 主题,比如一个保存所有消息直到它们被确认的队列,这听起来像是你想要做的,你只需要使用带有命名订阅的消费者客户端接口。然后,当您的应用程序处于非活动状态时,您的所有消息都将保留在主题中。并且由于该主题仍有消息,因此不会自动删除(尽管您可以禁用该行为,如 yjshen 的答案中所述)。

于 2020-01-10T13:02:39.693 回答