猿创征文|OLAP之apache pinot初体验

2022-11-13 13:21:12 浏览数 (2)

目录

一、背景

二、介绍

三、特征

四、价值

五、参考组件

组件清单介绍:

1.Controller

2.Server

3.Broker

4.Minion (optional)

六、数据采集

批量数据流程

实时数据流程

查询处理流程


一、背景

最近在熟悉公司内部的埋点采集,发现数据架构最后是存放到apache pinot库的,因为之前从来没见过,所以有了本文的学习文档。

二、介绍

废话不多说了,来看看apache pinot到底是干什么用的吧

官方介绍

Apache Pinot, a real-time distributed OLAP datastore, purpose-built for low-latency high throughput analytics, perfect for user-facing analytical workloads.

Apache Pinot是一个实时分布式OLAP数据存储,专为低延迟高吞吐量分析而构建,非常适合面向用户的分析工作负载。

Pinot是一个实时分布式OLAP数据存储,专为提供超低延迟分析而构建,即使在极高的吞吐量下也是如此。它可以直接从流数据源(如Apache Kafka和Amazon Kinesis)摄取,并使事件可以立即查询。它还可以从Hadoop HDFS、Amazon S3、Azure ADLS和Google Cloud Storage等批处理数据源中摄取。

系统的核心是一个柱状存储,具有几种智能索引和预聚合技术,可实现低延迟。这使得Pinot最适合面向用户的实时分析。与此同时,Pinot也是其他分析用例的绝佳选择,例如内部仪表板、异常检测和临时数据探索。

官网地址:

Introduction - Apache Pinot Docs

三、特征

1.一个面向列的数据库,具有各种压缩方案,如运行长度、固定位长度

2.插件化索引技术

Sorted Index, Bitmap Index, Inverted Index, StarTree Index, Bloom Filter, Range Index, Text Search Index(Lucence/FST), Json Index, Geospatial Index

排序索引、位图索引、倒置索引、StarTree索引、Bloom过滤器、范围索引、文本搜索索引(Lucence/FST)、Json索引、地理空间索引

3.能够根据查询和分段元数据优化查询/执行计划

4.非常快且可以近实时接入(支持离线以及实时处理)

从Kafka、Kinesis等流中几乎实时摄取,以及从Hadoop、S3、Azure、GCS等来源批量摄取

5.类似SQL的语言,支持对数据的选择、聚合、过滤、分组、排序、不同的查询

6.支持多值字段

7.水平可扩展(基于了apache helix 框架)

8.容错

9.异常分析,只能报警,主要基于了thirdeye

10.基于prestodb,trino,进行多表查询(主要是当前不支持,只能基于此处理,当然dremio也是一种选择,但是肯定没有官方推荐的好)

四、价值

五、参考组件

Helix是一个集群管理解决方案,由LinkedIn的Pinot作者设计和创建。Helix将比诺集群的状态从瞬态驱动到理想状态,充当容错分布式状态存储,保证一致性。Helix作为在控制器、代理和服务器中运行的代理嵌入,并且不存在于独立和水平缩放的组件中。

组件清单介绍:

1.Controller

控制器是推动集群一致性和路由的核心。控制器作为独立组件(容器)水平缩放,并具有集群中所有其他组件状态的可见性。控制器对系统中的状态更改做出响应和响应,并安排表、段或节点的资源分配。如前所述,Helix作为代理嵌入控制器中,该代理负责观察和驱动其他组件订阅的状态变化。除了集群管理、资源分配和调度外,控制器还是用于管理皮诺部署的REST API的HTTP网关。还提供了一个基于Web的查询控制台,供运营商快速轻松地运行SQL/PQL查询。

2.Server

经纪人接收来自客户端的查询,并在返回统一响应之前将其执行路由到一个或多个Pinot服务器。

3.Broker

服务器托管段(碎片),在多个节点之间调度和分配,并在分配给租户时路由(默认情况下有一个单一租户)。服务器是独立容器,可以水平缩放,并通过控制器驱动的状态更改由Helix通知。服务器可以是实时服务器,也可以是离线服务器。实时和离线服务器的资源使用要求非常不同,实时服务器不断消耗来自外部系统(如Kafka主题)的新消息,这些消息被摄取并分配给租户的片段。因此,资源隔离可用于对摄取然后通过代理查询的高吞吐量实时数据流进行优先排序。

4.Minion (optional)

Pinot minion是一个可选组件,可用于运行后台任务,例如GDPR(一般数据保护条例)的“清除”。由于Pinot是一个不可变的聚合存储,因此需要根据请求清除包含敏感私人数据的记录。Minion为此提供了一个符合GDPR的解决方案,同时优化了Pinot细分市场,并构建了额外的指数,以保证在数据删除可能性的情况下的性能。还可以编写定期运行的自定义任务。虽然可以直接在皮诺服务器上执行这些任务,但有一个单独的进程(Minion)可以减少查询延迟的总体退化,因为段受到可变写入的影响。 

六、数据采集

在Pinot中,逻辑表被建模为两种类型的物理表之一:离线表、实时表

  • 实时表的保留期更短,并根据摄取率扩展查询性能。
  • 离线表根据存储数据的大小具有更大的保留和缩放性能。

批量数据流程

批处理模式下,数据通过摄取作业摄取到Pinot。摄取作业将原始数据源(如CSV文件)转换为Segment段。一旦为导入的数据生成段,摄取作业将它们存储到集群的段存储器(也称为深度存储)并通知Controller控制器。通知被处理,结果是控制器上的螺旋代理更新了Zookeeper中的理想状态配置。然后,Helix将通知离线Server服务器有可用的新Segment。根据控制器的通知,离线服务器直接从集群的细分商店下载新创建的段。集群的代理监视Helix中的状态变化,检测新段并将其添加到要查询的段列表中(段到服务器路由表)。

实时数据流程

在表创建时,控制器在Zookeeper中为消费段创建一个新条目。Helix注意到新段并通知实时服务器实时服务器开始消耗来自流媒体源的数据。代理监视更改,检测新段并将其添加到要查询的段列表中(段到服务器路由表)。每当段完成(即满)时,实时服务器都会通知控制器,控制器检查所有副本,并选择获胜者将段提交到。获胜者提交该细分市场并将其上传到集群的细分市场商店,将细分市场的状态从“消费”更新为“在线”。然后,控制器准备处于“消耗”状态的新段。 

查询处理流程

查询由Server经纪人接收——Server经纪人根据分段到服务器的路由表检查请求——将请求分散在实时和离线服务器之间。然后,两个表通过过滤和聚合查询数据来处理请求,然后返回给Server经纪人。最后,Server经纪人收集查询响应的所有部分,并回复客户端并提供结果。

0 人点赞