Вопрос проверяет понимание того, как Kafka управляет жизненным циклом данных и как настройки retention влияют на диск, производительность и возможность переобработки данных.
Retention в Kafka определяет, как долго и в каком объёме хранятся сообщения в топике. Данные могут удаляться по времени или по размеру. Также retention зависит от того, используется ли log compaction. Эти настройки напрямую влияют на использование диска и возможность перечитывать старые данные. Неправильные значения могут привести либо к потере данных, либо к переполнению дисков.
Kafka по умолчанию не удаляет сообщения после чтения. Вместо этого она хранит данные согласно правилам retention, которые настраиваются для каждого топика.
Retention policy — это набор правил, по которым Kafka определяет, какие данные можно удалить из топика.
Самый распространённый вариант.
retention.msОпределяет:
сколько времени сообщения хранятся в топике;
после какого срока они могут быть удалены.
Пример:
retention.ms = 7 days — сообщения хранятся примерно неделю.
Важно:
удаление происходит сегментами, а не по одному сообщению;
фактическое время хранения может быть чуть больше заданного.
Подходит для:
event-логов;
аналитики;
возможности переобработки данных за фиксированный период.
Этот механизм ограничивает объём данных на диске.
retention.bytesОпределяет:
максимальный размер данных для топика или партиции.
Когда лимит превышен:
Kafka удаляет самые старые сегменты.
Полезно, если:
диск ограничен;
поток данных неравномерный;
важнее контролировать размер, чем точное время хранения.
Kafka применяет правило:
удалить данные, если выполнено хотя бы одно условие.
То есть:
если данные старые или
если превышен размер.
Это даёт гибкость, но требует аккуратной настройки.
Если у топика включён cleanup.policy=compact:
retention по времени работает иначе;
Kafka гарантирует сохранение последнего сообщения по ключу.
Возможные варианты:
compact — только актуальные значения;
delete — классическое удаление;
compact,delete — гибридный режим.
Частые проблемы в продакшене:
слишком маленький retention → нельзя восстановить данные;
слишком большой retention → заканчивается диск;
одинаковые настройки для всех топиков без учёта их смысла.
Retention-настройки определяют, сколько данных Kafka может «помнить». Их нужно подбирать исходя из бизнес-требований, возможностей диска и необходимости переобработки данных. Универсальных значений не существует.