Открыть сервис

Apache Druid

Apache Druid — это высокопроизводительная распределённая система управления базами данных (СУБД) с открытым исходным кодом, предназначенная для оперативной аналитической обработки (OLAP) в реальном времени. Она оптимизирована для быстрых запросов (подсекундная задержка) к большим объёмам данных, поступающих в потоковом режиме или хранящихся в виде исторических срезов. Druid сочетает в себе черты хранилища данных, временного ряда и поисковой системы, что делает её популярным инструментом для бизнес-аналитики, мониторинга инфраструктуры и анализа пользовательских событий.

История

Проект Apache Druid был создан в 2011 году инженерами компании Metamarkets (США) для внутренних нужд — анализа рекламных данных в реальном времени. В 2012 году код был опубликован под лицензией Apache 2.0, а в 2018 году проект стал частью инкубатора Apache Software Foundation, получив статус полноценного проекта верхнего уровня в 2019 году. Ключевыми разработчиками выступили Эрик Ци, Фан Цзинь и другие. В 2020 году компания-разработчик Imply, основанная создателями Druid, представила коммерческую версию платформы с дополнительными функциями. Сейчас Druid поддерживается сообществом и используется в крупных корпорациях, включая Netflix, Airbnb, Alibaba, Lyft и Яндекс.

Архитектура и принципы работы

Druid построена на архитектуре «разделение вычислений и хранения» (shared-nothing), что обеспечивает горизонтальную масштабируемость. Система состоит из нескольких типов узлов (серверов), каждый из которых выполняет свою роль:

  • Координатор (Coordinator) — управляет метаданными, распределением сегментов данных и их репликацией.
  • Брокер (Broker) — принимает запросы от клиентов, маршрутизирует их к соответствующим узлам и агрегирует результаты.
  • Исторический узел (Historical node) — хранит и обрабатывает неизменяемые исторические данные (сегменты).
  • Узел реального времени (Realtime node) — принимает потоковые данные, индексирует их и преобразует в сегменты для исторических узлов.
  • Средний менеджер (MiddleManager) — управляет задачами индексации (например, пакетной загрузкой данных из Hadoop или Kafka).
  • Роутер (Router) — опциональный узел для балансировки нагрузки и маршрутизации запросов.

Данные в Druid хранятся в виде сегментов — неизменяемых файлов, организованных по времени и другим измерениям. Каждый сегмент содержит данные за определённый временной интервал (например, один час или день). Сегменты сжимаются (используются алгоритмы LZ4, Zstandard) и индексируются для быстрого поиска. Для хранения метаданных (информация о сегментах, схемах) используется внешняя СУБД — обычно MySQL или PostgreSQL, а для координации — Apache ZooKeeper.

Потоковая и пакетная загрузка

Druid поддерживает два основных способа загрузки данных:

  1. Потоковая загрузка (streaming ingestion) — данные поступают в реальном времени через Apache Kafka, Amazon Kinesis или другие системы очередей. Узлы реального времени индексируют их в оперативной памяти и периодически сбрасывают на диск в виде сегментов.
  2. Пакетная загрузка (batch ingestion) — данные загружаются из файловых систем (HDFS, S3, локальные файлы) или из других источников (например, Apache Hadoop). Задачи индексации выполняются средними менеджерами.

Ключевые характеристики

Скорость запросов

Druid оптимизирована для выполнения агрегационных запросов (суммы, средние, минимумы, максимумы, процентили) с фильтрацией по времени и измерениям. Время ответа составляет от десятков миллисекунд до нескольких секунд даже при объёмах данных в терабайты и петабайты. Это достигается за счёт:

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

Поддержка SQL

Изначально Druid использовала собственный JSON-ориентированный язык запросов (Druid SQL), но с версии 0.13 (2018 год) была добавлена поддержка стандартного SQL. Пользователи могут выполнять запросы через JDBC/ODBC-драйверы, а также через REST API. SQL-запросы автоматически преобразуются в низкоуровневые операции Druid.

Горизонтальная масштабируемость

Система легко масштабируется добавлением новых узлов. Сегменты автоматически реплицируются (по умолчанию — 1 реплика) и распределяются между историческими узлами. При сбое узла сегменты перераспределяются координатором.

Применение

Apache Druid используется в сценариях, где требуется быстрая аналитика в реальном времени:

  • Мониторинг и observability — анализ логов, метрик производительности (например, в Grafana через плагин).
  • Рекламная аналитика — подсчёт показов, кликов, конверсий в реальном времени.
  • Бизнес-аналитика — построение дашбордов для продаж, пользовательской активности, финансовых показателей.
  • IoT и телеметрия — обработка данных с датчиков и устройств.
  • Финансовый анализ — мониторинг транзакций, выявление аномалий.

Примеры использования

  • Netflix — использует Druid для анализа пользовательского поведения и рекомендаций.
  • Airbnb — применяет для мониторинга бронирований и цен.
  • Alibaba — обрабатывает данные о заказах и трафике в реальном времени.
  • Яндекс — использует Druid для аналитики рекламных кампаний (Яндекс.Директ).

Сравнение с другими системами

СистемаТипОсновное назначениеОсобенности
Apache DruidOLAP-база данныхАналитика в реальном времениВысокая скорость запросов, потоковая загрузка, колончатое хранение
ClickHouseOLAP-база данныхАналитика в реальном времениВысокая производительность, поддержка SQL, менее зрелая экосистема
Apache PinotOLAP-база данныхАналитика в реальном времениАналогична Druid, но с акцентом на низкую задержку
Apache CassandraNoSQL-база данныхХранение и обработка больших объёмовНе оптимизирована для агрегаций, высокая доступность

Druid часто сравнивают с ClickHouse (российская разработка, компания Яндекс). Обе системы ориентированы на OLAP, но Druid имеет более развитую поддержку потоковой загрузки и интеграцию с Kafka, тогда как ClickHouse предлагает более широкий набор функций SQL и более высокую производительность на некоторых типах запросов.

Интеграция с другими инструментами

Druid интегрируется с популярными системами:

  • Apache Kafka — для потоковой загрузки данных.
  • Apache Hadoop / Spark — для пакетной обработки.
  • Grafana — визуализация данных через плагин.
  • Apache Superset — BI-инструмент с поддержкой Druid.
  • Tableau — через JDBC-драйвер.
  • Python / R — через библиотеки (pydruid, RJDBC).

Критика и ограничения

Несмотря на преимущества, Druid имеет ряд недостатков:

  • Сложность настройки и администрирования — требуется знание архитектуры и настройка ZooKeeper, MySQL, Kafka.
  • Ограниченная поддержка SQL — не все функции SQL (например, JOIN между таблицами) реализованы эффективно.
  • Высокое потребление памяти — для быстрой работы требуется много оперативной памяти на узлах.
  • Ограниченная поддержка обновлений данных — данные в сегментах неизменяемы, обновление возможно только через переиндексацию.
  • Зависимость от внешних систем — для метаданных и координации нужны ZooKeeper и реляционная база данных.

Интересные факты

  • Название «Druid» происходит от кельтских жрецов, что символизирует «мудрость» и «знание» данных.
  • Druid поддерживает до 100 000 запросов в секунду на одном кластере.
  • В 2020 году проект Apache Druid был признан одним из самых быстрорастущих проектов в области больших данных.

Источники

  • Официальная документация Apache Druid (druid.apache.org)
  • «Apache Druid: The Real-Time Analytics Database» — книга Эрика Ци и др. (O'Reilly Media, 2020)
  • «Druid: A Real-time Analytical Data Store» — статья в журнале ACM SIGMOD (2014)
  • Документация Imply (imply.io)
  • Материалы конференций ApacheCon и DataEngConf

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →