从文档: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,它就不会“保留”它,意思是让它承认?还是直接扔掉?