сохранение журнала для реализации сообщения TTL - PullRequest
2 голосов
/ 15 марта 2020

мы планируем реализовать тайм-аут как часть API на основе Kafka, используя его возможности хранения на основе времени.

По сути, установка log.retention.ms = 10000 для истечения срока действия сообщений от команды topi c, если не обрабатывается в течение 10 секунд.

Интересно, будет ли это обеспечивать гарантию уровня сообщения (т.е. каждый сообщение доступно столько же времени), учитывая, что политики хранения работают на уровне сегмента журнала (на основе наибольшей отметки времени на сегмент).

Конечно, мы можем уменьшить log.segment.bytes, чтобы добиться более детального управления хранением, хотя не уверен насчет влияния на производительность.

любой совет?

Ник

1 Ответ

1 голос
/ 15 марта 2020

В Kafka параметры хранения являются нижними границами, ie Kafka гарантирует, что не удалит сообщение, пока не будут достигнуты пределы хранения.

На практике это означает, что сообщения могут дольше оставаться в журнале. чем их пределы хранения.

Кроме того, как вы сказали, Кафка работает на уровне сегмента журнала. Что касается времени, только после того, как последнее сообщение в сегменте становится старше, чем предел, этот сегмент становится пригодным для удаления. И это не относится к активному сегменту. Таким образом, удержание не может использоваться для предоставления в течение времени существования сообщения.

Я не знаю о вашем случае использования, но, возможно, взгляните на offsetsForTimes() и seek() API-интерфейсы у потребителя. Это позволяет выбрать то, что потребитель будет читать в зависимости от времени.

Наконец, если вам действительно нужен сильный TTL для сообщения, возможно, Кафка не лучший инструмент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...