美团点评在OLAP需求方面主要分为两大类:即席查询和固化查询。
即席查询:用户通过编写SQL来完成临时的数据分析任务。这类查询的特点是SQL形式多样且逻辑复杂,对响应时间的要求不是特别严格。为了应对这类需求,我们采用了Hive和Presto两个引擎。
固化查询:这类查询针对的是固定的取数和查看数据的需求,通过数据产品的方式提供给用户,从而提高数据分析和运营效率。这类查询的SQL形式较为固定,对响应时间有较高的要求。以往,我们通常通过在数仓中预先聚合数据,然后将聚合后的表格导入MySQL来实现这一目标。然而,随着公司业务数据量和复杂度的不断增加,这种方法逐渐暴露出一些问题。
为了解决这些问题,我们从2015年末开始探索更高效的OLAP解决方案,尤其是针对固化查询的优化方案。
在调研了市面上主流的开源OLAP引擎后,我们发现没有任何一个系统能够在数据量、功能和灵活性三个方面达到完美的平衡。因此,我们选择了Kylin作为解决方案。Kylin通过预聚合技术,能够在处理超大数据集时实现秒级响应,这对于我们来说非常关键。
自2016年初以来,我们开始在各个业务线推广基于Kylin的解决方案。经过一年的努力,Kylin已经广泛应用于美团点评的主要业务线,尤其是在外卖和酒店旅游等领域。截至2016年底,生产环境中共有214个Cube,总数据量达2853亿行,Cube在HBase中的存储量达到了59TB。每日查询次数超过50万次,TP50查询时延为87毫秒,TP99查询时延为1266毫秒,满足了我们对性能的要求。
为了支持这些需求,我们建立了一个专门的Kylin环境,包括一个30节点的Kylin专属HBase集群、两台用于Cube构建的物理机和八台8核16G的虚拟机作为查询服务器。Cube的构建工作运行在主计算集群的MapReduce作业上,各业务线的构建任务被分配到各自的任务队列中。由于Kylin对外提供REST接口,我们还接入了公司的统一HTTP服务管理框架,实现了负载均衡和无缝重启。
很多人对MOLAP Cube方案有所顾虑,认为维度数量过多会导致Cube的计算和存储量成倍增加。实际上,Kylin通过支持部分Cube和延迟计算衍生维度等方式,有效解决了这个问题。例如,我们的业务中经常需要处理ID和名称成对出现的情况。如果将这两个字段都作为维度,会导致维度数量翻倍。但Kylin可以通过设置扩展列来减少维度数量,从而大大降低Cube的复杂度。
以美团外卖为例,Kylin的应用极大地提升了交互式OLAP分析的能力。过去,外卖数据的处理依赖于在Hive中开发聚合表并导入MySQL的方式。随着业务数据量的快速增长和需求的升级,这种方法逐渐暴露出效率低下和开发周期长的问题。引入Kylin后,不仅查询速度大幅提升,数据开发方式也发生了显著变化。现在,开发人员只需关注基础数据建设,而复杂的聚合工作则由Kylin自动完成。实际测试表明,使用Kylin后,数据开发效率提高了三倍。
将一个开源项目转化为实际可用的平台化服务并非易事,过程中会遇到许多挑战和问题。我们总结了一些宝贵的经验,希望能与同行们共同探讨。例如,如何合理配置Kylin的硬件资源、如何优化Cube的设计、如何利用Kylin的高级特性等。
2019年11月16日,Apache Kylin Meetup北京站即将举行,届时将邀请来自滴滴、微众银行、一点资讯及Kyligence的技术专家分享精彩的案例和实践经验。