Обзор Kafka Tiered Storage
Обзор Tiered Storage
Kafka Tiered Storage — это опция, которая запускает многоуровневый подход к хранению данных в кластере Kafka, доступная начиная с версии Kafka 3.6.0.
После активации опции в Kafka для хранения устанавливается два уровня:
Лидер партиции, используя потоки, управляемые при помощи специальных компонентов 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-сегментами.
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. |