Skip to content

Apache Druid

Apache Druid是一个现代化的分析型数据库,专为大规模实时分析场景设计,提供低延迟的OLAP查询能力。

核心架构

服务类型

  • Coordinator - 集群元数据管理和负载均衡
  • Overlord - 数据摄入任务管理
  • MiddleManager - 数据处理执行节点
  • Broker - 查询路由和结果聚合
  • Router - 查询请求路由(可选)
  • Historical - 历史数据存储和查询服务

存储模型

  • Segments - 数据分片存储单元
  • Deep Storage - 持久化存储层(S3、HDFS等)
  • Local Cache - Historical节点本地缓存
  • Metadata Store - 元数据存储(MySQL、PostgreSQL)

数据模型

核心概念

  • DataSource - 数据源,类似表概念
  • Dimensions - 维度字段,用于分组和过滤
  • Metrics - 指标字段,用于聚合计算
  • Timestamp - 时间戳,数据分区依据
  • Granularity - 时间粒度,数据汇总级别

数据类型

json
{
  "timestamp": "2024-01-01T00:00:00.000Z",
  "dimensions": {
    "country": "CN",
    "device": "mobile",
    "channel": "organic"
  },
  "metrics": {
    "impressions": 1000,
    "clicks": 50,
    "revenue": 25.5
  }
}

数据摄入

批量摄入

  • Index Task - 批量数据索引任务
  • Hadoop Batch Ingestion - 基于Hadoop的批处理
  • Native Batch - 原生批量摄入
  • SQL-based Ingestion - 基于SQL的数据摄入

流式摄入

  • Kafka Indexing Service - 实时Kafka数据流
  • Kinesis Indexing - AWS Kinesis集成
  • Tranquility - 实时数据推送框架
  • HTTP Push - RESTful数据推送

数据格式

  • JSON - 标准JSON格式
  • CSV - 逗号分隔值
  • TSV - Tab分隔值
  • Parquet - 列式存储格式
  • Avro - 模式演进支持

查询能力

Druid SQL

sql
-- 标准SQL查询
SELECT 
  DATE_TRUNC('day', __time) as day,
  country,
  SUM(impressions) as total_impressions,
  SUM(clicks) as total_clicks,
  SUM(clicks) * 1.0 / SUM(impressions) as ctr
FROM my_datasource
WHERE __time >= '2024-01-01'
GROUP BY 1, 2
ORDER BY day DESC, total_impressions DESC

Native Queries

  • TimeBoundary - 时间范围查询
  • Timeseries - 时序数据查询
  • TopN - Top N排序查询
  • GroupBy - 分组聚合查询
  • Scan - 原始数据扫描
  • Search - 维度值搜索

预聚合优化

Rollup机制

json
{
  "queryGranularity": "hour",
  "granularitySpec": {
    "type": "uniform",
    "segmentGranularity": "day",
    "queryGranularity": "hour",
    "rollup": true
  }
}

近似算法

  • HyperLogLog - 基数统计
  • Theta Sketch - 集合运算
  • Quantiles Sketch - 分位数计算
  • Histogram - 数据分布统计

性能优化

分区策略

  • 时间分区 - 按时间范围分片
  • Hash分区 - 均匀数据分布
  • Range分区 - 按值范围分区
  • 复合分区 - 多维度组合分区

索引技术

  • 倒排索引 - 维度值快速查找
  • 位图索引 - 高效过滤操作
  • BloomFilter - 存在性检测
  • 空间索引 - 地理位置查询

缓存机制

  • Query Cache - 查询结果缓存
  • Segment Cache - 数据段缓存
  • LookupCache - 维度查找缓存

实时分析特性

低延迟查询

  • 亚秒级响应 - 复杂查询毫秒级返回
  • 并发查询 - 高并发查询支持
  • 查询优化 - 智能查询计划
  • 结果缓存 - 重复查询加速

实时可见性

  • 准实时摄入 - 秒级数据可见
  • Lambda架构 - 批流结合处理
  • 数据去重 - 重复数据处理
  • 乱序数据 - 时间乱序处理

运维管理

监控指标

  • Query Metrics - 查询性能指标
  • Ingestion Metrics - 数据摄入指标
  • System Metrics - 系统资源指标
  • Segment Metrics - 数据段状态指标

扩容策略

  • Historical扩容 - 增加查询节点
  • MiddleManager扩容 - 增加处理能力
  • Broker扩容 - 提高查询吞吐
  • 存储扩容 - 深度存储扩展

应用场景

实时分析

  • 用户行为分析 - 网站/App行为追踪
  • 广告监控 - 实时广告效果分析
  • 业务监控 - 关键指标实时监控
  • A/B测试 - 实验结果实时分析

时序分析

  • IoT数据分析 - 传感器数据处理
  • 系统监控 - 服务器性能分析
  • 金融分析 - 交易数据实时分析
  • 运营分析 - 业务运营数据洞察

多维分析

  • OLAP立方体 - 多维度数据切片
  • 钻取分析 - 层次化数据探索
  • 趋势分析 - 时间序列趋势发现
  • 异常检测 - 数据异常实时发现

Druid通过其独特的架构设计和优化的数据模型,为现代企业提供了强大的实时分析能力,特别适合需要低延迟、高并发的分析场景。

正在精进