一、业务需求
微博万亿级别数据,实时摄取,实时数据多维分析,低延时响应
二、调研实时OLAP
clickhouse, druid,pinot,感觉这篇文章写得不错:https://medium.com/@leventov/comparison-of-the-open-source-olap-systems-for-big-data-clickhouse-druid-and-pinot-8e042a5ed1c7
我们觉得pinot更适合我们的需求,于是对pinot进行深入调研,包括部署,数据摄取,数据查询等
三、pinot介绍
https://github.com/apache/incubator-pinot
Pinot 是一个实时分布式的 OLAP 数据存储和分析系统。使用它实现低延迟可伸缩的实时分析。Pinot 从离线数据源(包括 Hadoop 和各类文件)和在线数据源(如 Kafka)中攫取数据进行分析。Pinot 被设计是可以进行水平扩展的。
Pinot 特别适合这样的数据分析场景:查询具有大量维度和指标的时间序列数据,分析模型固定,数据只追加以及低延迟,以及分析结果可查询。
关键特性:
- 面向列的数据库,具有各种压缩方案,如运行长度,固定位长度
- 可插拔索引技术 - 排序索引,位图索引,倒排索引
- 能够根据查询和段元数据优化查询/执行计划。
- 几乎实时从流中摄取和从Hadoop批量摄取
- SQL类似于支持选择,聚合,过滤,分组依据,对数据进行不同查询的语言。
- 支持多值字段
- 水平可扩展和容错
Pinot存在一定的局限性:
- Pinot不是数据库的替代品,即它不能用作真值存储源,不能改变数据
- 不是搜索引擎的替代品,即全文搜索,不支持相关性
- 查询不能跨越多个表。
Pinot架构
Pinot核心组件及组件的主要功能
1、controller
管理集群中的节点
对Table和Segment的创建、更新和删除操作的处理
计算Table和Segment在server上的分配
2、broker
它接收客户端的查询请求,并且将路由到多个服务上(根据路由策略), 合并接收的查询结果并返回给客户端。
3、server 它保存一个或者多个物理的Segment,职责包括:
当被分配一个预先创建的segment,下载并且装载这个Segment,当被分配一个Kafka Topic,从kafka的partion的一个子集中消费数据
执行查询请求并将结果返回给broker