PCon全球产品创新大会即将开幕,抢占最后的交流席位! 了解详情
写点什么

Apache Kylin 在贝壳找房指标体系的应用

  • 2021 年 2 月 20 日
  • 本文字数:3745 字

    阅读完需:约 12 分钟

Apache Kylin 在贝壳找房指标体系的应用

引言

“贝壳找房在做的就是推动居住服务这个传统行业进行深度的互联网化,在这个过程中数据是非常重要的支撑。”


——张如松,贝壳找房数据平台高级工程师


近日,Apache Kylin 5 周年在线庆典顺利结束,来自贝壳找房的张如松老师为大家介绍了 Apache Kylin 在在贝壳找房指标体系的应用,包含 Kylin 升级历程以及对 Kylin 4.0 版本的展望。


以下是张如松老师的现场分享实录。

Apache Kylin 在贝壳找房的发展历程

贝壳找房是以技术驱动的品质居住服务平台,聚合和赋能全行业的优质服务者,打造开放的品质居住服务生态,致力于为 3 亿家庭提供包括二手房、新房、租赁、装修和社区服务等全方位的居住服务,涉及到了居住服务的方方面面。


贝壳找房有 4+ 年的 Kylin 使用经验。从 2016 年下半年开始,当时有一个 Hive + MySQL 的平台,内部代号是地动仪,用来解决业务线的多维分析需求。



Kylin 在贝壳找房中的架构体系


上图展现了平台数据的流转过程,负责数仓的同学会将数据进行初步的预聚合,再通过关系数据库来提供查询。 但是随着数据量的快速增长,查询响应的时间变得越来越长,底层数据库的运维压力也越来越大。 为了解决这些问题,同时为了支撑公司的指标体系建设,需要一个既能够支持大规模数据计算,也可以对查询作出快速响应的引擎。


经过调研,从可支持海量数据计算、亚秒级查询响应、支持标准 SQL、以及可维护性,涉及的技术栈以及社区活跃度上,Kylin 都符合作为数据引擎来支撑企业指标体系建设的要求。


2017 年 3 月,Kylin 1.6 版本上线

随着指标平台的上线,Kylin 开始对外提供服务。

2017 年底,贝壳已经累计创建了 300 + Cube,每天有 20 多万的查询量

2018 年初,随着指标在各业务线的推广,有越来越多的数据产品开始接入 Kylin

例如像 Merlin、Turing 等数据产品,这些产品从 PC 端到手机端覆盖的范围非常广泛,涉及到公司组织架构的各个层级,都有相应的数据需求。同时为了保障重点数据的产出和查询,我们又部署了一套集群来给重点业务使用。

2018 年底,贝壳一共有 2 套集群,累计创建了 600+ Cube,每天的查询量达到了 200 万。

2019 年初,我们 Kylin Team 定下了两个 KPI,在机制方面要保障重点数据在每天上午 9 点之前产出,在查询上要达成 3 秒钟内响应占比 99.7%,将 Kylin 升级到 3.1 版本,主要来做实时多维分析的应用。

为了达成这两个目标,在计算方面我们把集群从 1.6.0 升级到 2.5.2,引入了 Spark 组件,将重点 Cube 构建的方式从 MR 改为了 Spark。

上图是调优前后的对比,重点 Cube 的平均构建时间从 70 分钟降到了 43 分钟,近 40% 左右的提升;在查询方面也通过一系列的优化,在 12 月就达成了 3 秒内占比 99.7% 的目标。

下图是当时每天的统计数据,到 19 年底贝壳还是两套集群,版本是 2.5.2,累计 700+ Cubes,每天的查询量超过了 1000 万。

2020 年初,Kylin 升级到 3.1.0,引入了 Flink 组件。

下图是公司的一级指标使用 Flink 组件前后花费时间的对比,可以看到提升比较明显,截止到 2020 年底,贝壳有两个 3.1 的集群,累计 800+ Cubes,每天的查询量最高超过了 2300 万。

使用 Flink 前后的构建时长对比


总的来说,这几年贝壳找房围绕 Kylin 主要在做平台化的建设。


下图右边最下面是 Kylin 集群,我们把集群的节点分成了 3 种角色,一台 Master 节点,负责接受提交的构建任务和提供元数据查询服务。Master 节点既不参与查询也不参与构建。有多台构建器(Job 节点)和查询机器(Query 节点)提供服务,这是在集群节点上的划分。集群本身是不对外开放的,通过上层平台提供服务。在平台侧主要是围绕 API、任务、查询、元数据做了一些工作。我们封装了 Kylin 的 API,对创建的 Cube 的流程进行了简化,同时对接了公司的权限体系来对模型进行权限控制。



在任务管理上,由平台控制任务的提交,包括任务的优先级,任务的运行数,还有对任务状态的监控和异常数据的报警等。在查询上,包括对 Cube 所在集群的路由,以及对查询的实时监控和分析。在元数据管理上,我们对 Cube 进行了生命周期管理,当符合规则的时候,会启动 Cube 下线的流程。元数据管理还包括对 Cube 在不同集群之间的迁移和集群的版本控制、配置管理等等。


下图展示的是平台里非常有意思的一个功能,叫做 Cube 查询分析,每个小时都会分析一次 Kylin 的查询日志,统计出这些 Cube 被查询了多少次,有哪些产品使用 Cube 的数据,上面这个图就是一个 Cube 被不同产品查询次数的占比,可以看到这个 Cube 有 7 个产品在用,下面这个图是 Cube 的响应时间在不同范围内的查询次数和占比,可以看到这个 Cube 被查询了 69 万次,3 秒内占比达到了 99.99%。



我们会解析 Cube 查询解析的每一条 SQL,拿到 SQL 用到的维度组合以及对应的响应时间,下图包括三个方面内容:


  • Cube 被使用最多的维度组合排行

  • Cube 查询慢的组合排行

  • 最近 30 天都没有用到过的维度



通过这些数据可以让 Kylin 的用户更好的了解数据的使用情况,也可以根据这些信息做一些针对性的优化,比如在构建和查询方面。


Kylin 在贝壳能高效的运用离不开内部同学的贡献。下图是这几年贝壳找房的同学贡献到社区的一些记录,先后有 4 位同学向 Kylin 贡献代码,涉及任务调度、Web 页面、构建和查询的优化等等多个方面,覆盖了从 1.6 到 3.1 的各个版本。



贝壳找房开发人员对 Kylin 的贡献

Kylin 在贝壳找房指标体系建设过程中的作用

贝壳找房是在 2016 年下半年开始规划指标体系的建设,为了明确指标的定义,统计数据的口径,提高数据的共享性和安全性,同时规划了指标平台来承载指标体系的建设,并且使用 Kylin 来作为指标体系的数据引擎,来提供数据服务。


下图是以 Kylin 为基础的指标平台的架构,通过对数仓数据的建模计算,提供给指标平台使用,指标平台以 API 的方式对外提供服务,API 的基础是指标,业务方定义的 API 可以包含一个或多个指标。



下面是基于 Kylin 的指标计算和使用的流程,首先数仓的同学会根据业务过程进行建模,从源数据有一个 ETL 的过程,最后会在 OLAP 层产生一张事实表,接着会在 Kylin 上关联维表创建模型和 Cube,创建完 Cube 后会自动在调度系统生成一个依赖事实表和维表的任务,接着会在指标平台定义指标,配置一下计算方式,支持的维度等信息,创建完指标之后就可以在 API 配置使用,调度系统会根据任务依赖来触发 Cube 的构建,数据构建完之后各种数据产品就可以通过 API 来使用这些数据,这是基于 Kylin 的指标创建和使用的流程。



接下来为大家介绍两个指标的例子,两种不同的计算方式,一个是 SUM 类型,一个是 COUNT DISTINCT 类型的精确去重。


在贝壳找房指标体系里面,精确去重是非常强的需求,尤其是一些涉及到业绩类的指标,比如经纪人的带看量,精确去重也是 Kylin 的优势之一。



上图左右两边是手机端的产品,中间是 PC 端的报表产品,这几款产品都是通过固定的维度组合来获取相应的指标数据,只需要筛选不同的过滤条件就可以快速获取报表。


另外一种场景就是可以随意进行维度组合的自助分析场景,做一些探索性的尝试,下图是我们公司自研的 Odin 可视化平台,图左侧两个红框分别是维度和指标,用户可以随意选择他想要的维度和需要的指标,配置筛选条件,右侧的图是根据用户的选择,实时查询 Kylin 生成的图表,当他确定要使用这些维度和指标之后,就可以把当前的配置保存成固定的报表



不管是固定报表还是自助分析,底层的查询流程是一样的,下图左侧框是业务方发起指标调用的形式,里面的字段是他需要的维度,同时要指定时间范围和过滤条件,发起一次 API 的调用,中间的框是指标平台,接受 API 的请求,将 API 的参数转化为标准 SQL,然后提交给 Kylin 集群执行查询,查询完了之后会将查询结果返回给指标平台,指标平台将数据封装成固定的格式返回给业务方。这就是贝壳找房各种数据产品使用 Kylin 的底层查询流程。



下图展示了目前 Kylin 在贝壳找房的一个使用情况,因为对接了公司的指标体系,所以 Kylin 的使用覆盖了所有的业务线, 为超过 30 多个数据产品提供查询服务,支撑了 10000+ 指标的计算需求,每天的查询量最高超过 2300 万,我们承诺的查询响应时间是 3 秒内占比是 99.7%,目前来说 Kylin 都能很好的完成这些目标。


对 Kylin 未来发展的展望

对 Kylin 的展望主要是针对 Kylin 4.0,贝壳在 9 月份的时候也做了一次简单的测试,总体来说非常期待 4.0 GA 版本的发布。希望在建模的流程上能够更简化更灵活,比如支持 Schema 的动态更新。在当前的情况下,只要涉及到 Cube 的改动就比较繁琐,希望 Kylin 4.0 能改变这种情况。


关于 Local segment cache,4.0 里面生成的文件是存储在集群上,每次查询都需要实时去读取集群上的文件,同时对集群的资源和性能依赖比较大,可以考虑一下引入为 HDFS 提速的组件,比如 Alluxio,可以将 Segment 的文件缓存到本地来提升查询性能。


关于多租户,希望在查询层面做到对多租户的支持,来避免不同业务之间互相的影响,因为贝壳现在的业务方还是比较多,互相影响的情况也会发生。


关于 Kubernetes,现在的机器数和实例数也比较多,运维的成本比较高,后续会尝试把 Kylin 部署到 Kubernetes 来降低维护成本。


作者介绍


张如松,贝壳找房数据平台高级工程师,负责 OLAP 引擎的开发和维护以及运维指标体系的建设。


本文转载自公众号 apachekylin(ID:ApacheKylin)。


原文链接


Apache Kylin 在贝壳找房指标体系的应用

2021 年 2 月 20 日 10:002128

评论

发布
暂无评论
发现更多内容

大作业--联合运营平台

ALone

燃烧吧!开发者们,一起在云端构建开放成熟的 ARM 生态!

亚马逊云科技 (Amazon Web Services)

EFT是什么?EGG公链又是什么?一文带你了解

币圈那点事

公链 挖矿 #区块链#

白话解读 WebRTC 音频 NetEQ 及优化实践

阿里云视频云

阿里云 音视频 WebRTC 音频技术 视频云

第一个mybatis程序,实现CRUD

xiezhr

mybatis 中间件 crud

我帮大厂做架构之——微信的“N个朋友读过”怎么实现

臧萌

成长 架构师 职场成长

大作业《云复制高级配置功能产品需求文档》

李钊悌

Java面试“圣经”,已助朋友拿到7个Offer!2021年金三银四面试知识点合集

Java架构追梦

Java 阿里巴巴 面试 架构师

挑灯夜战800个小时,终从外包成功上岸字节!入职那一天我眼眶湿润了「Java岗」

Java架构之路

Java 程序员 架构 面试 编程语言

你的头发还好吗?大数据分析脱发城市哪里强

不脱发的程序猿

大数据 程序员 程序人生 数据分析 3月日更

几个你不知道的dubbo注册中心细节

捉虫大师

zookeeper dubbo 注册中心

不愧为Java程序员福音 2021阿里巴巴中台架构实战重磅来袭!

比伯

Java 编程 架构 面试 程序人生

使用Spark Mllib进行数据分析

大数据技术指南

大数据 spark 28天写作 3月日更

最高法两会报告聚焦区块链惩治抄袭,区块链在保护网络著作权方面如何作为?

旺链科技

版权保护 区块链应用

软件匠艺

Teobler

敏捷 敏捷开发 软件匠艺 伪敏捷

寻找被遗忘的勇气(十六)

Changing Lin

3月日更

云通信产品专家翅飞:企业如何提升用户全生命周期管理效率?号码百科来帮忙

阿里云Edge Plus

史上超强拷贝仓——GitHub 热点速览 v.21.11

HelloGitHub

GitHub 开源

面试必备知识点!2021Android大厂面试知识分享,offer拿到手软

欢喜学安卓

android 程序员 面试 移动开发

带你全面认识CMMI V2.0(二)

渠成CMMI

项目管理 CMMI

初识Golang之声明变量

Kylin

读书笔记 3月日更 21天挑战 Java转go Go 语言

产品训练营--大作业

曦语

产品训练营

APP搜索如何又快又准?

华为云开发者社区

elasticsearch App 搜索 云搜索 词库

别再做智慧园区无效投入了!想要高效运行试试这个方法

一只数据鲸鱼

物联网 数据可视化 智慧城市 智慧园区

Java面试“圣经”,已助朋友拿到7个Offer!2021年金三银四面试知识点合集

Java架构之路

Java 程序员 架构 面试 编程语言

语音通话 2.0

anyRTC开发者

音视频 WebRTC RTC 语音通话

还在等机会?Android岗面试12家大厂成功跳槽,最全的BAT大厂面试题整理

欢喜学安卓

android 程序员 面试 移动开发

华为在数字化浪潮下的API变革实践

华为云开发者社区

华为 架构 数字化 API API战略

【LeetCode】螺旋矩阵 II Java 题解

HQ数字卡

算法 LeetCode 28天写作 3月日更

吐血整理超全Java进阶教程:基础+容器+并发+虚拟机+IO

Java架构之路

Java 程序员 架构 面试 编程语言

牛逼了!这是什么神仙面试宝典?半月看完25大专题,居然斩获阿里P7offer

Java 程序员 架构 面试

Apache Kylin 在贝壳找房指标体系的应用_架构_apachekylin_InfoQ精选文章