最近阅读了《快手万亿级实时OLAP平台的建设与实践》这篇博文,在公司内部也采用了druid作为实时OLAP的查询引擎,快手的在druid中的优化总结如下:
(1)集群规模和效果
(2)druid内部查询技术点
数据的预聚合、列式存储、bitmap索引,查询结果的中间缓存等。
(3)快手使用和查询优化经验
1:资源隔离部署方案.
冷热数据分离,热数据SSD ,冷数据HDD
tier配置,对特殊业务单独配置tier。
2:物化视图
从维度上来讲, 对于一个大的datasource,根据查询维度的热度,再独立建立相应的datasource ,典型的空间换时间。
从时间的维度上来讲,大范围的时间查询,分钟级聚合->小时级聚合->天级别聚合。
3:元数据交互加速(百万级别的segments)
overlord与mysql交互优化:添加慢查询的索引,如 dataSource、used、end.
coordinator 与mysql交互优化:
coordinator全量扫描druid_segments表改为增量扫描。添加used、create_date索引。
coordnator扫描segment匹配rule过程串行->并行。
4: indexing service 调度优化
task count 根据kafka lag 自动伸缩。
middle manager 的indexing task 资源分配从slot改成按照内存分配,可以指定task内存大小进行提交。
并行compaction:串行扫描segments compaction ->hadoop任务,并行compaction .
5:集群管理系统
druid数据源管理系统: 自助管理druid datasource,和indexing task .
druid 探针系统: 数据源冷热查询热度分析,冷/无用数据源的发现,高基维度的发现,无用维度/指标的发现。
6: 数据可视化工具superset
此外还有多time shift支持和改进、多chart窗口联动、报警功能设计。
参考文章: