2

从文档:https ://pulsar.apache.org/docs/en/cookbooks-retention-expiry/#get-the-ttl-configuration-for-a-namespace ,积压之间的区别有点令人困惑配额和 TTL。

据我目前了解,消息到达代理,代理将找出该主题的所有订阅,并检索他们的积压,并将消息放入这些积压。如果此消息被一个订阅确认,它将从其积压中删除(积压是每个订阅)。如果该消息不在任何积压中(意味着所有订阅都已确认),则该消息被视为已确认,然后将启动保留策略,以决定是否需要将其删除或保留一段时间。

如果一条消息在一段时间内未在一个 backlog 中得到确认,并且 backlog 配额达到大小限制,那么 backlog 保留策略就会启动。所以这更多的是关于大小而不是时间。如果我们使用consumer_backlog_eviction,这条消息将从积压中被丢弃,但问题是,这是否被视为已确认?所以第一个保留政策开始了?

而 TTL,如果一条消息在一段时间内没有得到确认,它会从所有积压中删除吗?然后被视为已确认,然后让第一个保留策略处理它?

更新:

更准确地说这个问题:

在积压配额文件中,它说:

consumer_backlog_eviction:代理将开始丢弃积压消息

丢弃意味着,让它被承认?这样全球保留政策就可以启动了吗?

producer_request_hold:代理将持有而不是持久化生产请求有效负载

是不是说,它不会将新消息放入积压中,但是对于那些新来的消息,它们是否会自动确认(假设当时只有一个订阅)?这是否会阻止真正的生产者(我想不会,只是经纪人不会再将新消息放入积压中)

(对于 TTL)如果磁盘空间是一个问题,您可以设置一个生存时间 (TTL),以确定未确认消息将保留多长时间。

同样,如果超过了 TTL,它就不会“保留”它,意思是让它承认?还是直接扔掉?

4

1 回答 1

1

如果我们使用 consumer_backlog_eviction,这条消息将从 backlog 中丢弃,但问题是,这是否被视为已确认?所以第一个保留政策开始了?

该消息将被确认并标记为删除。然后,确认消息的保留策略将在某个时候根据配置启动。

而 TTL,如果一条消息在一段时间内没有得到确认,它会从所有积压中删除吗?然后被视为已确认,然后让第一个保留策略处理它?

TTL 应该适用于所有积压,并且过时的未使用的消息将被自动确认。确认消息的保留策略将再次生效。

于 2020-03-17T10:51:04.440 回答