Вопрос проверяет понимание того, как Kafka хранит сообщения на диске и за счет чего достигается высокая производительность.
Kafka хранит данные на диске в виде последовательных логов. Каждый partition представлен набором файлов сегментов. Сообщения дописываются в конец файлов, что делает запись очень быстрой. Старые данные удаляются или архивируются по политикам хранения. Kafka не изменяет сообщения после записи.
Физическое хранение данных в Kafka — это организация сообщений в виде append-only логов на диске.
Каждый partition хранится отдельно и состоит из:
Log segment файлов с данными
Index файлов для быстрого поиска
Time index файлов для поиска по времени
Log segment — это файл, содержащий последовательные сообщения:
сообщения только добавляются в конец
файлы имеют ограниченный размер
при достижении лимита создается новый сегмент
Kafka достигает высокой производительности за счет:
Последовательной записи на диск
Минимального количества random access
Использования page cache ОС
Отсутствия обновлений и удалений внутри файлов
Kafka может:
хранить данные ограниченное время
хранить данные до достижения заданного размера
комбинировать оба подхода
Удаление происходит целыми segment файлами, а не отдельными сообщениями.
Kafka хранит данные как неизменяемые последовательные логи, что позволяет эффективно работать с диском и обеспечивать высокую пропускную способность.