Проект Antalya от Altinity: масштабирумый и недорогой LakeHouse на ClickHouse с Iceberg

ClickHouse Antalya Altinity, курсы ClickHouse, озеро хранилище данных ClickHouse, архитектура данных ClickHouse, обучение ClickHouse

Как сократить затраты на хранение исторических данных в ClickHouse для ИИ-сценариев, сохранив высокую скорость аналитики по широким таблицам и озеру данных: эволюция колоночной СУБД в новом проекте с исходным кодом Antalya от Altinity.

Проблемы совмещения ClickHouse с озерами данных и способы их решения

Благодаря колоночной структуре хранения данных ClickHouse не только обеспечивает быструю аналитику огромных объемов в реальном времени, но и неплохо подходит для задач машинного обучения. Об этом мы писали здесь и здесь. Эти варианты использования приводят к стремительному росту данных, поскольку релевантность и точность ML-модели напрямую зависит от размера обучающей выборки. Это приводит к росту затрат, т.к. в ClickHouse чаще всего используется табличный движок MergeTree с репликацией блоков данных минимум на 3 узла в кластере. Такая архитектура надежная, но на порядок дороже, чем хранение тех же данных в объектном хранилище, совместимом с S3. Кроме того, вычисления становятся дороже, т.к. в ClickHouse нет простого способа масштабировать вычисления для большого пакетного задания или разделить ресурсы для загрузки данных, от ресурсов для запросов.

Хотя рабочие нагрузки для аналитики в реальном времени, ИИ и пакетной отчетности исторически были разделены по разным видам хранилищ, сегодня они часто объединяются на одних и тех же данных, хранящихся в озерах и архитектурах Data LakeHouse, состоящих из объектного хранилища, Parquet и открытых табличных форматов, таких как Iceberg. Например, для мониторинга логов или веб-аналитики необходимо добавлять данные в ClickHouse постепенно, непрерывно загружая их из озера и сохраняя в таблицах колоночной БД для быстрой аналитики. В этом случае ClickHouse будет часто опрашивать S3, чтобы проверить наличие новых данных. При обнаружении новых файлов ClickHouse автоматически прочитает, загрузит и объединит все данные в свои таблицы.

Конвейер загрузки данных из объектного хранилища S3 в ClickHouse
Конвейер загрузки данных из объектного хранилища S3 в ClickHouse

Данные из Data Lake также можно загружать в ClickHouse с помощью двойной записи. Обычно этот метод используется в корпоративных платформах данных, которые должны хранить данные компании, обеспечивая бесперебойный доступ и удобство использования для различных команд с разными требованиями и инструментами. В таких сценариях особенно полезен табличный формат Iceberg, который обеспечивает высокую производительность аналитических SQL-запросов с большими таблицами. Iceberg часто используется в озерах данных и архитектурах LakeHouse. При потоковой передаче данные публикуются в топик Kafka, откуда их считывают несколько потребителей, чтобы одновременно загрузить в таблицы ClickHouse и Iceberg. Такой подход отлично подходит для неизменяемых данных только для добавления (Append Only).

Конвейер потоковой загрузки данных в ClickHouse и озеро данных
Конвейер потоковой загрузки данных в ClickHouse и озеро данных

Таким образом, озера данных требуют приема, запроса и уплотнения данных в режиме реального времени. ClickHouse поддерживает это, но изначально не предполагает совмещения аналитики в реальном времени с долговременным хранением исторических данных. Хотя ClickHouse уже поддерживает Iceberg, DeltaLake и Hudi, предоставляя специальные движки таблиц, ему по-прежнему нужен прямой путь к таблице для запроса. Реализовать это можно через интеграцию с каталогами данных, где ClickHouse взаимодействует с каталогом и с хранилищем данных, чтобы читать правильные метаданные.

Интеграция ClickHouse с озером данных
Интеграция ClickHouse с озером данных

Устранить противоречие разных рабочих нагрузок поможет разделение вычислений и хранения. Реализовать это можно через интеграцию горячих данных в ClickHouse с историческим хранилищем в озере данных в виде Iceberg-таблиц. Чтобы сделать это, компания Altinity запустила проект Antalya, который адаптирует ClickHouse для использования формата Iceberg в озере данных в качестве основного хранилища. При этом сохраняются все преимущества ClickHouse, от поддержки SQL с параллельным выполнением, RBAC-политикой авторизации и многоуровневое хранилище. Таким образом, хранение исторических данных в таблицах Iceberg снижает стоимость хранения в 10 раз и расширяет спектр рабочих нагрузок, включая ИИ. Также упрощается доступ к данным: приложения могут видеть их, независимо от расположения, из одного SQL-соединения ClickHouse. Быстрое и независимое масштабирование захвата, слияния, преобразования и аналитических запросов снижает дорогостоящее и избыточное выделение вычислительных ресурсов, позволяя оптимизировать расходы на инфраструктуру благодаря спотовым экземплярам.

Архитектура проект Antalya на основе ClickHouse
Архитектура проект Antalya на основе ClickHouse

Таким образом, Antalya — это новый мощный способ создания высокопроизводительных и недорогих аналитических систем в реальном времени для таблиц общих озер данных. Это достигается благодаря следующим техническим решениям:

  • Iceberg, Parquet и S3 для ускорения чтения с помощью фильтров Блума, оптимизации PREWHERE, кэширование метаданных Parquet и пр.
  • Улучшения доступа к данным благодаря stateless-серверам оркестратора Docker-контейнеров Swarm, которые предлагают вычисления в реальном времени на таблицах Iceberg с использованием дешевых серверов ClickHouse без сохранения состояния. Также поддерживается распределенное кэширование и многоуровневое хранение в хранилище Iceberg. Это обеспечивает сокращение расходов, сохраняя высокую скорость обработки запросов в реальном времени.
  • Облачная природа среды выполнения, которая позволяет запускать системы где угодно. Шаблоны облачных операций обеспечивают быстрое автоматическое масштабирование Swarm, мониторинг, развертывание кэша и самого Kubernetes.

Чтобы понять, как работает Antalya, далее рассмотрим варианты использования и особенности реализации этой архитектуры.

Архитектура и примеры использования проекта Antalya

Как уже было отмечено, таблицы Iceberg с Parquet снижают затраты на хранение в 10 раз по сравнению с реплицированными MergeTree-таблицами ClickHouse. Для этого разработчики Antalya решили ускорить чтение Parquet-файлов и масштабировать вычисления с помощью кластеров Swarm. Кластеры Swarm — это масштабируемые пулы саморегистрирующихся серверов ClickHouse без сохранения состояния. Именно они читают файлы Parquet, ускоряя выполнение запросов и сокращая нагрузку на существующие приложения ClickHouse.

Ускорение запросов на чтение с помощью кластеров Swarm
Ускорение запросов на чтение с помощью кластеров Swarm

Быстрая и дешевая скорость чтения файлов Parquet в Swarm обеспечивается следующими факторами:

  • Кэширование, которое сокращает задержку обработки данных на 90% и более. Узлы-инициаторы ClickHouse кэшируют метаданные Iceberg, что снижает стоимость планирования запросов. Кластеры Swarm кэшируют блоки файлов S3 и метаданные Parquet-файлов, снижая стоимость их на определенных узлах кластера.Внешние HTTP-кэши сохраняют запросы API к S3, включая медленные вызовы S3 ListObjectsV Они уменьшают количество вызовов API, сокращают задержку во всем кластере Swarm и затраты на облачное объектное хранилище.
  • Автоматическое масштабирование с использованием типовых инструментов Kubernetes. Узлы Swarm регистрируются при появлении в кластере и отменяются при их исчезновении.
  • Эфемерность – узлы Swarm могут работать на спотовых экземплярах, что снижает затраты на вычисления более чем вдвое. А минимальный объем хранилища сокращает затраты еще больше.

Примечательно, что кластеры Swarm не ограничиваются только таблицами Iceberg. Они могут читать любые Parquet-данные в S3, включая таблицы Hive, а также файлы Parquet, использующие подстановочные знаки.

Чтобы снизить затраты на хранение исторических данных, Antalya поддерживает многоуровневое хранилище в ClickHouse, которое автоматически перемещает табличные данные в более дешевое место хранения по мере их устаревания. При этом пользователи по-прежнему видят исходную одну таблицу, независимо от того, где фактически хранятся данные. Antalya расширяет многоуровневое хранилище, перемещая старые данные в Iceberg, что снижает стоимость их хранения примерно в 10 раз. При этом запросы, которые попадают в многоуровневые таблицы, автоматически направляются в локальное хранилище и хранилище Iceberg одновременно. Swarm обеспечивает дополнительную вычислительную мощность для сканирования холодных данных. Это помогает сохранять кластеры, которые управляют горячими данными, небольшими. Приложения видят только один набор результатов.

Запросы к многоуровневому хранилищу в Antalya
Запросы к многоуровневому хранилищу в Antalya

В заключение отметим, что Antalya активно использует существующие возможности ClickHouse, такие как табличный движок MergeTree, а также функции, позволяющие избегать пробелов или дубликатов в данных при их выборке. Как и ClickHouse, Antalya является проектом с открытым исходным кодом и доступен в ветке Antalya в репозитории Altinity ClickHouse на GitHub. Это современный инструмент построения масштабируемой архитектуры данных, сочетающий возможности ClickHouse, облачные операции и озера на Iceberg/Parquet для выскопроизводительных и экономичных аналитических систем с запуском в любом месте.

Освойте ClickHouse на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Источники

  1. https://altinity.com/blog/announcing-project-antalya-infinitely-scalable-clickhouse-query-on-10x-cheaper-iceberg-storage
  2. https://github.com/Altinity/antalya-examples
  3. https://clickhouse.com/blog/climbing-the-iceberg-with-clickhouse
Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.