Обзор Kafka Tiered Storage

Обзор Tiered Storage

Kafka Tiered Storage — это опция, которая запускает многоуровневый подход к хранению данных в кластере Kafka, доступная начиная с версии Kafka 3.6.0.

После активации опции в Kafka для хранения устанавливается два уровня:

  • Локальный уровень — локальные диски брокеров Kafka, хранящие сегменты лога аналогично обычным брокерам Kafka.

  • Удаленный уровень — системы хранения файлов (например, HDFS или S3), на которых хранятся закрытые сегменты лога.

Кafka Tiered Storage
Kafka Tiered Storage
Kafka Tiered Storage
Kafka Tiered Storage

Лидер партиции, используя потоки, управляемые при помощи специальных компонентов Remote Manager, копирует все закрытые сегменты в хранилище (период, по истечении которого закрытые сегменты отправляются во внешнее хранилище, определяется при помощи параметра брокера remote.log.manager.task.interval.ms). Далее лидер сохраняет и публикует ссылку, содержащую индексы и метаданные remote-сегмента — закрытого сегмента, сохраненного в хранилище (данные эпохи лидера, производителя, смещение и данные о хранении сегмента в хранилище). Закрытые сегменты удаляются с брокера по истечении времени локального хранения (local.retention.ms) или при достижении максимального размера локального хранения (local.retention.bytes).

Реплики, стремясь стать ISR, копируют данные, записанные на лидер, при этом кешируют ссылки к remote-сегментам.

Запись и удаление сообщений являются идемпотентными процессами и выполняются в виде транзакций.

Взаимодействие производителей и потребителей с брокерами Kafka не изменяется после включения опции Tiered Storage. Запись сообщений производится в активные сегменты, расположенные на локальном уровне, а для каждого запроса потребителя на чтение сообщения из удаленного уровня создается отдельный поток, который обслуживается при помощи Remote Manager компонентов, как и потоки для записи сегментов в хранилище.

Преимущества использования Tiered Storage

  • Возможность долговременного хранения данных во внешних хранилищах.

  • Уменьшение объема данных на брокерах Kafka, и, следовательно, объема данных, которые необходимо копировать во время восстановления и ребалансировки.

  • Упрощение эксплуатации больших кластеров Kafka с длительным хранением данных.

Архитектура Tiered Storage

После активации опции Tiered Storage на брокере Kafka запускаются компоненты, отвечающие за управление remote-сегментами.

Архитектура Kafka Tiered Storage
Архитектура Kafka Tiered Storage
Архитектура Kafka Tiered Storage
Архитектура Kafka Tiered Storage

RemoteLogManager — внутренний компонент, запускающийся на каждом брокере Kafka. Через него брокер взаимодействует с remote-сегментами. RemoteLogManager не имеет общедоступного API.

Постоянный компонент ReplicaManager, управляющий репликами партиций, вызывает RemoteLogManager для управления сегментами.

RemoteLogManager, в свою очередь, передает команду о копировании сегментов в хранилище или удалении их компоненту RemoteStorageManager и поддерживает соответствующие метаданные remote-сегмента для RemoteLogMetadataManager.

RemoteStorageManager — интерфейс, обеспечивающий жизненный цикл remote-сегментов журнала и индексов.

Remote Log Metadata Manager — интерфейс, обеспечивающий жизненный цикл метаданных remote-сегмента журнала со строго согласованной семантикой. Существует реализация по умолчанию, использующая внутренний топик __remote_log_metadata. Пользователи могут подключить свою собственную реализацию, если они намерены использовать другую систему для хранения метаданных remote-сегмента.

Ограничения Tiered Storage

  • После включения для отдельного топика опцию нельзя отключить.

  • Опцию невозможно использовать для топиков, в которых для политики очищения установлено значение compact.

  • Для существующего топика невозможно перенести сегменты обратно на локальные брокеры, увеличив время локального хранения данных.

  • Нельзя использовать с дисковым массивом (JBOD) в качестве локального брокера.

Kafka Tiered Storage в ADS

Опция Tiered Storage в ADS основана на реализации Aiven, которая к встроенному в Kafka RemoteStorageManager добавляет следующие возможности:

  • Сжатие сегментов при помощи механизма chunking — деление оригинальных сегментов на части и сжатие их перед отправлением в хранилище.

  • Шифрование сегментов с поддержкой ротации ключей.

  • Оптимизация числа обращений к удаленному хранилищу.

  • Абстракция удаленного хранилища в виде StorageBackend — контейнера байтовых массивов на основе сообщений ключ/значение.

Дополнительно в ADS реализована поддержка HDFS в качестве удаленного хранилища, для которой на основе решения Aiven разработан StorageBackend, обеспечивающий:

  • Поддержку конфигурационных XML-файлов.

  • Поддержку аутентификации при помощи Kerberos.

  • Экспорт метрик клиента HDFS.

Настройка Tiered Storage

Настройка работы опции Tiered Storage выполняется в конфигурационном файле /etc/kafka/conf/server.properties и состоит из нескольких блоков параметров:

  • Включение опции Tiered Storage при помощи параметров брокера remote.log.storage.system.enable или топика remote.storage.enable.

  • Настройка компонентов Remote Manager.

  • Настройка серверной части хранилища (storage backend).

  • Настройка кеша фрагментов выборки (chunking) — если это поддерживается в storage backend.

ПРИМЕЧАНИЕ

Настройка Tiered Storage в ADS при помощи интерфейса ADCM описана в статье Настройка и использование Tiered Storage.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней