Roadmap of Kylin 5.0(CN)
Target Audience
- 对新一代 Kylin 感兴趣的开发者和用户
- 对 OLAP 技术有兴趣的大数据爱好者
What will you learn
- 了解最新版本的 Kylin 的设计思路
- 了解最新版本的 Kylin 的开发路线和发布计划
💬 Kylin 5.0 相对于上个版本有了更长足的进步,尤其是在使用场景的扩充和构建查询的性能提升上。 这篇 Kylin 5.0 社区路线图,将帮助大家了解社区开发者在面对 Kylin 4 尚未解决的问题,是如何在 Kylin 5 上进行全面的重新设计并且实现新功能,并且会分析这些新功能,诸如“Native Engine”、“Schem Change”、“可计算列”、“明细索引”给用户带来的全新体验。
今天的 Apache Kylin
Apache Kylin 是什么?
Apache Kylin™ 是一个开源的分析型数据仓库,为 Hadoop 等大型分布式分析平台之上的超大规模数据集(PB级)通过标准 SQL 查询及多维分析 ( OLAP ) 功能,提供亚秒级的交互式分析能力。
Apache Kylin 的基本原理
Cube 是 OLAP ( Online Analytical Processing ) 的核心数据结构,把维度和度量抽象为一个多维模型,赋予了OLAP 新的数据组织和存储形式,并可以快速、高效地完成 OLAP 的多维分析操作。
我们可以想象有一个三个维度的 Cube,它包含了商品种类、时间和地点。在存储中我们可以把某一个具体的小方块想象成一个特定维度组合的度量,左下角的小方块存储了(浙江,2010 第一季度,书籍)这个组合下我们关心的业务指标, s这可能是成交总量、平均价格等等。基于这样的数据结构,我们可以完成钻取、上卷、切片、切块和旋转的操作,这样就可以进行一些数据分析、数据探索,帮我们去解答这些业务的问题。并且由于不需要现场进行扫描和聚合,所以查询响应一般很快。
Apache Kylin 通过构建引擎和查询引擎来分别生成和查询预计算数据文件,并且基于分布式计算引擎如 Apache Spark 来扩展构建引擎和查询引擎的计算能力。对于用户,Kylin 提供不同的接口如 SQL/HTTP/BI/Excel 等方式来进行数据分析,可以使得用户可以对 PB 级数据集实现秒级查询。
当前版本的限制
- 模型修改的使用方式有限制,对于建好的 Model/Cube,不能随意添加维度和度量,需要先清理现有的预计算索引(Cuboid)才能添加;为了增加新的度量和维度,用户需要创建新的 Cube,增加了管理成本,并且浪费了计算和存储资源。
- 预计算索引的构建不够灵活,用户只能选择构建全部的预计算索引,一旦构建完成用户无法自主选择添加和删除部分预计算索引(只能通过 Cube Planner 的算法进行筛选)。
- 构建和查询性能仍有提升空间,Kylin 使用 Apache Spark 作为执行/计算引擎,没有利用到向量加速、指令级优化等技术。
- 维度数量有上限,最多支持 63 个维度。这是由于元数据存储中是用 Long 型来保存的 Cuboid ID 而造成的。
- 长期使用后元数据存储膨胀,非核心元数据(任务历史等)会占用大量的空间,造成元数据读取写入性能下降,从而引起 Kylin 整体服务性能不佳。
Kylin 5 的设计思考
Kylin 5 的整体目标
我们希望 Kylin 5 是一个统一、灵活、高性能、可扩展、云原生的大数据分析平台,可以做到在一个平台上完成很多的数据分析工作,能够对接各种数据源,支持多种查询接口,也可以可插拔地替换各种计算引擎,包括支持性能有明显提升的 Native Engine,可以为现代企业的海量数据上的数据分析和指标管理提供一个坚实可靠的底座。
同时我们也希望未来 Kylin 5 可以支持在 K8S 上部署,Kylin 5 将以微服务的方式进行拆分和部署,应对不同的负载可以支持灵活快捷地进行扩缩容。
Kylin 5 的设计方向
No.1 重新设计核心元数据
这里涉及到元数据 Schema 和元数据存储的升级,通过对元数据进行重构使得 Kylin 的使用限制得以消除;元数据的存储会把元数据进行结构化(而不是现在的键值存储形式),以提升元数据读写性能。
No.2 核心功能升级改造
基于新的元数据的设计,我们进一步去改造构建引擎和查询引擎,使我们能够更加灵活的创建和刷新索引,在添加新的度量和维度时 ,可以不用清空现有的所有的预计算索引,给 Kylin 带来使用灵活性的提升。
Kylin 5 抽象了索引的类型以提供索引类型的可扩展性,Kylin 5 可以同时支持聚合查询和明细查询。
除此以外,还计划会支持更多类型的连接关系(例如多对多)、支持索引的多级分区、支持拉链表、支持(自动适应)表元数据变更等生产场景。
No.3 计算引擎性能提升
Kylin 需要使用分布式计算引擎来构建和扫描预计算索引文件,计算引擎的速度快慢很大程度上影响用户的体验。对于 Kylin 5.0,Kylin 5 将继续使用 Apache Spark 作为基础的计算引擎,除此以外,社区开发者正在尝试使用一些 Native Engine 来扩展(或者代替) Spark,包括 Gluten + Clickhouse 或者 Datafusion。
Kylin 5 开发路线图
元数据 Schema 升级
- 将 Model 和 Cube 二者合并为新的 Model ,Cube 将从元数据和界面中被舍弃;在 Kylin 5 中,用户不再需要先创建模型(Join Relationship),再定义 Cube(维度和指标),而是将两个步骤合并为了 一个步骤(即创建 Model),简化了流程,方便了用户。
- 新增元数据 Index 和 Layout 。其中新增的 Index 可以提升 Kylin 的扩展性,除聚合索引外还添加了明细索引;而 Layout 可以使得对于指定 Index 可以具有不同的数据特征(Shard Key 和 Sort Key),这样可以在查询时使用最合适的 Layout 来进行查询加速。并且新的 Index 没有 63 个维度的数量限制。
- 引入 IndexPlan,IndexPlan 根据用户的模型设计和静态规则生成索引(RuleBasedIndex),并且这些 IndexPlan 也可以用来适应各种因素(内置策略、外部修改)引起的索引增减:一方面 IndexPlan 的引入使得应对模型变更或者表元数据的变更变得简单,另一方面 IndexPlan 也为基于代价的索引优化器提供了设计上的支持。
- 将 CubeInstance 改为 DataFlow。
- 新增元数据审计日志,可以用于实现元数据操作审计、开发者调试和元数据缓存的节点间同步机制。
元数据同步机制升级
和之前的基于广播的元数据同步机制不同的是,在新的元数据同步机制下,每个节点会基于元数据变化信息进行主动同步,让元数据缓存同步的可靠性得到提升。(相关技术细节请期待后续的系列技术文章)