Источник Хабрахабр.ru, Москва
Заголовок Присматриваемся к Kafka tiered storage — 2
Дата 20240702

Этим цветом    обозначаются известные системе слова и выражения, принимавшие участие в анализе данного текста, а таким    - идентифицированные, то есть соотнесенные с каким-либо объектом онтологической базы

============= Обработанный текст:
Присматриваемся к Kafka tiered storage — 2

Присматриваемся к Kafka tiered storage — 2

Уровень сложности

Средний

Время на прочтение

23 мин

Количество просмотров

31

Блог компании ВТБ• Экономика » Финансы » Банк » Банки Группы ВТБ » Банк ВТБ

• Объект организация » Организации по алфавиту » Организации на Оа » Банк ВТБ

• Объект организация » Организации по алфавиту » Организации на Гр » Группа ВТБ » Банки Группы ВТБ » Банк ВТБ
Программирование• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование

• Информационные технологии » Информатика » Программирование

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование
* Java• Информационные технологии » Информатика » Программирование » Java

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Java

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Java
* Распределенные системы• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Распределенные Системы

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Распределенные Системы
*

Туториал

Добрый день, уважаемые ИТ-ники. На связи Михаил Голованов . Продолжаем
увлекательные эксперименты с tiered storage в Apache Kafka. Первая часть «
Присматриваемся к Kafka tiered storage ». Во второй части статьи починим, что
не смогли починить ранее (сборка реализации AivenOpen) и поэкспериментируем с
реализаций для Minio S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
в качестве бекэнда. Как и в прошлый раз, теория будет
перемежаться практикой.

Оглавление

Kafka в ВТБ• Экономика » Финансы » Банк » Банки Группы ВТБ » Банк ВТБ

• Объект организация » Организации по алфавиту » Организации на Оа » Банк ВТБ

• Объект организация » Организации по алфавиту » Организации на Гр » Группа ВТБ » Банки Группы ВТБ » Банк ВТБ

Краткие итоги предыдущей и содержание текущей статьи

Чиним e2e тесты в Aiven Open

Remote Storage Manager глазами программиста• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование

• Информационные технологии » Информатика » Программирование

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование

• Что такое CustomMetadata

Класс• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)
исключительной ситуации RemoteStorageException и его подтипы

Класс• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)
RemoteSegmentMetadata

Метод copyLogSegmentData

Методы fetchLogSegment

Метод fetchIndex

Метод deleteLogSegmentData

Копаемся в реализации Aiven Open

Анализ требований

Ключевые технические решения

Выделение слоя работы с различными провайдерами хранилища данных S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3

(provider backends)

— Разделение данных на цепочки (chunking)

Сжатие данных• Информационные технологии » Информатика » Сжатие данных средствами Remote Storage Manager

Шифрование

S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
Multipart Upload

— Локальный кэш данных

Структура исходного кода

— Осматриваемся на местности

Ищем вход

Код чтения данных сегмента

Код чтения индексов

Код удаления данных из remote storage

Вывод

Запускаем реализацию AivenOpen

• Настраиваем и запускаем Minio

• Собираем из исходников дистрибутив AivenOpen

• Копируем библиотеки AivenOpen в инсталляцию Apache Kafka

• Настраиваем и запускаем кластер Кафка

• Создаем топик с поддержкой remote storage

• Проверяем работоспособность

Осмысливаем результат

Kafka в ВТБ• Экономика » Финансы » Банк » Банки Группы ВТБ » Банк ВТБ

• Объект организация » Организации по алфавиту » Организации на Оа » Банк ВТБ

• Объект организация » Организации по алфавиту » Организации на Гр » Группа ВТБ » Банки Группы ВТБ » Банк ВТБ

Работая в банке ВТБ• Экономика » Финансы » Банк » Банки Группы ВТБ » Банк ВТБ

• Объект организация » Организации по алфавиту » Организации на Оа » Банк ВТБ

• Объект организация » Организации по алфавиту » Организации на Гр » Группа ВТБ » Банки Группы ВТБ » Банк ВТБ
в качестве архитектора стрима «Интеграция», я занимаюсь
развитием продуктов и сервисов• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Учётная запись

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Учётная запись
, позволяющих информационным системам
обмениваться информацией быстро, надежно и дешево (выберите любые два пункта).

Кафка активно используется в банке• Экономика » Финансы » Банк » Банки России

• Экономика » Экономика России » Банки России

• Россия » Экономика России » Банки России
уже более трех лет для обмена по шаблонам
Publish-Subscribe и Streaming. Сейчас в промышленном контуре развернуто уже
около 250 кластеров. Любая команда разработчиков банка• Экономика » Финансы » Банк » Банки России

• Экономика » Экономика России » Банки России

• Россия » Экономика России » Банки России
может нажатием пары
клавиш за 10 минут развернуть кластер Кафка в конфигурации с высокой
доступностью
и георезервированием, подключенным к сервисам• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Учётная запись

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Учётная запись
мониторинга, аудита
и т.д. В ближайшее время мы сделаем и централизованную инсталляцию
«коммунальную» Кафку.

Дружной командой инженеров мы стараемся предоставить Кафку в удобном для
других разработчиков виде. При этом сами с удовольствием погружаемся в
тонкости работы этого замечательного программного обеспечения и делимся своими
знаниями.

Скучать некогда.

Кодирование и отладка• Информационные технологии » Информатика » Программирование » Отладка программы

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладка программы

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладка программы
сменяются жаркими техническими дискуссиями. Что приятно,
к нам нередко приходят в гости другие программисты• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование

• Информационные технологии » Информатика » Программирование

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование
с идеями и вопросами
сделайте вжух и готово»). Сделать вжух непросто, но оно того стоит с
профессиональной точки зрения.

Кафка является частью унифицированной интеграционной платформы ВТБ• Экономика » Финансы » Банк » Банки Группы ВТБ » Банк ВТБ

• Объект организация » Организации по алфавиту » Организации на Оа » Банк ВТБ

• Объект организация » Организации по алфавиту » Организации на Гр » Группа ВТБ » Банки Группы ВТБ » Банк ВТБ
. Также мы
активно используем Istio ServiceMesh, Apache ActiveMQ, RabbitMQ, средства
файлового обмена.

Про унифицированную интеграционную платформу постараюсь рассказать в другой
раз. А пока сосредоточимся на теме статьи.

Краткие итоги предыдущей и содержание текущей статьи

Описаны принципы работы и структура подсистемы Kafka tiered remote storage;

Успешно запущена реализация Remote Storage Manager из состава Apache Kafka;

Сборка дистрибутива Remote Storage Manager от Aiven Open частично успешна. E2e
тесты завершались ошибкой и были отключены;

==> Мы тут;

Починка e2e тестов дистрибутива Aiven Open;

Remote Storage Manager глазами программиста• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование

• Информационные технологии » Информатика » Программирование

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование
;

Рассматриваем структуру кода и настройки Aiven Open;

Запускаем Remote Storage Manager от Aiven Open;

Намечаем дальнейшие планы.

Чиним e2e тесты в Aiven Open

Все оказалось элементарно.

В прошлый раз собрать дистрибутив я пробовал командой ./gradlew clean build.
E2e тесты при этом завершались с ошибкой и были отключены мной в конфигурации
сборки.

Оказалось, что собирать нужно командой make• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Make

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Make

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Make
. Пара минут и все собралось, хотя,
конечно, сборка java• Информационные технологии » Информатика » Программирование » Java

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Java

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Java
кода командой make• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Make

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Make

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Make
несколько непривычна.

Интересная особенность сборки нужна версия 17 JDK• Информационные технологии » Информатика » Программирование » Java » Java Development Kit

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Java » Java Development Kit

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Java » Java Development Kit
. Сборка с версией JDK• Информационные технологии » Информатика » Программирование » Java » Java Development Kit

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Java » Java Development Kit

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Java » Java Development Kit
21
заканчивается ошибкой.

Remote Storage Manager глазами программиста• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование

• Информационные технологии » Информатика » Программирование

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование

Реализации Remote Storage Manager должны имплементировать интерфейс:
org.apache.kafka.server.log.remote.storage.RemoteStorageManager .

Интерфейс хорошо задокументирован в исходном коде Apache Kafka и содержит пять
методов: copyLogSegmentData, два метода fetchLogSegment (отличаются одним
входным параметром), fetchIndex и deleteLogSegmentData.

Декларация интерфейса приведена ниже:

Optional<CustomMetadata> copyLogSegmentData( RemoteLogSegmentMetadata
remoteLogSegmentMetadata, LogSegmentData logSegmentData) throws
RemoteStorageException; InputStream fetchLogSegment( RemoteLogSegmentMetadata
remoteLogSegmentMetadata, int startPosition) throws RemoteStorageException;
InputStream fetchIndex( RemoteLogSegmentMetadata remoteLogSegmentMetadata,
IndexType indexType) throws RemoteStorageException; void deleteLogSegmentData(
RemoteLogSegmentMetadata remoteLogSegmentMetadata) throws
RemoteStorageException;

Метод copyLogSegmentData загружает данные файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
сегмента партиции из
локального хранилища в удаленное. Должны быть скопированы сами данные и
индексы.

Первый метод fetchLogSegment извлекает из удаленного хранилища запрошенные
данные файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
сегмента партиции, начиная с заданного смещения. Во втором
методе, кроме начального смещения указывается и конечное смещение (range).

Метод fetchIndex извлекает из удаленного хранилища индекс указанного типа.

Метод deleteLogSegmentData удаляет данные из хранилища.

Фактически это CRUD интерфейс к удаленному хранилищу.

Что такое CustomMetadata

В возвращаемом значении метода copyLogSegmentData присутствует тип
CustomMetadata. Это дополнительные данные, которые разработчик может
сформировать и передать при записи данных в удаленное хранилище, а затем при
операциях извлечения и удаления данных получить назад.

CustomMetadata фактически обертка над массивом байт. Семантика хранящихся в
массиве байт отдается на откуп разработчику, реализующему интерфейс
RemoteStorageManager.

Как же обеспечено хранение и передача CustomMetadata между вызовами
copy/fetch/delete, относящимися к одному сегменту? Это обязанность Remote
Metadata Manager. При этом максимальный размер сохраняемого экземпляра
CustomMetadata ограничен настройкой
remote.log.metadata.custom.metadata.max.bytes.

Класс• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)
исключительной ситуации RemoteStorageException и его подтипы

Исключительная ситуация RemoteStorageException сигнализирует об ошибках работы
с удаленным хранилищем.

Имеет одного наследника RemoteResourceNotFoundException для исключительных
ситуаций отсутствия в удаленном хранилище запрошенного ресурса (файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
или
информации в другой форме).

Класс• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)
RemoteSegmentMetadata

Все методы интерфейса имеют входной параметр типа RemoteSegmentMetadata. Тип
содержит описание метаданных сегмента в удаленном хранилище. Класс• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

RemoteSegmentMetadata является наследником класса• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)
RemoteLogMetadata. Классы• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

являются контейнерами данных.

Ниже приведена таблица с описанием полей классов RemoteLogMetadata и
RemoteSegmentMetadata.

Поле

Тип данных• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных

• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных

Описание

Класс• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)
RemoteLogMetadata

brokerId

int

Идентификатор брокера Кафка

eventTimestampMs

long

Время эпохи событий в миллисекундах

topicIdPartition

TopicIdPartition

Идентификатор партиции топика

Класс• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)
RemoteSegmentMetadata

remoteLogSegmentId

RemoteLogSegmentId

Идентификатор сегмента в удаленном хранилище

startOffset

long

Смещение (offset) первого сообщения в сегменте

endOffset

long

Смещение (offset) последнего сообщения в сегменте

maxTimestampMs

long

Максимальное значение метки времени сообщений сегмента

segmentLeaderEpochs

NavigableMap <Integer, Long>

Сопоставление значения эпохи лидера со смещением сообщений

segmentSizeInBytes

long

Размер файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
сегмента в байтах

customMetadata

Optional <CustomMetadata>

Дополнительные данные, сформированные разработчиком реализации RemoteStorage
Manager

state

RemoteLogSegmentState

Состояние сегмента

Класс• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)
TopicIdPartition

topicId

Uuid• Стандартизация » Стандарт » Стандарты Iso » UUID

Уникальный идентификатор• Информационные технологии » URI топика

topicPartition

TopicPartition

Описание партиции топика

Класс• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)
TopicPartition

partition

int

Порядковый номер партиции

topic

String

Имя топика

RemoteLogSegmentState

enum

COPY_SEGMENT_STARTED((byte) 0)

COPY_SEGMENT_FINISHED((byte) 1)

DELETE_SEGMENT_STARTED((byte) 2)

DELETE_SEGMENT_FINISHED((byte) 3)

Состояние сегмента

Класс• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)
RemoteLogSegmentId

topicIdPartition

TopicIdPartition

Идентификатор партиции топика

id

Uuid• Стандартизация » Стандарт » Стандарты Iso » UUID

Уникальный идентификатор• Информационные технологии » URI удаленной партиции топика

Структура хранения информации в локальном и удаленном хранилищах может быть
разной, то есть имена и пути к файлам в бакетах S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
не обязательно должны
совпадать с именами и путями файлов• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
в локальном файловом хранилище Кафки.
Наличие такой подробной информации о сегменте партиции позволяет строить
гибкие схемы сопоставления структуры локального и удаленного хранилищ.

Метод copyLogSegmentData

Метод предназначен для копирования данных и индексов сегмента из локального
хранилища брокера Кафка в удаленное хранилище S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
.

Метод возвращает Optional<CustomMetadata> . С CustomMetadata разобрались в
ранее. Разработчик может явно указать, что не формировал CustomMetadata,
вернув Optional.empty() . Или вернуть сформированные метаданные для
дальнейшего использования.

Метод может создать исключительную ситуацию типа RemoteStorageException.

Метод получает на вход два параметра:

remoteLogSegmentMetadata — метаданные для копирования в удаленное хранилище;

logSegmentData — помещаемые в удаленное хранилище данные.

Класс• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)
LogSegmentData является контейнером для описания данных сегмента в
локальном хранилище и имеет в своем составе поля:

logSegment – actual log segment file• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

offsetIndex – offset index file• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

timeIndex – time index file• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

transactionIndex – transaction index file• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
, which can be null

producerSnapshotIndex – producer snapshot until this segment

leaderEpochIndex – leader-epoch-index until this segment

Класс• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)
хранит не сами данные, а ссылки на них в виде путей.

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

Еще одно полезное практическое наблюдение. В классе• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)
LogSegmentData представлен
не как путь к файлу, а как ByteBuffer. Между операциями сохранения данных файл• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

leaderEpochIndex может меняться. Поэтому для обеспечения консистентности
передается актуальный, на момент старта операции сохранения, слепок. Кроме
того, для всех сегментов партиции файл• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
leaderEpochIndex присутствует в
единственном экземпляре, постепенно меняя содержимое. От реализации Remote
Storage Manager ожидается, что она сохранив слепок leaderEpochIndex, вернет
именно его при запросах данных и индексов сегментов.

С учетом вышеизложенных рассуждений алгоритм работы метода может состоять из
следующих крупных блоков (вопросы оптимизации алгоритма пока отложим в
сторону):

Проверить входные параметры;

Получить данные локального хранилища из файлов• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
:

сегмента лога (расширение файла• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Расширение имени файла

• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Расширение имени файла

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Расширение имени файла
log);

индекса по смещению (расширение файла• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Расширение имени файла

• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Расширение имени файла

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Расширение имени файла
index);

индекса по времени (расширение файла• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Расширение имени файла

• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Расширение имени файла

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Расширение имени файла
timeindex);

индекса producerSnapshot (расширение файла• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Расширение имени файла

• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Расширение имени файла

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Расширение имени файла
snapshot);

Проверить наличие файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
индекса транзакций () в локальном хранилище. При
наличии файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
получить из него данные;

Получить данные leaderEpochIndex из байтового буфера;

По заранее спроектированной схеме вычислить имена и пути файлов• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
в удаленном
хранилище;

При необходимости по заранее спроектированной схеме трансформировать данные,
полученные из локального хранилища и слепка leaderEpochIndex в форматы данных• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных

• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных

удаленного хранилища;

Записать данные в удаленное хранилище;

При необходимости запомнить какие-либо метаданные для последующего
использования в методах fetch* и deleteLogSegment сформировать и вернуть как
результат работы метода CustomMetadata;

При возникновении ошибок поднять RemoteStorageException.

Таким образом при проектировании/анализе готовой реализации метода возникают
подзадачи:

определить структуру и форматы хранения информации в удаленном хранилище;

определить алгоритмы маппинга структуры файлов• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
локального хранилища на
структуру файлов• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
удаленного хранилища;

определить алгоритмы маппинга форматов данных• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных

• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных
локального и удаленного
хранилищ;

при необходимости определить состав и формат данных• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных

• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных
, которые должны
передаваться в CustomMetadata.

Методы fetchLogSegment

Методы отвечают за извлечение из удаленного хранилища данных сегмента.
Сигнатуры методов отличаются лишь одним параметром int endPosition.

Казалось бы, что имея в RemoteLogSegmentMetadata информацию о размере сегмента
данных, можно было бы ограничиться одним методом. Либо это недочет
проектирования, либо конечное смещение — байт от начала файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
сегмента не
всегда известно.

Отмечу, что startPosition и endPosition это смещения в байтах, а не смещения
сообщений в сегменте.

Формат хранение сообщений в сегменте известен. При попытке чтения сообщений
смещения преобразуются ядром Кафки в смещения в байтах. Это позволяет Remote
Storage Manager вернуть массив ранее сохраненных байт с данными сегмента, не
задумываясь об их семантике и границах сохраненных в сегменте сообщений.

При успешной работе методы должны вернуть InputStream с данными.

При ошибках общего характера создать исключение RemoteStorageException. Если
ошибка в том, что не удалось обнаружить в удаленном хранилище данные создать
RemoteResourceNotFoundException.

Метод fetchIndex

Метод по полученным в качестве аргументов метаинформации и типу запрашиваемого
индекса должен вернуть InputStream с данным индекса. В случае ошибок общего
характера создать исключение RemoteStorageException. В случае, если не удалось
в удаленном хранилище обнаружить данные запрошенного индекса, создать
исключение RemoteResourceNotFoundException.

Вспомним, что индекса транзакций может и не быть в локальном хранилище. Это
значит, что и в удаленном хранилище его не будет. При этом по-хорошему не
должно быть вызова fetchIndex с параметром indexType равным TRANSACTION. Либо
при таком вызове нужно сформировать исключение
RemoteResourceNotFoundException. В реализации «в лоб» при вызове удаленного S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3

хранилища произойдет ошибка 404 notFound. Однако, есть идея небольшой
оптимизации. В методе копирования данных сохранить в CustomMetadata виде
битовых флагов виды сохраняемых индексов. В методе fetchIndex анализировать
флаги и если в метаинформации указано, что индекс не сохранялся в ходе
выполнения метода copyLogSegmentData, то формировать исключение без вызова
удаленного хранилища.

Кроме того, напомню, что leader epoch index имеет один экземпляр на партицию.
При сохранении передается слепок текущего состояния. Соответственно,
возвращать необходимо слепок, соответствующий сегменту.

Метод deleteLogSegmentData

Метод удаляет данные и индексы сегмента из удаленного хранилища.

Метод имеет один аргумент RemoteLogSegmentMetadata remoteLogSegmentMetadata ,
описывающий удаляемый сегмент.

При ошибках удаления метод должен создавать исключительную ситуацию типа:
RemoteStorageException .

При реализации метода следует учитывать, что он может быть вызван несколько
раз и результаты предыдущих вызовов (частичное или полное удаление данных) не
должны вызывать ошибок последующих вызовов.

Копаемся в реализации Aiven Open

Анализ требований

Прежде чем приступить к изучению технических решений и кода всегда полезно
понять требования и ограничения реализации. Технические решения есть способ
удовлетворения требований.

Открываем и читаем раздел файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
README.md в github Aiven Open.

Обеспечить поддержку AWS S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
, Google• Объект организация » Организации по алфавиту » Организации на Go » Google (компания) Cloud Storage и Azure Blob Storage
(популярные в мире облачные провайдеры S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
);

Необходимо реализовать сжатие данных• Информационные технологии » Информатика » Сжатие данных. Сжатие должно быть опционально и
включаться/выключаться настройками. Необходимо избежать дублирования сжатия
средствами клиента Кафки и remote storage;

Необходимо реализовать шифрование данных• Информационные технологии » Информатика » Защита информации » Криптография » Шифрование данных. Тоже как опцию;

Следует избегать излишнего обращения к удаленному хранилищу за данными.

Первое требование понятно. Но:

Эксперименты и первичные тесты проще проводить на локальной машине;

Популярные облачные провайдеры Amazon итд сейчас труднодоступны для клиентов
из РФ• Россия;

Размещение в публичном облаке требует финансовых затрат.

Второе требование, на мой взгляд, слегка избыточно. При необходимости клиент
Кафка может на лету сжимать данные и при вычитке разжимать. Многие реализации
провайдеров S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
хранилища поддерживают сжатие данных• Информационные технологии » Информатика » Сжатие данных при записи на диск.
Добавлять еще и сжатие данных• Информационные технологии » Информатика » Сжатие данных на уровне алгоритмов работы Remote Storage
Manager хороший способ усложнения при скромном улучшении пользовательских
характеристик продукта.

Третье требование — нетривиальны в реализации с точки зрения требований
государственных регуляторов к использованию средствам криптографии.

Четвертое требование можно трактовать двояко.

Первая трактовка — оптимальность трафика к удаленному хранилищу. Прекрасное
требование.

Вторая трактовка — минимизировать обращение к тарифицируемым (платным вызовам)
S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
хранилища облачного провайдера. Разумно, но в on-premise среде не
актуально.

Выводреализация Aiven Open предназначена для использования в публичных
облаках широким кругом пользователей вне РФ• Россия. Требует дополнительного анализа
применимости в сложных Enterprise ИТ ландшафтах с высокими
регуляторно-правовыми требованиями.

Для «позапускать на ноутбуке» в свободное время не самый оптимальный вариант.
Зато с открытым исходным кодом• Информационные технологии » Информатика » Программирование » Программное обеспечение » Свободное программное обеспечение » Открытое программное обеспечение

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Свободное программное обеспечение » Открытое программное обеспечение

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Свободное программное обеспечение » Открытое программное обеспечение
, хорошо реализовано (это я забегаю вперед) и
бесплатно.

Однако, пора уже поизучать код.

Ключевые технические решения

И снова спасибо разработчикам Aiven Open за описание принятых технических
решений.

Выделение слоя работы с различными провайдерами хранилища данных S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
(provider
backends)

Различные реализации S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
имеют свои особенности. Как правило, работа с S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
идет
через предоставляемых производителем SDK, а не на уровне самостоятельного
формирования http вызовов разработчиком клиентского приложения• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Учётная запись

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Учётная запись
.

SDK удобная абстракция, скрывающая ненужные детали работы с http. Но каждый
облачный провайдер и разработчик реализации S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
стремится предоставить
собственный SDK. Выделение слоя работы с различными реализациями S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
позволяет
не складывать в одну кучу все используемые SDK, а выбирать при сборке
необходимые.

Вывод. Если требуется поддержка нескольких реализаций S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
выделение слоя
provider backends хорошая идея.

Разделение данных на цепочки (chunking)

Данные в Кафке хранятся в файлах• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
сегментов партиций. Размер файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
сегмента
настраивается при создании топика. Сегменты могут иметь весьма большие размеры
единицы и десятки гигабайт. Клиенты при чтении запрашивают данные с брокеров
Кафка пачками (диапазон номеров сообщений).

При получении сообщений по диапазону из local storage брокер Кафка выполняет
локальный вызов и имеет возможность извлечь из файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
сегмента партиции только
необходимые данные без загрузки всего файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
в память брокера.

При выборке по диапазону сообщений из S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
хранилища брокер Кафка выполняет
удаленный сетевой http вызов. При этом при реализации «в лоб» из S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
хранилища
по сети будет передаваться все содержимое файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
сегмента партиции даже, если
требуется получить лишь малую часть данных.

Замечательно, что большая часть клиентов S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
умеют по запросу передавать не
весь файл• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
, а указанный диапазон байт. Хотя это и не избавляет от удаленного
сетевого http вызова.

Казалось бы задача решена. Но есть нюанс.

Описанная оптимизация с запросом диапазона байт из хранилища S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
работает
только если файлы• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
сегментов записаны без изменений. При включении шифрования
или сжатия данных• Информационные технологии » Информатика » Сжатие данных средствами RemoteStorage исходные набор байт
трансформируется. Чтобы извлечь из зашифрованного или сжатого файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
диапазон
байт, указанных для исходного файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
, нужно сначала расшифровать или разжать
данные. При больших размерах данных операции расшифровки и разжатия могут быть
весьма затратны.

Что предлагают разработчики Aiven Open для оптимизации? При сохранении данных
файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
сегмента партиции в S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
хранилище, разбить их на более мелкие части
(chunks). Каждую часть отдельно зашифровать/сжать. Затем все части снова
соединить в один файл• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
и построить индекс соответствия между диапазонами байт
исходного файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
и частями полученного файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
. При этом в индексе нужно
учитывать, что части одного сообщения Кафка могут после манипуляций быть
размещены в соседних chunk-ах.

Вот так требования наличия шифрования и сжатия средствами Remote Storage
Manager приводят к необходимости реализации непростой подсистемы chunks с
индексами.

При отключенном шифровании и сжатии подсистема разбиения на части (chunks) не
нужна. А она вообще отключается принудительно в настройках? Проверю позже. В
любом случае наличие подсистемы chunks не упрощает понимание базовых концепций
Remote Storage Manager на уровне исходного кода, но позволяет реализовать
эффективные алгоритмы.

Сжатие данных• Информационные технологии » Информатика » Сжатие данных средствами Remote Storage Manager

Используется алгоритм Zstandard. Сжатие может быть выключено или включено
явно. Также заявлен режим эвристики использования сжатия клиентом Кафка.
Функциональность весьма крутая, но опять же исходный код от наличия эвристик
проще не станет.

Шифрование

Для каждого файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
сегмента генерируется по алгоритму AES-256 ключ для
шифрации. Этим первым ключом шифруются данные сегмента. В то же время сам ключ
шифруется публичной частью второго ключа (по алгоритму RSA). Первый
зашифрованный ключ прикрепляется к зашифрованным им данным файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
сегмента
партиции. Таким образом обеспечивается быстрая ротация ключей шифрования• Информационные технологии » Информатика » Защита информации » Криптография » Шифры » Ключ Шифрования
данных (первый ключ), что не позволяет взломав первый ключ, расшифровать
данные всех файлов• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
сегментов. Второй ключ является «отмычкой» для всех первых
ключей. Вторые ключи хранятся в защищенной связке ключей (key ring),
периодически ротируются. Хранение в связке ключей позволяет не использовать
ключ для шифрации новых данных, но расшифровать ранее зашифрованные ключом
данные.

Хороший подход. Но для шифрования передаваемых данных можно использовать TLS.
А шифрование сохраняемых файлов• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
отдать на откуп реализации S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
хранилища.

S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
Multipart Upload

S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
провайдеры поддерживают режим загрузки «частями» файлов• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
большого размера.
Вполне хорошая идея.

Локальный кэш данных

При получении chunk можно его закэшировать, надеясь, что при последовательном
чтении данных клиентом Кафка следующая пачка требуемых сообщений опять
окажется в том же chunk. Можно даже в фоне запросить следующий chunk и
сохранить его в кэш (prefetching). Кэширование повысит скорость получения
данных клиентами Кафка за счет оптимизации количества удаленных сетевых
вызовов.

Разработчиками заявлена реализация кэша с хранением данных в памяти брокера
Кафка и с хранением в файловой системе• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор
брокера.

Идея годная даже если бы не было chunk, а файлы• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
сегметнов передавались
целиком.

Структура исходного кода

Осматриваемся на местности

Концепции хорошо, а их реализация в исходном коде — еще лучше. Следуя этому
принципу, разберем структуру исходного кода Remote Storage Manager Aiven Open.

Клонируем репозиторий исходного кода с github к себе на компьютер. Код
представляет собой многокомпонентный gradle проект с вкраплениями скриптов
сборки make.

Назначение папок кода весьма прозрачно.

Часть из них не содержат исходного кода на Java• Информационные технологии » Информатика » Программирование » Java

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Java

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Java
и выполняют вспомогательную
роль.

Подпапка checkstyle содержит конфигурационные файлы• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения
проверки• Стандартизация » Стандарт » Контроль качества качества Java• Информационные технологии » Информатика » Программирование » Java

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Java

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Java

кода. Инструмент checkstyle хорошо известен, часто используется в мире Java• Информационные технологии » Информатика » Программирование » Java

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Java

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Java

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

Подпапка gradle содержит gradle wrapper. Компонент, позволяющий проводить
сборку исходного кода без необходимости установки Gradle. Опять же ничего
специфичного, частая практика использования системы сборки Gradle.

Подпапка demo содержит docker compose файлы• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
для запуска демонстрационных
примеров в эмуляторах различных облачных провайдеров.

Подпапка docker содержит конфигурационные файлы• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения
для сборки docker контейнера.

Подпапка e2e содержит исходный код end to end тестов.

Наконец-то мы добрались до папок с исходным кодом, относящимся к реализации
Remote Storage Manager:

Подпапка commons содержит вспомогательный исходный код общего назначения;

Подпапка core содержит ядро реализации Remote Storage Manager;

Подпапка storage является корневой папкой с реализациями бэкендов различных
провайдеров S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
(AWS, Google• Объект организация » Организации по алфавиту » Организации на Go » Google (компания), Azure итд).

Ищем вход

Любая реализация Kafka Remote Storage Manager должна имплементировать
интерфейс: org.apache.kafka.server.log.remote.storage.RemoteStorageManager.

В коде Aiven Open обнаруживается одна реализация интерфейса:
org.apache.kafka.server.log.remote.storage.RemoteStorageManager в gradle
модуле core. Название класса• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)
реализации тоже RemoteStorageManager.

Конструктор класса• Информационные технологии » Информатика » Программирование » Программное обеспечение » Конструкции Компьютерных Языков » Конструктор Объекта

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Конструктор Объекта

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Конструктор Объекта

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Конструкции Компьютерных Языков » Конструктор Объекта

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Конструкции Компьютерных Языков » Конструктор Объекта

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Конструктор Объекта
прост. В нем заполняется поле time экземпляром:
org.apache.kafka.common.utils.Time . Требуется для вычисления метрик
мониторинга.

После конструктора• Информационные технологии » Информатика » Программирование » Программное обеспечение » Конструкции Компьютерных Языков » Конструктор Объекта

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Конструктор Объекта

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Конструктор Объекта

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Конструкции Компьютерных Языков » Конструктор Объекта

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Конструкции Компьютерных Языков » Конструктор Объекта

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Конструктор Объекта
для окончательной настройки работы компонента ядро Кафка
вызовет метод configure.

Первым шагом производится получение настроек Remote Storage Manager, заданных
в файле конфигурации• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения
брокера Кафка (по умолчанию файл• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
server.properties). В
документации показан пример настройки. Но найти полный список настроек
приведен или только основные настройки по документации не удалось. Посмотрим
исходный код класса• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

java• Информационные технологии » Информатика » Программирование » Java

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Java

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Java
/io/aiven/kafka/tieredstorage/config/RemoteStorageManagerConfig.java• Информационные технологии » Информатика » Программирование » Java

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Java

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Java
. Вот
он, полный перечень настроек и даже с описанием.

Судя по настройкам механизм нарезки на chunk-и нельзя отключить, можно лишь
указать размер chunk-a. Не очень гибко, хотя и помогает избежать ошибок
конфигурирования при включении/выключении шифрования и сжатия.

По исходному коду метода configure легко понять, что реальная работа по
взаимодействию с S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
делегируется backend-у, состоящему из трех компонент:

uploader — запись данных в S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
;

fetcher — чтение данных из S33;

deleter — удаление данных из S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
.

Логично предположить, что компоненты связаны общей моделью хранения данных в
S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
.

Хорошо. Теперь переходим к изучению части кода, ответственной за
взаимодействие в tiered remote storage.

Код записи данных в удаленное S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
хранилище

Проанализируем код реализации метода:

public Optional<CustomMetadata> copyLogSegmentData( final
RemoteLogSegmentMetadata remoteLogSegmentMetadata, final LogSegmentData
logSegmentData) throws RemoteStorageException { // Проверить, что входные
параметры
не равны null. // Выглядит как перестраховка
Objects.requireNonNull(remoteLogSegmentMetadata, "remoteLogSegmentId must not
be null"); Objects.requireNonNull(logSegmentData, "logSegmentData must not be
null"); // Запись в лог log.info("Copying log segment data, metadata: {}",
remoteLogSegmentMetadata); // Создаем билдер для заполнения custom metadata
final var customMetadataBuilder = new
SegmentCustomMetadataBuilder(customMetadataFields, objectKeyFactory,
remoteLogSegmentMetadata); // Фиксируем время начала операции final long
startedMs = time.milliseconds(); // Открыть поток чтения локального файла• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

сегмента try (final InputStream logSegmentInputStream =
Files.newInputStream(logSegmentData.logSegment())) { ... порезать на части,
зашифровать, заархивировать итд ... // Загрузить данные сегмента в remote
storage uploadSegmentLog(remoteLogSegmentMetadata, transformFinisher,
customMetadataBuilder); ... } final SegmentIndexesV1 segmentIndexes =
uploadIndexes( remoteLogSegmentMetadata, logSegmentData, encryptionMetadata,
customMetadataBuilder); // Мммм.. Метаданные помимо customMetadata сохраняются
еще и в remoteStorage final SegmentManifest segmentManifest = new
SegmentManifestV1( chunkIndex, segmentIndexes, requiresCompression,
encryptionMetadata, remoteLogSegmentMetadata);
uploadManifest(remoteLogSegmentMetadata, segmentManifest,
customMetadataBuilder); ... metrics.recordSegmentCopyTime(
remoteLogSegmentMetadata.remoteLogSegmentId().topicIdPartition().topicPartition(),
startedMs, time.milliseconds()); final var customMetadata =
buildCustomMetadata(customMetadataBuilder); log.info("Copying log segment data
completed successfully, metadata: {}", remoteLogSegmentMetadata); return
customMetadata; }

Код неплохо читаем, но:

Метаданные размазаны между customMetadata и uploadManifest в remote storage;

Не сразу понятно, что происходит с customMetadata, так как они передаются, как
параметры методов upload;

В случае сбоя загрузки одного из элементов будет поднято
RemoteStorageException и в remote storage могут остаться «хвосты».

Методы uploadSegmentLog и uploadManifest не содержат ничего интересного. По
факту они вызывают uploader для загрузки данных в remote storage.

В методе uploadIndexes обнаруживается интересная особенность — в ходе
трансформации индекса анализируется его размер. Анализ выполняется с помощью
вызова статического методаindexSize.

static int indexSize(final Path indexPath) throws RemoteStorageException { try
{ final var size = Files.size(indexPath); if (size > Integer.MAX_VALUE) {
throw new IllegalStateException( "Index at path " + indexPath + " has size
larger than Integer.MAX_VALUE"); } return (int) size; } catch (final
IOException e) { throw new RemoteStorageException("Error while getting index
path size", e); } }

Получается, что файлы• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
индексов с размером более Integer.MAX_VALUE вызовут
ошибку записи. В подавляющем числе случаев размер файлов• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
меньше, но
потенциально грабли могут быть.

Итог: неплохо, но можно попробовать сделать код более читаемым.

Код чтения данных сегмента

@Override public InputStream fetchLogSegment(final RemoteLogSegmentMetadata
remoteLogSegmentMetadata, final int startPosition, final int endPosition)
throws RemoteStorageException { ... try { ... final var segmentManifest =
fetchSegmentManifest(remoteLogSegmentMetadata); final var suffix =
ObjectKeyFactory.Suffix.LOG; final var segmentKey =
objectKey(remoteLogSegmentMetadata, suffix); return new
FetchChunkEnumeration(chunkManager, segmentKey, segmentManifest, range)
.toInputStream(); } }

Получаем манифест сегмента из remote storage, затем пользуясь магией
FetchChunkEnumeration делается реальная работа по доставанию нужных байт.

Итог: читается код непросто, какая небольшая то магия.

Код чтения индексов

public InputStream fetchIndex(final RemoteLogSegmentMetadata
remoteLogSegmentMetadata, final IndexType indexType) throws
RemoteStorageException { ... return segmentIndexesCache.get( key, indexType,
() -> fetchIndexBytes(key, segmentIndex, segmentManifest) ); }

Видимо, делается попытка найти нужные данные в кэше индексов и при
необходимости запросить их из remote storage.

Итог: Код понятен.

Код удаления данных из remote storage

@Override public void deleteLogSegmentData(final RemoteLogSegmentMetadata
remoteLogSegmentMetadata) throws RemoteStorageException { log.info("Deleting
log segment data for {}", remoteLogSegmentMetadata);
metrics.recordSegmentDelete(remoteLogSegmentMetadata.remoteLogSegmentId().topicIdPartition().topicPartition(),
remoteLogSegmentMetadata.segmentSizeInBytes()); final long startedMs =
time.milliseconds(); try { final Set<ObjectKey> keys =
Arrays.stream(ObjectKeyFactory.Suffix.values()) .map(s ->
objectKeyFactory.key(remoteLogSegmentMetadata, s))
.collect(Collectors.toSet()); deleter.delete(keys); } catch (final Exception
e) {
metrics.recordSegmentDeleteError(remoteLogSegmentMetadata.remoteLogSegmentId()
.topicIdPartition().topicPartition()); throw new RemoteStorageException(e); }
metrics.recordSegmentDeleteTime(
remoteLogSegmentMetadata.remoteLogSegmentId().topicIdPartition().topicPartition(),
startedMs, time.milliseconds()); log.info("Deleting log segment data for
completed successfully {}", remoteLogSegmentMetadata); }

В коде сначала формируем список удаляемых объектов и затем вызываем
`deleter.delete(keys)`, который в цикле вызывает метод удаления
соответствующего S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
SDK.

Итог: код понятен.

Вывод

Реализация хорошо продумана, код читаем, хотя местами сложен для понимания. Но
кто из нас всегда пишет идеальный код, пусть первым кинет камень.

Запускаем реализацию AivenOpen

Запуск производился на Linux.

Настраиваем и запускаем Minio

Перед запуском необходимо установить Minio. На сайте Minio и в интернете есть
большое количество инструкций по установке на различные дистрибутивы Linux• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы
. Не
будем их дублировать.

Для хранения данных необходимо создать папку. В моем случае папка имеет путь
~/Projects/kafka/data/aiven/minio. Вы можете выбрать другую папку на ваш вкус.

Из консоли запускаем Minio:

minio server --console-address localhost:9999
~/Projects/kafka/data/aiven/minio

В браузере открываем ссылку http://localhost:9999 и видим web• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNOME » Epiphany

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNOME » Epiphany

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNOME » Epiphany

• Телекоммуникации и связь » Компьютерная сеть » Интернет » Браузеры » Браузеры На Движке Gecko » Epiphany

• Телекоммуникации и связь » Компьютерная сеть » Интернет » Браузеры » Браузеры Под Posix-Системы » Epiphany
консоль сервера
Minio.

Логинимся с учетной записью• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Учётная запись

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Учётная запись
админа по умолчанию minioadmin/minioadmin. В
реальной жизни в целях информационной безопасности• Безопасность » Информационная безопасность, конечно же надо поменять
логин• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Учётная запись

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Учётная запись
и пароль учетной записи• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Учётная запись

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Учётная запись
.

В web• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNOME » Epiphany

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNOME » Epiphany

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNOME » Epiphany

• Телекоммуникации и связь » Компьютерная сеть » Интернет » Браузеры » Браузеры На Движке Gecko » Epiphany

• Телекоммуникации и связь » Компьютерная сеть » Интернет » Браузеры » Браузеры Под Posix-Системы » Epiphany
консоли создаем S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
bucket с именем kafka-bucket с настройками по
умолчанию.

Поскольку AWS S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
client не может работать без указания S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
region необходимо
задать регион по умолчанию. В web• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNOME » Epiphany

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNOME » Epiphany

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNOME » Epiphany

• Телекоммуникации и связь » Компьютерная сеть » Интернет » Браузеры » Браузеры На Движке Gecko » Epiphany

• Телекоммуникации и связь » Компьютерная сеть » Интернет » Браузеры » Браузеры Под Posix-Системы » Epiphany
консоли выбираем пункт меню Configuration и
задаем настройку Region/Server Location равной local-ru (имя может быть
выбрано на ваше усмотрение).

После установки региона необходимо перезапустить Minio сервер.

Собираем из исходников дистрибутив AivenOpen

Клонируем код с github и в корневой папке консольной командой `make• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Make

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Make

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Make
` выполняем
сборку. Признаком успешной сборки является вывод "BUILD SUCCESSFUL".

Копируем библиотеки AivenOpen в инсталляцию Apache Kafka

Поскольку Minio декларирует совместимость с Amazon S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
нам понадобится
скопировать из папки исходных кодов AivenOpen в папку libs инсталляции Кафка
следующие файлы• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
:

Из архива (zip или tar без разницы) ./build/distributions/ все файлы• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
. Обратите
внимание, что копировать необходимо jar файлы• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
без учета наличия папки внутри
архива. Другими словами jar файлы• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
должны быть скопированы без создания
подпапки внутри папки libs;

Из архива (zip или tar без разницы) ./storage/s3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
/build/distributions все jar
файлы• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
без учета наличия папки внутри архива.

Настраиваем и запускаем кластер Кафка

Zookeeper не требует специальной настройки. Запуск Zookeeper тоже не имеет
особенностей:

./bin/zookeeper-server-start.sh -daemon ./config/zookeeper.properties

Конфигурируем брокер Кафка. В конец файла• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Язык Программирования Си » Библиотеки C » Стандартная библиотека языка Си » EOF

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционная система » EOF

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Язык Программирования Си » Библиотеки C » Стандартная библиотека языка Си » EOF

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционная система » EOF

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Язык Программирования Си » Библиотеки C » Стандартная библиотека языка Си » EOF

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционная система » EOF
./config/server/properties
инсталляции Кафка добавляем строки:

# ----- Enable tiered storage ----- remote.log.storage.system.enable=true #
----- Configure the remote log manager ----- # This is the default, but adding
it for explicitness:
remote.log.metadata.manager.class• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)
.name=org.apache.kafka.server.log.remote.metadata.storage.TopicBasedRemoteLogMetadataManager
# Put the real listener name you'd like to you here:
remote.log.metadata.manager.listener.name=PLAINTEXT # You may need to set this
if you're experimenting with a single broker setup:
rlmm.config.remote.log.metadata.topic.replication.factor=1
rlmm.config.remote.log.metadata.topic.num.partitions=1 # ----- Configure the
remote storage manager ----- # Here you need either one or two directories
depending on what you did in Step 1:
remote.log.storage.manager.class• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)
.name=io.aiven.kafka.tieredstorage.RemoteStorageManager
# 4 MiB is the current recommended chunk size: rsm.config.chunk.size=4194304 #
----- Configure the storage backend ----- # Using S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
as an example:
rsm.config.storage.backend.class• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)
=io.aiven.kafka.tieredstorage.storage.s3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
.S3Storage
rsm.config.storage.s3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
.bucket.name=kafka-bucket
rsm.config.storage.s3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
.region=local-ru
rsm.config.storage.s3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
.endpoint.url=http://localhost:9000
rsm.config.storage.s3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
.path.style.access.enabled=true # default minio server
login/password. Change it. rsm.config.storage.aws.access.key.id=minioadmin
rsm.config.storage.aws.secret.access.key=minioadmin # The prefix can be
skipped: #rsm.config.storage.key.prefix: "some/prefix/" # ----- Configure the
fetch chunk cache -----
rsm.config.fetch.chunk.cache.class• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Информационные технологии » Информатика » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Типы данных » Структуры Данных » Класс (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Парадигмы программирования » Объектно-ориентированное программирование » Класс (программирование)
=io.aiven.kafka.tieredstorage.fetch.cache.DiskChunkCache
# S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
local cache folder path. Change it.
rsm.config.fetch.chunk.cache.path=/home/mike/Projects/kafka/data/aiven/s3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
_cache
# Pick some cache size, 16 GiB here:
rsm.config.fetch.chunk.cache.size=17179869184 # Prefetching size, 16 MiB here:
rsm.config.fetch.chunk.cache.prefetch.max.size=16777216

Обратите внимание, что в настройке rsm.config.storage.s3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
.region необходимо
обязательно указать имя региона и в настройке
rsm.config.storage.s3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
.path.style.access.enabled указать значение true.
Последняя настройка указывает клиенту AWS S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
, что вместо использования имени
региона в имени хоста (поведение по умолчанию) необходимо использовать имя
региона в url pathтаком режиме Minio ожидает HTTP запросов).

Стартуем брокер Кафка из консоли:

./bin/kafka-server-start.sh -daemon ./config/server.properties

Брокер должен успешно стартовать. В логах брокера не должно быть ошибок.

Создаем топик с поддержкой remote storage

Из консоли выполняем команду:

bin/kafka-topics.sh --bootstrap-server localhost:9092 \ --create --topic
topic1 \ --config remote.storage.enable=true \ --config segment.bytes=512000 \
--config local.retention.bytes=1 \ --config retention.bytes=10000000000000

Проверяем работоспособность

Для проверки• Стандартизация » Стандарт » Контроль качества работоспособности запишем в созданный топик сообщения:

bin/kafka-producer-perf-test.sh \ --topic topic1 --num-records=10000
--throughput -1 --record-size 1000 \ --producer-props acks=1 batch.size=16384
bootstrap.servers=localhost:9092

Через некоторое время после окончания записи можно увидеть с помощью web• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNOME » Epiphany

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNOME » Epiphany

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNOME » Epiphany

• Телекоммуникации и связь » Компьютерная сеть » Интернет » Браузеры » Браузеры На Движке Gecko » Epiphany

• Телекоммуникации и связь » Компьютерная сеть » Интернет » Браузеры » Браузеры Под Posix-Системы » Epiphany

консоли Minio, что в S3• Информационные технологии » Облачные вычисления » Облачные хранилища данных » Amazon S3

• Объект организация » Организации по алфавиту » Организации на Am » Amazon.com, Inc. » Amazon S3
bucket с именем kafka-bucket начали появляться файлы• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
.

Осмысливаем результат

Итак, получилось в целом понять структуру, работу кода и запустить реализацию
RemoteStorageManager от AivenOpen.

Что хорошо, реализация рабочая. Но если хочется погрузиться в тонкости работы
именно RemoteStorageManager, то исходный код (исключительно на мой взгляд)
перегружен реализацией фич. Реализованные фичи приводят к тому, что формат
хранения данных в remote storage сильно отличается от формата хранения данных
брокером Кафка.

затруднено понимание, что именно скопировано в удаленное хранилище;

нельзя скопировать файлы• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
из Minio и изучить их содержимое утилитами• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита

• Информационные технологии » Информатика » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита
Кафка.

В таком виде «играться» с подсистемой RemoteStorageManager и проверять
различные гипотезы и технические решения неудобно.

Поэтому мне пришла в голову мысль написать собственную простую реализацию
RemoteStorageManager. Планирую рассказать об этом в следующей статье.

============= Итог: 10,9584 ; Информационные технологии#Информатика#Программирование #Платформы программирования#Операционные системы#Загрузочный сектор#Файл 10,4606 ; Информационные технологии#Информатика#Программирование #Парадигмы программирования#Объектно-ориентированное программирование #Конструктор Объекта 6,3606 ; Информационные технологии#Информатика#Программирование #Парадигмы программирования#Объектно-ориентированное программирование #Класс (программирование) 6,1962 ; Информационные технологии#Информатика#Программирование#Java #Java Development Kit 5,5084 ; Информационные технологии#Информационно-коммуникационные технологии #Информационные технологии и телекоммуникации#Вычислительная техника #Компьютер#Учётная запись 5,3923 ; Информационные технологии#Информатика#Программирование#Отладка программы 4,0529 ; Информационные технологии#Информатика#Программирование #Программное обеспечение#Форматы данных#Формат файла #Конфигурация программного обеспечения 3,9065 ; Информационные технологии#Информатика#Сжатие данных 3,6529 ; Информационные технологии#Информатика#Программирование #Программное обеспечение#Форматы данных#Формат файла #Расширение имени файла 3,5084 ; Информационные технологии#Информатика#Программирование #Платформы программирования#Операционные системы #Юникс-подобные операционные системы#GNU#GNOME#Epiphany 2,9809 ; Информационные технологии#Информатика#Программирование #Программное обеспечение#Прикладное программное обеспечение#Утилита 2,9809 ; Информационные технологии#Информатика#Программирование #Программное обеспечение#Свободное программное обеспечение #Открытое программное обеспечение 2,9084 ; Информационные технологии#Информационно-коммуникационные технологии #Информационные технологии и телекоммуникации#Вычислительная техника #Компьютер#Распределенные Системы 2,6865 ; Информационные технологии#URI 5,1703 ; Экономика#Финансы#Банк#Банки России#Банк ВТБ 5,1352 ; Экономика#Финансы#Банк#Банки Группы ВТБ#Банк ВТБ#Банки России 3,1688 ; Стандартизация#Стандарт#Стандарты Iso#UUID 3,1375 ; Стандартизация#Стандарт#Контроль качества

============= Объекты: организации Google (компания) Банк ВТБ Банки Группы ВТБ

============= Географические объекты: 1 55.755555556,37.617500000 Россия

============= Связи: Банки России # ассоциации # Банк ВТБ


Copyright © 2007-2024 ООО «RelTeam»