Ответ
Apache Druid — это распределенная, колоночная, высокопроизводительная система для аналитики в реальном времени (OLAP), оптимизированная для работы с временными рядами и событийными данными.
Ключевые особенности и задачи:
- Низкая задержка запросов: Предназначен для sub-second запросов к большим объемам данных.
- Высокая пропускная способность приема: Поддерживает потоковый (streaming) и пакетный (batch) ingestion данных.
- Аналитика временных рядов: Идеален для дашбордов, мониторинга, анализа поведения пользователей.
- Колоночное хранение: Эффективное сжатие и быстрый доступ только к нужным столбцам.
- Распределенная архитектура: Компоненты (Coordinator, Overlord, Broker, Historical, MiddleManager) разделены для масштабирования и отказоустойчивости.
Архитектура запроса:
- Клиент отправляет запрос на Broker.
- Broker определяет, какие Historical и MiddleManager узлы хранят релевантные сегменты данных.
- Запрос распараллеливается, выполняется на этих узлах, и результаты агрегируются Broker-ом.
- Coordinator управляет распределением сегментов по узлам.
- Overlord контролирует процесс загрузки (ingestion) данных.
Пример запроса (SQL):
-- Агрегация событий по часам и измерению
SELECT
TIME_FLOOR(__time, 'PT1H') AS "hour",
country,
COUNT(*) AS "events",
SUM(revenue) AS "total_revenue"
FROM "web_events"
WHERE __time >= CURRENT_TIMESTAMP - INTERVAL '1' DAY
GROUP BY 1, 2
ORDER BY "hour" DESC, "total_revenue" DESC
| Сравнение с другими системами: | Система | Тип | Сильные стороны Druid |
|---|---|---|---|
| ClickHouse | OLAP-СУБД | Лучшая встроенная поддержка потокового ingestion, управление данными на уровне сегментов. | |
| Elasticsearch | Поисковый движок | Гораздо быстрее для сложных группировок и агрегаций по временным рядам. | |
| Hive/Spark | Пакетная обработка | Запросы в реальном времени, а не пакетные. |
Типичный стек использования:
Kafka/Stream (источник данных) → Apache Kafka (поток) / Apache Spark (пакет) → Druid (хранение и анализ) → Grafana/Superset (визуализация).