写点什么

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

作者:武子康
  • 2025-11-19
    山东
  • 本文字数:4625 字

    阅读完需:约 15 分钟

大数据-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),是与事实表相应的一种表,它保存了维度的属性值,可以跟事实表做关联。相当于事实表上经常重复的属性抽取、规范出来用一张表进行管理。


常见的维度表:日期表(存储日期对应的年月日、季度等)、地区表(国家、省、城市等)。维度表的变化通常不会太大。维度表可以带来如下的好处:


  • 缩小了事实表的大小

  • 便于维度的管理和维护,增加、删除、修改维度的属性,不必对事实表的大量记录进行改动

  • 维度表可以多个事实表重用

维度和度量

userid,2020-10-01 09:00:00, produceid,shopid,orderid,299
复制代码


维度是指审视数据的角度,它通常是数据记录的一个属性,例如:时间、地点等度量就是被聚合的统计值,也就是聚合运算的结果,通常是一个数值,如总销售额、不同的用户数等。


分析人员往往要结合干个维度来审查度量值,以便在其中找到变化规律。在一个 SQL 查询中。GROUP BY 的属性通常就是维度,而所计算的值则是度量。


SELECT   part_dt,   lstg_site_id,   sum(price) as total_selled,   count(DISTINCT seller_id) as sellersFROM  kylin_salesGROUP BY part_dt, lstg_site_id;
复制代码


以上查询中,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 案例 详解

发布于: 1 小时前阅读数: 9
用户头像

武子康

关注

永远好奇 无限进步 2019-04-14 加入

Hi, I'm Zikang,好奇心驱动的探索者 | INTJ / INFJ 我热爱探索一切值得深究的事物。对技术、成长、效率、认知、人生有着持续的好奇心和行动力。 坚信「飞轮效应」,相信每一次微小的积累,终将带来深远的改变。

评论

发布
暂无评论
大数据-157 Apache Kylin 全面指南:MOLAP 架构、Hive/Kafka 实战与实时 OLAP 落地_Java_武子康_InfoQ写作社区