1.5 Apache Kylin的主要特点
Apache Kylin的主要特点包括支持SQL接口、支持超大数据集、秒级响应、可伸缩性、高吞吐率、BI工具集成等。
1.5.1 标准SQL接口
Apache Kylin以标准SQL作为对外服务的主要接口。因为SQL是绝大多数分析人员最熟悉的工具,同时也是大多数应用程序使用的编程接口。尽管Kylin内部以Cube技术为核心,对外却没有选用MDX(MultiDimensional eXpressions)作为接口。虽然MDX作为OLAP查询语言,从学术上来说,它是更加适合Kylin的选择,然而实践表明,SQL简单易用,代表了绝大多数用户的第一需求,这也是Kylin能够快速推广的一个关键。
SQL需要以关系模型作为支撑。Kylin使用的查询模型是数据源中的关系模型表,一般而言,也就是指Hive表。终端用户只需要像原来查询Hive表一样编写SQL,就可以无缝地切换到Kylin,几乎不需要额外的学习,甚至原本的Hive查询也因为与SQL同源,大多都无须修改就能直接在Kylin上运行。
Apache Kylin在将来也可能会推出MDX接口。事实上已经有方法可以通过MDX转SQL的工具,让Kylin也能支持MDX。
1.5.2 支持超大数据集
Apache Kylin对大数据的支撑能力可能是目前所有技术中最为领先的。早在2015年eBay的生产环境中Kylin就能支持百亿记录的秒级查询,之后在移动的应用场景下又有了千亿记录秒级查询的案例。这些都是实际场景的应用,而非实验室中的理论数据。
因为使用了Cube预计算技术,在理论上,Kylin可以支撑的数据集大小没有上限,仅受限于存储系统和分布式计算系统的承载能力,并且查询速度不会随数据集的增大而减慢。Kylin在数据集规模上的局限性主要在于维度的个数和基数。它们一般由数据模型来决定,不会随着数据规模的增长而线性增长,这也意味着Kylin对未来数据的增长有着更强的适应能力。
如今(截至2016年5月),对于Apache Kylin,除了eBay将其作为孵化公司有广泛应用之外,国内外一线的互联网公司对此几乎都有大规模的使用,包括百度、网易、京东、美团、唯品会、Expedia等。此外,其在传统行业中也有非常多的实际应用,包括中国移动、银联、国美等。据不完全统计,真实上线的Apache Kylin用户已经超过了一百多家,在开源后一年多一点的时间内能有如此大的全球用户基础,足见Kylin在处理超大规模数据集上的能力和优势。
1.5.3 亚秒级响应
Apache Kylin拥有优异的查询响应速度,这点得益于预计算,很多复杂的计算,比如连接、聚合,在离线的预计算过程中就已经完成,这大大降低了查询时刻所需要的计算量,提高了响应速度。
根据可查询到的公开资料可以得知,Apache Kylin在某生产环境中90%的查询可以在3s内返回结果。这并不是说一小部分SQL相当快,而是在数万种不同SQL的真实生产系统中,绝大部分的查询都非常迅速;在另外一个真实的案例中,对1000多亿条数据构建了立方体,90%的查询性能都在1.18s以内,可见Kylin在超大规模数据集上表现优异。这与一些只在实验室中,只在特定查询情况下采集的性能数据不可同日而语。当然并不是使用Kylin就一定能获得最好的性能。针对特定的数据及查询模式,往往需要做进一步的性能调优、配置优化等,性能调优对于充分利用好Apache Kylin至关重要。
1.5.4 可伸缩性和高吞吐率
在保持高速响应的同时,Kylin有着良好的可伸缩性和很高的吞吐率。图1-5是来自网易的性能分享。图1-5中左侧是Kylin查询速度与Mondrian/Oracle的对比,可以看到在3个测试查询中,Kylin分别比Mondrian/Oracle快147倍、314倍和59倍。
同时,图1-5中右侧展现了Kylin的吞吐率及其可伸缩性。在只有1个Kylin实例的情况下,Kylin每秒可以处理近70个查询,已经远远高于每秒20个查询的一般水平。更为理想的是,随着服务器的增加,吞吐率也呈线性增加,存在4个实例时可达到每秒230个查询左右,而这4个实例仅部署在一台机器上,理论上添加更多的应用服务器后可以支持更大的并发率。
图1-5 Kylin的可伸缩性和吞吐率
这主要还是归功于预计算降低了查询时所需的计算总量,令Kylin可以在相同的硬件配置下承载更多的并发查询。
1.5.5 BI及可视化工具集成
Apache Kylin提供了丰富的API,以与现有的BI工具集成,具体包括如下内容。
ODBC接口,与Tableau、Excel、Power BI等工具集成。
JDBC接口,与Saiku、BIRT等Java工具集成。
Rest API,与JavaScript、Web网页集成。
分析师可以沿用他们最熟悉的BI工具与Kylin一同工作,或者在开放的API上做二次开发和深度定制。
另外,Kylin核心开发团队也贡献了Apache Zeppelin的插件,现在已经可以用Zeppelin来访问Kylin服务。