В Kafka параметры хранения являются нижними границами, ie Kafka гарантирует, что не удалит сообщение, пока не будут достигнуты пределы хранения.
На практике это означает, что сообщения могут дольше оставаться в журнале. чем их пределы хранения.
Кроме того, как вы сказали, Кафка работает на уровне сегмента журнала. Что касается времени, только после того, как последнее сообщение в сегменте становится старше, чем предел, этот сегмент становится пригодным для удаления. И это не относится к активному сегменту. Таким образом, удержание не может использоваться для предоставления в течение времени существования сообщения.
Я не знаю о вашем случае использования, но, возможно, взгляните на offsetsForTimes()
и seek()
API-интерфейсы у потребителя. Это позволяет выбрать то, что потребитель будет читать в зависимости от времени.
Наконец, если вам действительно нужен сильный TTL для сообщения, возможно, Кафка не лучший инструмент.