提前锁票 InfoQ 最具价值感的视频栏目 | InfoQ 大咖说 了解详情
写点什么

Apache Kylin 在汽车之家的实时多维分析实践

2021 年 2 月 19 日

Apache Kylin 在汽车之家的实时多维分析实践

近期,Apache Kylin 5 周年在线庆典顺利结束,来自汽车之家的实时计算平台负责人 邸星星 老师为大家介绍了 Apache Kylin 在汽车之家的升级历程,以及在实时多维分析方面的实践,最后也展望了对 Kylin 4.0 版本的期待。



会议完整视频


以下是邸星星老师的现场分享实录。

Apache Kylin 在汽车之家的升级演进

近年来,面对大数据量与终端用户的不断增长,2016 年的时候我们梳理了针对多维分析引擎的选型需求:


  • 面临千亿,乃至万亿数据量的情况下,要达到秒级或者亚秒级的查询响应。

  • 需要满足相对较高的查询吞吐量以及较高的可用性,当时汽车之家的数据主要是基于离线数据来做多维分析。

Kylin 在汽车之家的升级历程


Kylin 过往 5 年里主要的发展里程碑


2016 年初,汽车之家正式启用 Kylin 1.5 版本

此时共有 10+ Cube,主要支持部门内的少量数据分析,同时用作技术验证。

2017 年,内部正式上线 Kylin 1.6 版本,并逐步承接线上业务

累计有 100+ Cube,2017 年底使用 Kylin 支持了汽车之家的战略级商业化数据产品。

2018 年,升级到 Kylin 2.2 版本 ,支持 Spark 引擎做构建,同时对 HBase 集群做了 T+1 备份

在极端情况下,如果 HBase 集群发生故障,可以把用户的查询请求路由到备用集群里来保障业务正常运行。

2019 年,升级到 Kylin 2.6 版本,并在内部多个 BU 推广使用

Cube 数量达到了 400+ ,另外公司内部也研发了 BI 产品,也可以支持 Kylin 作为它的查询引擎。

2020 年,将 Kylin 升级到 3.1 版本,主要来做实时多维分析的应用


可以看到目前集群规模大概有 500+Cube,20000+个 Segment,有 15 万左右的 HBase Region,存储在 300T 左右,每天的查询请求在 20 万以上,使用 Kylin 95% 的响应时间会在 2 秒以内返回结果。

Kylin 在实时多维分析方面的应用

1)Kylin Real-time OLAP 架构


Kylin 3.0 版本开始提供实时分析能力,主要是引入了两个角色,一个是 Coordinator,另一个是 Receiver。Coordinator 主要是负责协调,做一些分配,启动、停止这样的工作。Coordinator 是一个真实的一个计算节点。同时,Kylin 会抽象 Replica Set 的概念,就是把两个 Receiver 看作一组,当作一组 Replica Set,然后这两个 Receiver 做的是一样的事情,他们计算的是一样的数据,也提供同样的查询,当一个 Receiver 挂掉的时候,整体的查询是不会受影响的,相当于是做了一个 Receiver 层面的高可用。



2)Kylin 如何支持批流一体?


接下来谈谈流批一体这个概念,目前流批一体的概念比较流行。 Kylin 因为支持实时 Cube 的 Lambda 模式,我们在页面上做一次建模,然后把它定义为 Lambda 模式,那它实时的数据会从 Kafka 里面实时消费出来,然后去支持实时的查询。 当离线的数据准备好之后,可以通过构建当天的离线数据去覆盖实时结果,也就是说 Kylin 能自动纠正实时计算的结果,这样就很好的解决了离线和实时的开发体系不统一的问题。 比如说用 Flink 做实时计算,然后用 Hive 做离线计算,其实是两套开发体系,而且有可能是两个不同的开发人员;使用 Kylin 的时候完全可以由一个开发人员完成,在 Kylin 的页面上来做正常的建模,就可以做到批流一体的多维分析, 这其实也降低了人力的浪费,同时也能保证数据口径是完全一致的。


3)汽车之家在实时方面遇到的挑战


再来说下汽车之家在实时方面现在面临的 3 个问题。


  • 首先 Kylin 的 Receiver 节点和之前的 Job 以及 Query 节点都不太一样,因为它既负责实时的计算,又要负责查询,而且是查询本地磁盘上的数据,所以负担比较重。当面临越来越多实时业务的时候,可能需要维护一个比较大的 Receiver 集群,这样对我们来说的这个维护成本会是一个大问题。

  • 另外, Receiver 本身不只是服务于某一个 Cube,一个 Receiver 进程里面可能会支持好几个 Cube 的计算,假如某一个 Cube 的数据量突然激增,或者某个 Cube 的数据有一些问题,就可能会影响到这个 Receiver 进程本身的稳定性,所以隔离方面其实也不是特别好。

  • 最后说下弹性伸缩这块,如果单个 topic 的数据量激增的时候,要怎么去快速的做扩容,然后等它的访问量下去之后,是不是可以快速的做缩容?

  • 之前的方式都是需要手动去做调整,维护成本就会相应增加。


4)Receiver on Kubernetes 解决方案介绍


目前 Kylin 在做的云原生,我们就自然地想到了可以和 K8s 做集成来解决这些问题。


目前我们是在内部引入了一个 Kubernetes Resource Manager 的角色,然后由它去和 K8s 集群做交互,来动态申请相应的资源。


下图是目前我们正在做的和 K8s 集成的整体架构,我们做的改造主要集中在前面几步,后面这几步,包括查询这些基本没有改动。



我们在 Coordinator 内部引入了一个组件,就是 Kubernetes Resource Manager,当用户完成建模后,在 Enable Cube 的时候,会根据配置判断这个 Cube 是不是需要去创建一个独立的 Receiver 集群(Streaming Cluster),如果需要独立的 Receiver 集群,Coordinator 会根据配置好的并行度、副本数、CPU、内存等基本参数,通过 Kubernetes Resource Manager 和 K8s 去做交互,动态创建 Cube 所需要的 Reciever 集群。


这中间有一个映射关系,Kylin 里面的一个 Replica Set 会对应 K8s 里面的一个 StatefulSet,每个 StatefulSet 里面会有对应副本个数的 Receiver 实例,这个例子中我们设置的并行度为 2,副本数为 2,那么就会有 2 个 StatefulSet,每个 StatefulSet 里会有 2 个 Receiver 实例。当 Kubernetes Resource Manager 把 Receiver 实例都启动成功后,Receiver 会自动注册到 ZK 中,同时会写入 Cube 名称,声明这个 Receiver 是属于哪一个 Cube 的。


当 Coordinator 发现 Cube 所需的 Receiver 都启动完毕以后,会创建 Replica Set,并进行 assign 操作,同时把 Cluster state 置为 ready 状态,最后向 Cube 对应的所有 Receiver 发送 REST 请求,通知这些 Receiver 开始消费数据,至此整个 Enable Cube 的过程就结束了。


简单回顾一下,通过和 K8s 集成已经解决了前面提到弹性伸缩的问题,我们不再需要维护一个很大的 Streaming Cluster,Streaming Cluster 可以是 Cube 级别的,每个 Cube 会对应一个独立的 Streaming Cluster,资源在不同的 Cube 间是相互隔离的,并且资源可以方便的动态伸缩。比如说用户想要增加资源,调大了并行度,那么 Coordinator 会识别到这个扩容事件,去动态的再创建一组 StatefulSet 和 Kylin Replica Set,进行重新分配,完成扩容。


目前这一套架构已经在我们的准生产环境跑通了,然后接下来会上线支持一些我们内部的业务,运行稳定之后会逐步在各条业务线推广。

对 Kylin 4.0 的展望

最后来说下对 Kylin4.0 的展望,Kylin 4.0 主要是往云原生方向发展,主要有两块大的改进:


  • 全栈化 Spark,脱离 Hadoop 组件做查询 ,这是云原生的基础;同时使用 Spark 引擎做查询还有一个额外的好处,就是之前用 Calcite 会有查询单点的问题,用 Spark 的话就可以很好地解决这个难点。

  • Kylin on Parquet,基于列式存储有很高的 IO 效率,也能一定程度上提供查询的稳定性 ,对比 HBase 是一个有状态的存储,但是 Parquet 只是一个文件格式,所以查询的链路上也会更加轻量级。去 HBase 后也不再需要额外的运维成本来维护 HBase。


综上,我们非常期待 Kylin 4.0 GA 的发布。


作者介绍


邸星星,汽车之家实时计算平台负责人,长期从事实时计算与数据分析领域的平台建设工作,致力于为公司提供大规模、高效、稳定的计算与查询服务。


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


原文链接


Apache Kylin 在汽车之家的实时多维分析实践

2021 年 2 月 19 日 11:141357

评论

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

民进昆明市委:建议利用区块链技术优势在昆明打造金融应用平台

CECBC区块链专委会

金融 金融区块链

源中瑞智慧社区解决方案---助推平安小区建设

135深圳3055源中瑞8032

图扑物联助力打造现代化智能港口

一只数据鲸鱼

物联网 工业4.0 组态软件 智慧港口

宗谱链,数字化区块链宗谱链传承家族文化

WX13823153201

统一数据管理工具——CloudQuery v1.3.3 上线!

CloudQuery社区

数据库 运维 开发工具 dba 数据库管理工具

2021年 区块链最火的app爱打卡

v16629866266

淘宝的商品中心和类目体系是怎么设计的

邴越

阿里 模型 电商 架构· 业务

以终为始:28天打卡输出复盘

熊斌

个人成长 写作平台 28天写作

Elasticsearch Bulk API 奇特的 JSON 格式

escray

日更挑战 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

短信验证码被刷怎么办?java 短信验证码防刷策略分析

香芋味的猫丶

黑客 短信防刷 短信验证码 短信防轰炸 短信防火墙

互助系统软件开发,互助app开发

luluhulian

《iOS面试简历技巧解析》

ios 面试

5步教你将MRS数据导入DWS

华为云开发者社区

数据 MRS GaussDB 集群 DWS

Spring Boot Admin 集成诊断利器 Arthas 实践

阿里巴巴云原生

Java Docker 容器 云原生 Arthas

Spark Shuffle 内部机制(一)

hanke

大数据 spark 开源 大数据平台

一周信创舆情观察(1.25~1.31)

统小信uos

Elasticsearch+Fluentd+Kafka搭建日志系统

LanLiang

kafka ELK EFK Fluentd 日志系统

探索语言交互技术在政务数字化的应用

华为云开发者社区

语音 政务 语言交互 VUI G2c

面试官:请讲一下Redis主从复制的功能及实现原理

华为云开发者社区

redis 数据 节点 redis哨兵 主从复制

RocketMQ-Spring 毕业两周年,为什么能成为 Spring 生态中最受欢迎的 messaging 实现?

阿里巴巴云原生

Docker 容器 微服务 云原生 API

区块链知识产权保护解决方案,区块链存证解决方案

135深圳3055源中瑞8032

“新内容 新交互” 阿里云全球视频云创新挑战赛正式开启!

阿里云视频云

阿里云 音视频 应用 音视频算法

面试加分项!我在美团Android研发岗工作的那5年,系列篇

欢喜学安卓

android 程序员 面试 移动开发

一个合格的初级前端工程师需要掌握的模块笔记

魔王哪吒

程序员 面试 Vue 前端 2月春节不断更

Kafka架构介绍

架构精进之路

kafka 日更挑战 28天写作 2月春节不断更

区块链终将彻底改变医疗行业,但哪些因素制约当前的采用?

CECBC区块链专委会

区块链

区块链+电力,又擦出什么新火花?

CECBC区块链专委会

区块链

如何快速上手 angular.js

华为云开发者社区

html Vue 数据 angular js

GrowingIO SaaS 产品 CI/CD 实践 (一)

GrowingIO技术专栏

ci SaaS CD

您的《操作系统线程模型总结》请查收。

后台技术汇

28天写作 2月春节不断更

为您收录的操作系统系列 - 进程管理(中篇)

Arvin

操作系统 进程 同步

打造 VUCA 时代的 10 倍速 IT 团队

打造 VUCA 时代的 10 倍速 IT 团队

Apache Kylin 在汽车之家的实时多维分析实践-InfoQ