Retention в Kafka — это политика хранения сообщений в топике, определяющая, как долго или какой максимальный объем логов брокер будет держать на диске. Когда лимит по времени или размеру достигается, старые сегменты лога удаляются независимо от того, прочитали их потребители или нет. Настраивается retention на уровне брокера и/или конкретного топика через конфигурационные параметры.
В Kafka данные в каждом разделе топика хранятся как последовательный лог, разбитый на сегменты. Retention определяет, сколько этих старых сегментов Kafka будет хранить, прежде чем начать их удалять, чтобы освободить место на диске.
Ключевые моменты:
retention.ms / log.retention.hours), либо по размеру (например, максимум 10 GB на раздел — retention.bytes), либо комбинацией обоих.Есть два основных режима очистки, задаваемых параметром log.cleanup.policy:
delete — классический retention по времени/размеру: устаревшие сегменты полностью удаляются, сообщения в них перестают быть доступны.compact (лог-компактация) — для ключевых записей Kafka старается хранить только последнюю версию сообщения по каждому ключу, удаляя более старые версии, но не привязываясь жёстко к сроку хранения; часто используется для change-log’ов и кэшей.Эти режимы можно комбинировать (delete,compact), тогда одновременно действует и retention по времени/размеру, и периодическая компактация.
Важно понимать различие между retention и offset’ами потребителей:
__consumer_offsets).При выборе настроек retention нужно балансировать между требованиями к истории (возможность переиграть события, расследовать инциденты, обучать модели и т.п.) и стоимостью хранения/нагрузкой на кластер. На собеседовании полезно подчеркнуть, что в продакшене обычно явно задают retention для бизнес-критичных топиков и периодически мониторят размер логов и долю свободного места на дисках.
Отметьте свой прогресс