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