大数据 -157 Apache Kylin 全面指南:MOLAP 架构、Hive/Kafka 实战与实时 OLAP 落地

TL;DR
场景:海量明细(百 TB/千亿级)、高并发 SQL 分析,要求秒级响应与可视化接入。
结论:Kylin 以预计算 Cube/Cuboid + HBase 存储,实现 MOLAP 加速;实时能力取决于模型与构建链路。
产出:一套版本/组件选择矩阵 + 常见故障速查卡,帮助工程化落地与问题定位。
版本矩阵
背景历史
Apache Kylin 是一款开源的分布式分析引擎,专门用于处理超大规模数据集的多维在线分析处理(MOLAP)。该技术最初由 eBay 中国研发中心的工程师团队于 2013 年开发,旨在解决 eBay 日益增长的海量数据分析需求。
2014 年 10 月,eBay 正式将 Kylin 项目捐赠给 Apache 软件基金会,使其成为 Apache 孵化器项目。经过一年多的孵化过程,Kylin 在 2015 年 11 月成功毕业,晋升为 Apache 顶级项目(Top-Level Project)。这个里程碑式的成就使得 Apache Kylin 成为首个由中国人主导并成功晋升为 Apache 顶级项目的开源大数据技术。
在技术发展过程中,Apache Kylin 的核心开发团队于 2016 年创立了 Kyligence 公司(全称 Kylin Intelligence)。这家初创企业获得了来自红点创投、宽带资本等知名投资机构的数千万美元融资,专注于商业化的企业级 Kylin 解决方案的开发和服务。
值得一提的是,Apache Kylin 这个名字来源于中国古代神话中的"麒麟"神兽,象征着祥瑞和智慧。这个命名体现了中国开发者对传统文化的传承,也代表了项目团队对大数据分析技术的美好愿景。
发展历程
2014 年 Kylin 诞生,支持 Hive 批数据源,从海量历史数据挖掘价值
2015 年 V1.5 首先支持 Kafka 数据源,采用单机微批次处理构建
2016 年 V1.6 发布实时(NRT Streaming),使用 Hadoop 微批次消费流数据
2017 年 V2.0 支持雪花模型和 Spark 引擎
eBay 团队开始尝试 real-time
2018 年 V2.4 支持 Kafka 流数据与 Hive 维度表 JOIN
eBay 开源 real-time OLAP 实现
2019 年 Q1,经过社区 Review 和完善,合并 Master
2019 年 Q4,V3.0 发布 Real-time OLAP,实现秒级数据准备延迟
Kylin 提供多维数据分析(MOLAP)的秒级响应,目前国内很多公司都在使用。
项目特点
数据源和模型:主要支持 Hive、Kafka
构建引擎:早起支持 MapReduce 计算引擎,新版本支持 Spark、Flink 计算引擎。除了全量构建外,对基于时间的分区特性,支持增量构建。
存储引擎:构建好的 Cube 以 Key-Value 的形式存储在 HBase 中,通过优化 RowKey 加速查询。每一种维度的排列组合计算结果被保存为一个物化视图,叫 Cuboid
优化算法:Cube 本身就是用空间换时间,也会根据算法,剪枝优化掉一些多余的 Cubeid,寻求平衡
访问接口:支持标准 SQL 查询,可以对接 Zeppelin、Tableau 等 BI 工具,SQL 通过查询引擎,可以被路由到对应的 Cuboid 上。
应用场景
特点:Kylin 在亚秒内返回海量数据的查询结果
Kylin 的典型应用场景如下:
巨大的数据量,单个数据源表千亿级别,且单个数据源达到百 TB 级别
巨大的查询压力(查询的高并发)
查询的快速响应
下游较灵活的查询方式,需支持带有复杂条件的 SQL 查询
Kylin 的核心思想是预计算,将数据按照指定的维度和指标,预先计算出所有可能的查询结果,利用空间换时间来加速模式固定的 OLAP 查询。
基本术语
数据仓库
数据仓库是一种信息系统的资料存储理论,强调的是利用某些特性的资料存储方式,让所包含的资料特别有利于分析和处理,从而产生有价值的咨询,并可依此做出决策。利用数据仓库的方式存放的资料,具有一旦存入,便不会随时发生变动的特性,此外,存入的资料必包含时间属性,通过一个数据仓库中含有大量的历史性资料,并且它可以利用特定的分析方式,从其中发掘出特定的资讯。
OLTP
联机事务处理,传统的关系型数据库的应用。
OLAP 分类
OLAP(Online Analytical Process),联机分析处理,以多维度的方式分析数据,它是呈现集成性决策信息的方法,多用于数据仓库或商务智能。其主要功能在于方便大规模数据分析及统计计算,可对决策提供参考和支持。与之相区别的是联机交易处理(OLTP),联机交易处理,侧重与基本的、日常的事务处理,主要是事务的增删改查。
OLAP 的概念,在实际应用中存在广义和狭义两种不同的理解方式。广义上理解与字面上的意思相同,泛指一切不会对数据进行更新的分析处理。但更多的情况下 OLAP 被理解为其狭义上含义,即与多维分析相关,基于立方体(Cube)计算而进行的分析。
OLAP 有多种实现方法,根据存储数据的方式不同可以分为:
ROLAP(Relational OLAP),细节数据,聚合后的数据都保存在类关系型数据库中,Hive、SparkSQL 属于 ROLAP。
MOLAP(Multidimensional OLAP),事先将汇总数据计算好,存放在自己特定的多维数据库中,用户的 OLAP 操作可以直接映射到多维数据库的访问,不通过 SQL 访问吗,其实本质上是空间换时间。Kylin 的本质是 MOLAP
HOLAP(Hybrid OLAP),表示基于混合数据组织的 OLAP 实现(Hybrid OLAP),如低层是关系型的,高层是多维矩阵型的,这种方式具有更好的灵活性。
事实表和维度表
事实表(Fact Table)是指存储有事实记录的表,如系统日志、销售记录、传感器数值等,事实表的记录是动态增长的,所以它的体积通常远大于维度表。
维度表(Dimension Table)或维度表,也称为查找表(LookUp Table),是与事实表相应的一种表,它保存了维度的属性值,可以跟事实表做关联。相当于事实表上经常重复的属性抽取、规范出来用一张表进行管理。
常见的维度表:日期表(存储日期对应的年月日、季度等)、地区表(国家、省、城市等)。维度表的变化通常不会太大。维度表可以带来如下的好处:
缩小了事实表的大小
便于维度的管理和维护,增加、删除、修改维度的属性,不必对事实表的大量记录进行改动
维度表可以多个事实表重用
维度和度量
维度是指审视数据的角度,它通常是数据记录的一个属性,例如:时间、地点等度量就是被聚合的统计值,也就是聚合运算的结果,通常是一个数值,如总销售额、不同的用户数等。
分析人员往往要结合干个维度来审查度量值,以便在其中找到变化规律。在一个 SQL 查询中。GROUP BY 的属性通常就是维度,而所计算的值则是度量。
以上查询中,part_dt、lstg_site_id 是维度、sum(price)、count(distanct seller_id)是度量。
星型 &雪花模型
星型模型(Star Schema)是数据仓库维度建模中常用的数据模型之一。它的特点是一张事实表,以及一到多个维度表,事实表与维度表通过主外键相关联,维度表之间没有关联,就像需要小星型围绕在一颗恒星的周围,所以叫星型模型。另一种常用的叫雪花模型(SnowFlake Schema),就是将星型模型中的某些维度表抽取成更细粒度的维表,然后让维表之间也进行关联,这种形状酷似雪花,所以叫做雪花模型。
Cube 和 Cuboid
Cube 即多维立方体,也叫数据立方体。
这个由三个维度(维度数超过 3 个,上图仅为了方便画图表达)构成了一个 OLAP 立方体,立方体中包含了满足条件的 Cell(子立方体)值,这些 Cell 里面包含了要分析的数据,称之为度量值。
立方体:由维度构建出来的多维空间,包含了所有要分析的基础数据,所有的聚合数据操作都在立方体上进行
维度:观察数据的角度,一般是一组离散的值,对于 N 个维度来说,所有可能的组合有 2 的 N 次方个
度量:即聚合计算的结果,一般是连续的值
Cuboid:特指 Kylin 中在某一种维度组合下所计算的数据
事实表中的一个字段,要么是维度,要么是度量(可以被聚合)
给定一个数据模型,可以对其上的所有维度进行组合,对于 N 个维度来说,所有可能的组合有 2 的 N 次方个
Cube(或称 DataCube),即数据立方体,是一种常用于数据分析于索引技术,它可以对原始数据建立多维度索引,大大加快查询效率。数据立方体只是多维模型的一个形象的说法
Cuboid 特指 Kylin 中在某一维度组合下所计算的数据
技术架构
基本介绍
ApacheKylin 系统可以分为:
在线查询
离线构建
在线查询模式主要处于上半部分,离线构建处于下半部分。Kylin 的技术架构如下:
数据源主要是 Hadoop Hive,数据以关系表的形式输入,保存着待分析的数据,根据元数据的定义,构建引擎从数据源抽取数据,并构建 Cube
Kylin 可以使用 MapReduce 或 Spark 作为构建引擎,构建后的 Cube 保存在右侧的存储引擎中,一般选用 HBase 作为存储
完成了离线的构建后,用户可以从查询系统发送 SQL 进行查询分析
Kylin 提供了各种 RestAPI,JDBC、ODBC 接口。无论从哪个接口进入,SQL 最终都会来到 Rest 服务层,再转交给查询引擎进行处理。
SQL 语句是基于数据源的关系模型书写的,而不是 Cube,Kylin 在设计时,刻意对查询用户屏蔽了 Cube 的概念。只要理解了关系模型就可以使用 Kylin,没有额外的学习门槛,传统的 SQL 应用也很容易迁移。
查询引擎解析 SQL,生成基于关系表的逻辑执行计划,然后将其转换为基于 Cube 的物理执行计划,最后查询预计生成的 Cube 并产生结果,整个过程不会访问原始数据源
组件功能
REST Server,提供 Resutful 接口,例如创建、构建、刷新、合并等 Cube 相关操作,Kylin 的 Projects、Tables 等元数据管理,用户访问权限控制,SQL 的查询等。
Query Engine:使用开源的 Apache Calcite 框架实现 SQL 解析,可以理解为 SQL 引擎层
Routing:负责将解析 SQL 生成的执行计划转换成 Cube 缓存的查询,这部分查询时可以秒级甚至毫秒级完成
Metadata:Kylin 中有大量的元数据信息,包括 Cube 的定义、星型模型的定义、Job 和执行 Job 的输出信息、模型的维度信息等等。Kylin 的元数据和 Cube 都存储在 HBase 中,存储的格式是 JSON 字符串
Cube Build Engine:所有的模块的基础,它主要负责 Kylin 预计算中创建 Cube,创建的过程是首先通过 Hive 读取原始数据,然后通过一些 MapReduce 或 Spark 计算生成 HTable,最后将数据 load 到 HBase 表中。
工作原理
Apache Kylin 的工作原理是对数据模型做 Cube 计算,并利用计算的结果加速查询,具体的过程如下:
指定数据模型,定义维度和度量
预计算 Cube,计算所有 Cuboid 并保存为物化视图(存储到 HBase 中)
执行查询时,读取 Cuboid,计算并产生查询结果
高效 OLAP 分析:
Kylin 的查询过程不会扫描原始记录,而是通过预计算预先完成表的关联、聚合等复杂运算
利用预计算的结果来执行查询,相比非预计算的查询技术,其速度一般要快一到两个数量级,在超大的数据集上优势更明显
数据集达到千亿乃至万亿级别时,Kylin 的速度可以超越其他非预计算技术的 1000 倍以上
Kylin 生态
Apache Kylin 的核心:Kylin 的 OLAP 引擎由元数据引擎、查询引擎、任务引擎、存储引擎组成。另外,它还有一个 REST 服务对外 提供查询请求的服务
可扩展性:提供插件机制支持额外的特性和功能
与其他系统的整合:可整合任务调度器、ETL 工具、监控及告警系统
驱动包(Drivers):提供 ODBC、JDBC 驱动支持与其他工具(如 Tableau)的整合
错误速查
其他系列
🚀 AI 篇持续更新中(长期更新)
AI 炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有部署 测试上手 架构研究,持续打造实用 AI 工具指南!AI 研究-127 Qwen2.5-Omni 深解:Thinker-Talker 双核、TMRoPE 与流式语音
💻 Java 篇持续更新中(长期更新)
Java-174 FastFDS 从单机到分布式文件存储:实战与架构取舍 MyBatis 已完结,Spring 已完结,Nginx 已完结,Tomcat 已完结,分布式服务已完结,Dubbo 已完结,MySQL 已完结,MongoDB 已完结,Neo4j 已完结,FastDFS 正在更新,深入浅出助你打牢基础!
📊 大数据板块已完成多项干货更新(300 篇):
包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT 案例 详解
版权声明: 本文为 InfoQ 作者【武子康】的原创文章。
原文链接:【http://xie.infoq.cn/article/db1cb237fab2c999a917eebbd】。文章转载请联系作者。







评论