Ключевая особенность Кафки — возможность хранения сообщений в течение длительного времени.
У топика есть настройка
cleanup.policy. Она определяет, как Kafka будет удалять старые данные в партициях топика:➡️ DELETE — это режим по-умолчанию, при котором данные хранятся или в течение определенного времени (
retention.ms — по-умолчанию 7 дней) или до достижения партицией лимита размера в байтах (retention.bytes, по-умолчанию = -1, то есть отключено). Настройки времени хранения или лимита размера применяются к партиции.➡️ COMPACT — это режим, который позволяет хранить только последние версии сообщений с одинаковым ключом, удаляя устаревшие.
Например, мы пишем в Кафку данные пользователей. Ключ сообщения - userId.
В топике с cleanup.policy = COMPACT:
Приходит userId=41, name="Вася" → хранится.
Приходит userId=41, name="Василий" → старая запись с name="Вася" удаляется, но не мгновенно, а в фоновом режиме. В итоге останется только name="Василий".
Если Вася удалит свой профиль, запишем: userId=41, null → это tombstone (маркер удаления ключа), через заданное время (по-умолчанию 24 часа) эта запись удалится из лога.
COMPACT режим никогда не удаляет последнюю версию ключа, даже если она старая, пока не придёт новая или tombstone (null для этого ключа).
COMPACT режим не подходит там, где нам нужна вся история событий.
➡️ Гибридный режим использует оба подхода: оставляет последние версии ключей, а потом среди этих последних версий удаляет старые сегменты при превышении времени хранения или размера.
#kafka