Является ли Apache Kafka системой для долгосрочного хранения данных?

«Является ли Apache Kafka системой для долгосрочного хранения данных?» — вопрос из категории Брокеры сообщений, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, Apache Kafka — это не система долгосрочного хранения, а распределённый потоковый брокер сообщений. Её основная цель — эффективная обработка потоков данных в реальном времени.

Почему Kafka не подходит для долгосрочного архивирования:

  1. Ограниченный срок хранения (Retention): Данные в топиках хранятся ограниченное время (по умолчанию 7 дней) или до достижения лимита размера.
  2. Отсутствие гарантий ACID: Kafka не предоставляет полных ACID-транзакций, как реляционные СУБД, что может привести к потере данных при сбоях.
  3. Оптимизация для чтения/записи потоков: Архитектура оптимизирована для последовательного доступа, а не для произвольных запросов к историческим данным.

Однако хранение возможно в ограниченном виде:

  • Retention можно увеличить через конфигурацию.
    # Хранение данных 30 дней или до 1 ТБ на раздел (partition)
    log.retention.hours=720
    log.retention.bytes=1099511627776
  • Для чтения «холодных» данных можно использовать компактирование топиков (log compaction), которое сохраняет последнее значение для каждого ключа.

Best Practice: Для долгосрочного хранения критичных данных используйте Kafka в связке со специализированными системами (например, S3, HDFS или OLAP-БД), куда данные сбрасываются через коннекторы (Kafka Connect).