我们正在考虑通过利用基于时间的保留功能,将超时作为基于kafka的api的一部分来实现。
基本上,设置 log.retention.ms = 10000
使命令主题中的消息在10秒内未处理时过期。
我想知道,如果保留策略在日志段级别上运行(基于每个段的最大时间戳),这是否会提供消息级别的保证(即每个消息都有相同的可用时间)。
当然,我们可以减少 log.segment.bytes
为了实现更细粒度的保留控制,不确定对性能的影响。
有什么建议吗?
尼克
我们正在考虑通过利用基于时间的保留功能,将超时作为基于kafka的api的一部分来实现。
基本上,设置 log.retention.ms = 10000
使命令主题中的消息在10秒内未处理时过期。
我想知道,如果保留策略在日志段级别上运行(基于每个段的最大时间戳),这是否会提供消息级别的保证(即每个消息都有相同的可用时间)。
当然,我们可以减少 log.segment.bytes
为了实现更细粒度的保留控制,不确定对性能的影响。
有什么建议吗?
尼克
1条答案
按热度按时间h7wcgrx31#
在kafka中,保留设置是下限,即kafka保证在达到保留限制之前不会删除邮件。
实际上,这意味着消息在日志中的保留时间可以超过其保留限制。
正如你所说,Kafka是在日志段级别上运行的。对于时间保留,只有当段中的最新邮件超过限制时,此段才有资格删除。这不适用于活动段。因此,保留不能用于提供每封邮件的生存时间。
我不知道你的用例,但也许可以看看
offsetsForTimes()
以及seek()
消费者的API。这些允许用户根据时间选择要阅读的内容。最后,如果你真的需要强大的每消息ttl,也许Kafka不是最好的工具。