Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Kafka: log, compaction

Что такое log compaction и в каких сценариях он применяется?

Вопрос проверяет понимание альтернативного механизма очистки данных в Kafka и умение выбирать правильную стратегию хранения.

Короткий ответ

Log compaction — это режим хранения, при котором Kafka сохраняет только последнее сообщение для каждого ключа. Старые версии сообщений с тем же ключом могут быть удалены. При этом порядок сообщений по времени не является главным. Такой подход полезен для хранения актуального состояния, а не полной истории событий. Log compaction часто используют для state-топиков и справочников.

Длинный ответ

По умолчанию Kafka удаляет данные по времени или размеру (retention). Однако есть сценарии, где важно хранить последнее состояние, а не всю историю. Для этого и существует log compaction.

Определение

Log compaction — это механизм очистки лога, при котором Kafka гарантирует сохранение последнего сообщения для каждого ключа.

1. Как работает log compaction

При включённой компакции Kafka:

  • анализирует сегменты партиции;

  • для каждого ключа оставляет последнее сообщение;

  • старые версии того же ключа помечает на удаление.

Важно:

  • компакция происходит асинхронно;

  • старые сообщения могут существовать некоторое время.

2. Что сохраняется гарантированно

Kafka гарантирует:

  • если сообщение с ключом было записано, то последняя версия ключа останется;

  • сообщения без ключа не участвуют в компакции.

Это означает:

  • ключ обязателен для compaction;

  • порядок сообщений становится вторичным.

3. Типовые сценарии использования

Log compaction применяют, когда нужен «слепок состояния».

3.1. Хранение состояния (state store)

Примеры:

  • текущий статус заказа;

  • профиль пользователя;

  • настройки системы.

Каждый новый апдейт перезаписывает предыдущее состояние.

3.2. Event sourcing + состояние

Частая комбинация:

  • отдельный топик с полной историей событий (retention);

  • отдельный compacted-топик с актуальным состоянием.

3.3. Системные топики

Kafka сама использует compaction:

  • __consumer_offsets;

  • некоторые служебные данные.

4. Удаление ключей (tombstone)

Чтобы удалить ключ:

  • продюсер отправляет сообщение с ключом и null-value;

  • Kafka со временем удаляет ключ полностью.

Пример идеи:

producer.send("users", key=b"user-1", value=None)

5. Ограничения и подводные камни

Log compaction — не универсальное решение.

Ограничения:

  • нельзя восстановить полную историю изменений;

  • компакция не происходит мгновенно;

  • чтение может вернуть «устаревшие» данные, если компакция ещё не прошла.

6. Краткий вывод

Log compaction стоит использовать, когда нужен актуальный снимок состояния по ключу, а не полная история событий. Это мощный инструмент для state-топиков, но он не заменяет классический retention для event-логов.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    8

Навыки

  • Kafka

    Kafka

Ключевые слова

#log

#compaction

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.