ClickHouse在自助行为分析场景的实践应用

news2024/11/15 19:53:14

导读

公司每日产生海量数据,按业务需要进行统计产出各类分析报表,但巨大的数据量加上复杂的数据模型,以及个性化的分析维度,采用传统的离线预计算方式难以灵活支持,为此需引入一种满足实时多维分析场景的计算引擎框架来支撑业务精细化运营场景。本文将分享ClickHouse在自助分析场景中的探索及实践,文章将从以下4个方面介绍:

  • 自助分析场景OLAP技术选型
  • 高斯平台自助分析场景
  • ClickHouse的优化实践
  • ClickHouse未来的规划与展望

一、自助分析场景OLAP技术选型

1.1 背景

转转平台主要对业务运营数据(埋点)进行分析,埋点数据包含在售商品的曝光、点击、展现等事件,覆盖场景数据量很大,且在部分分析场景需要支持精确去重。大数据量加上去重、数据分组等计算使得指标在统计过程中运算量较大。除此之外,在一些数据分析场景中需要计算留存率、漏斗转化等复杂的数据模型。

虽然在离线数仓的数仓分层和汇总层对通用指标做了预计算处理,但由于这些模型的分析维度通常是不确定的,因此预计算无法满足产品或者运营提出的个性化报表的需求,需分析师或数仓工程师进行sql开发,使得数据开发链路长交付慢,数据价值也随着时间的推移而减少。

作为分析平台,既需要保证数据时效性、架构的高可用,也要做到任意维度、任意指标的秒级响应。
基于以上情况,需要一个即席查询的引擎来实现。

1.2 OLAP选型考量

转转对OLAP引擎选型考量有三个方面:性能灵活性复杂性

  • 性能

    • 数据量级(亿级/百亿级/千亿级等)
    • 数据计算反馈时效性(毫秒级/秒级/分钟级)
  • 灵活性

    • 能否支持聚合结果或明细数据的查询,还是两者都支持
    • 数据链路能否支持离线数据和实时数据的摄取
    • 是否支持高并发的即席查询
  • 复杂性

    • 架构简单
    • 使用门槛低
    • 运维难度低
    • 扩展性强

根据这三个方面的考量,调研了目前主流的几类开源OLAP引擎:

OLAP引擎主要分为两大类:

  • 基于预计算的MOLAP引擎的优势是对整个计算结果做了预计算,查询比较稳定,可以保证查询结果亚秒级或者是秒级响应。但由于依赖预计算,查询的灵活性比较弱,无法统计预计算外的数据,代表是Kylin和Druid。
  • 基于MPP架构的ROLAP引擎可以支持实时数据的摄入和实时分析,查询场景灵活,但查询稳定性较弱,取决于运算的数据量级和资源配比,基于MPP架构的OLAP一般都是基于内存的,代表是Impala和Presto。

Kylin采用的技术是完全预聚合立方体,能提供较好的SQL支持以及join能力,查询速度基本上都是亚秒级响应。同时,Kylin有良好的web管理界面,可以监控和使用立方体。但当维度较多,交叉深度较深时,底层的数据会爆炸式的膨胀。而且Kylin的查询灵活性比较弱,这也是MOLAP引擎普遍的弱点。

Druid采用位图索引、字符串编码和预聚合技术,可以对数据进行实时摄入,支持高可用高并发的查询,但是对OLAP引擎的分析场景支持能力比较弱,join的能力不成熟,无法支持需要做精确去重计算的场景。

Impala支持窗口函数和UDF,查询性能比较好,但对内存的依赖较大,且Impala的元数据存储在Hive Metastore里,需要与Hadoop组件紧密的结合,对实时数据摄入一般要结合Kudu这类存储引擎做DML操作,多系统架构运维也比较复杂。

Presto可跨数据源做联邦查询,能支持多表的join,但在高并发的场景下性能较弱的。

ClickHouse单机性能很强,基于列式存储,能利用向量化引擎做到并行化计算,查询基本上是毫秒级或秒级的反馈,但ClickHouse没有完整的事务支持,对分布式表的join能力较弱。

Doris运维简单,扩缩容容易且支持事务,但Doris版本更新迭代较快且成熟度不够,也没有像ClickHouse自带的一些函数如漏斗、留存,不足以支撑转转的业务场景。

基于以上考量,最终选择了ClickHouse作为分析引擎。

1.3 ClickHouse

ClickHouse是面向实时联机分析处理的基于列式存储的开源分析引擎,是俄罗斯于2016年开源的,底层开发语言为C++,可以支撑PB数据量级的分析。ClickHouse有以下特性:

  • 具有完备的dbms功能,SQL支持较为完善。
  • 基于列式存储和数据压缩,支持索引。
  • 向量化引擎与SIMD提高CPU的利用率,多核多节点并行执行,可基于较大的数据集计算,提供亚秒级的查询响应。
  • 支持数据复制和数据完整性。
  • 多样化的表引擎。ClickHouse支持Kafka、HDFS等外部数据查询引擎,以及MergeTree系列的引擎、Distribute分布式表引擎。

ClickHouse的查询场景主要分为四大类:

  • 交互式报表查询:可基于ClickHouse构建用户行为特征宽表,对于多维度,多指标的计算能秒级给出计算反馈。
  • 用户画像系统:在ClickHouse里面构建用户特征宽表,支持用户细查、人群圈选等。
  • AB测试:利用ClickHouse的高效存储和它提供的一些自带的函数,如grouparray函数,可以做到秒级给出AB实验的效果数据。
  • 监控系统:通过Flink实时采集业务指标、系统指标数据,写到ClickHouse,可以结合Grafana做指标显示。

二、高斯平台自助分析场景

2.1 系统介绍

转转高斯平台的核心功能主要包含两个部分:

  • 埋点数据管理:埋点元数据管理,埋点元数据质量监控和告警;
  • 自助分析:基于业务特点和多部门复合需求,提供多维度、多指标的交叉分析能力,可以支持用户画像标签选择、人群圈选,AB TEST等分析功能,全面支撑日常数据分析需求。

2.2 系统架构

下图展示了高斯平台的系统架构,总共分为四层:

数据采集层:数据来源主要是业务库和埋点数据。业务库数据存储在MySQL里,埋点数据通常是LOG日志。MySQL业务库的数据通过Flink-CDC实时抽取到Kafka;LOG日志由Flume Agent采集并分发到实时和离线两条通道,实时埋点日志会sink写入Kafka,离线的日志sink到HDFS。

数据存储层:主要是对数据采集层过来的数据进行存储,存储采用的是Kafka和HDFS,ClickHouse基于底层数据清洗和数据接入,实现宽表存储。

数据服务层:对外统一封装的HTTP服务,由外部系统调用,对内提供了SQL化的客户端工具。

数据应用层:主要是基于ClickHouse的高斯自助分析平台和用户画像平台两大产品。高斯分析平台可以对于用户去做事件分析,计算PV、UV等指标以及留存、LTV、漏斗分析、行为分析等,用户画像平台提供了人群的圈选、用户细查等功能。

2.3 ClickHouse在高斯平台的业务场景

1、行为分析

业务背景:App上线活动专题页,业务方想查看活动页面上线后各个坑位的点击的效果。

技术实现:采用ClickHouse的物化视图、聚合表引擎,以及明细表引擎。ClickHouse的物化视图可以做实时的数据累加计算,POPULATE关键词决定物化视图的更新策略。在创建物化视图时使用POPULATE关键词会对底层表的历史数据做物化视图的计算。

2、AB-TEST分析

业务背景:转转早期AB-TEST采用传统的T+1日数据,但T+1日数据已无法满足业务需求。

技术方案:Flink实时消费Kafka,自定义Sink(支持配置自定义Flush批次大小、时间)到ClickHouse,利用ClickHouse做实时指标的计算。

三、ClickHouse的优化实践

3.1 内存优化

在数据分析过程中常见的问题大都是和内存相关的。如上图所示,当内存使用量大于了单台服务器的内存上限,就会抛出该异常。

针对这个问题,需要对SQL语句和SQL查询的场景进行分析:

  • 如果是在进行count和disticnt计算时内存不足,可以使用一些预估函数减少内存的使用量来提升查询速度;
  • 如果SQL语句进行了group by或者是order by操作,可以配置max_bytes_before_external_group_by和max_bytes_before_external_sort这两个参数调整。

3.2 性能调优参数

上图是实践的一些优化参数,主要是限制并发处理的请求数和限制内存相关的参数。

  • max_concurrent_queries:限制每秒的并发请求数,默认值100,转转调整参数值为150。需根据集群性能以及节点的数量来调整此参数值。
  • max_memory_usage:设置单个查询单台机器的最大内存使用量,建议设置值为总内存的80%,因为需要预留一些内存给系统os使用。
  • max_memory_usage_for_all_queries:设置单服务器上查询的最大内存量,建议设置为总内存的80%~90%。
  • max_memory_usage_for_user & max_bytes_before_external_sort:group by和order by使用超出内存的阈值后,预写磁盘进行group by或order by操作。
  • background_pool_size:后台线程池的大小,默认值为16,转转调整为32。这个线程池大小包含了后台merge的线程数,增大这个参数值是有利于提升merge速度的。

3.3 亿级数据JOIN

技术原理:在做用户画像数据和行为数据导入的时候,数据已经按照Join Key预分区了,相同的Join Key其实是在同一节点上,因此不需要去做两个分布式表跨节点的Join,只需要去Join本地表就行,执行过程中会把具体的查询逻辑改为本地表,Join本地表之后再汇总最后的计算结果,这样就能得到正确的结果。

四、ClickHouse未来的规划与展望

4.1 ClickHouse应用实践痛点

  • ClickHouse的高并发能力特别弱,官方的建议的QPS是每秒100左右。高并发查询时,ClickHouse性能下降比较明显。
  • ClickHouse不支持事务性的DDL和其他的分布式事务,复制表引擎的数据同步的状态和分片的元数据管理都强依赖于Zookeeper。
  • 部分应用场景需要做到实时的行级数据update和delete操作,ClickHouse缺少完整的操作支持。
  • ClickHouse缺少自动的re-balance机制,扩缩容时数据迁移需手动均衡。

4.2 未来规划及展望

  • 服务平台化,故障规范化。提高业务易用性,提升业务治理,比如:资源的多租户隔离,异常用户的限流熔断,以及对ClickHouse精细化监控报警,包括一些慢查询监控。

  • ClickHouse容器化的部署。支持数据的存算分离,更好的弹性集群扩缩容,扩缩容后自动数据均衡。

  • 服务架构智能化。针对部分业务场景的高并发查询,ClickHouse本身的支持高并发能力比较弱,引入Doris引擎。基于特定的业务场景去自适应的选择ClickHouse或者是Doris引擎。

  • ClickHouse内核级的优化。包括实时写入一致性保证、分布式事务支持、移除Zookeeper的服务依赖。目前Zookeeper在ClickHouse数据达到一定量级是存在瓶颈的,所以移除Zookeeper服务依赖是迫切和必然的。

五、总结

本文主要分享了:

  • OLAP分析领域技术生态
  • 转转自助分析平台的底层架构原理
  • ClickHouse在落地实践过程中的调优方案
  • ClickHouse应用痛点及未来规划和展望

在巨大的数据量面前,想追求极致的性能及全部场景适应性,必须在某些技术方案上进行取舍。ClickHouse从底层列式存储到上层向量化并行计算,都没有考虑存算分离、弹性扩展的技术方案,甚至于横向扩容数据需要手动re-balance。因此,如果要实现云上的可动态伸缩、存算分离,ClickHouse需要重构底层代码。

未来转转会针对痛点进行持续优化,输出更多的技术实践给大家。


关于作者

王鹏哲,转转数据智能部高级数据研发工程师,负责公司高斯自助分析平台及实时数据体系建设。

坚信"不为失败找借口,只为成功找方法"。

转转研发中心及业界小伙伴们的技术学习交流平台,定期分享一线的实战经验及业界前沿的技术话题。

关注公众号「转转技术」(综合性)、「大转转FE」(专注于FE)、「转转QA」(专注于QA),更多干货实践,欢迎交流分享~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/73622.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux基础IO

基础IO🏞️1. 系统文件I/O📖1.1 接口介绍📖1.2 creat系统调用📖1.3 理解fd文件描述符📖1.4 不按顺序的读取和写入📖1.5 文件重命名🌁2. 理解Linux下一切皆文件🌠3. 理解重定向&#…

5G LAN赋能智慧工厂加速落地,四信5G工业路由器成最佳助攻

近年来,随着5G技术的蓬勃发展,信息技术与企业发展更加紧密结合已经成为未来企业发展的主要趋势。而作为“新基建”的代表,5G与工业网络的融合无疑成为未来5G网络的一个重要应用场景。 然而,在传统的工厂制造中,大多数设…

Java基础-面向对象综合练习-拼图游戏

1. 设计游戏的目的 锻炼逻辑思维能力利用Java的图形化界面,写一个项目,知道前面学习的知识点在实际开发中的应用场景 2. 游戏的最终效果呈现 Hello,各位大家好。今天,我们要写一个非常有意思的小游戏 —《拼图小游戏》 我们先来…

ADI Blackfin DSP处理器-BF533的开发详解5:PLL配置内核和系统时钟(含源代码)

又是一个熟悉的名词,PLL。 硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 PLL(Phase Locked Loop)是 ADSP-BF53x 的内核和时钟设置的机制,叫做锁相环。通过 P…

论文阅读笔记 | 三维目标检测——CenterPoint算法

如有错误,恳请指出。 文章目录0. 前言1. 背景2. 准备工作3. 网络结构3.1 RPN3.2 RCNN4. 实验结果paper:《Center-based 3D Object Detection and Tracking》(2021CVPR) 0. 前言 CenterPoint应该是与CenterNet是同一个团队的成果…

[附源码]Python计算机毕业设计Django在线项目管理

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

庄懂的TA笔记(十一)< >

庄懂的TA笔记(十一)< > 目录: 一、shader面板玩法 > 增广 : 多种 面板设计玩法: 二、shader参数类型 > 增广 :认识 多种参数类型 : 三、增广 :认识 IVO …

体验一下传说中可以干掉程序员的OpenAI ChatGPT

ChatGPT初体验 ​ OpenAI公司最近开发了一个新的聊天AI模型,ChatGPT。网上铺天盖地传言AI可以替代程序员。于是今天也来体验了一下。下面是一个使用的案例: ​ 首先看来他也不是万能的。 问: 今年世界杯冠军预测 ChatGPT: 对于世界杯的冠军…

【20221208】【排序专题】

一、冒泡排序(稳定排序) 思想:冒泡排序的思想就是比较当前数和后一个数的大小,将较大的数往后移动,这样可以确保一轮下来能将最大的数放在数组的最末端。然后重复此操作即可完成排序。 上面第一轮比较完,我…

VSCode无法远程连接VMWare(Ubuntu)其中一个可能原因(inet消失)

有时候把虚拟机挂起后,等自己下次再想用,打开vscode用之前的ssh配置,却始终无法连接,进程sshd也是开启的,就很纳闷。 然后么,咱就想查查是不是网络的问题,毕竟ssh是通过ipv4连的虚拟机&#xff…

【explain执行计划】MySQL性能调优

explain是MySQL性能调优过程中必须掌握的工具,explain结果中常见的type结果及代表的含义,并且通过同一个SQL语句的性能差异,说明建立正确的索引多么重要。 explain结果中的type字段代表什么意思? MySQL的官网解释非常简洁&#x…

前端埋点分析

第三方代码埋点 已经有很多成型的服务商了如友盟,百度统计等🌯,都提供了比较成型的方案🎨,并可以在后台管理系统中查看比较详细的数据分析 自己动手 优点: 控制精准,可以非常精确地选择什么时…

Bulma的简单使用

文章目录1. 引入Bulma2. 字体和颜色3. 间距和容器1. 引入Bulma 通过 CDN 引入&#xff1a; <style>import "https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.4/css/bulma.min.css";</style>官网还有其他多种引入方式。 2. 字体和颜色 在 Bulma 中&…

基于jQuery或Zepto的图片延迟加载插件

当我们网站的页面图片过多时&#xff0c;加载速度就会很慢。尤其是用手机2G/3G访问页面&#xff0c;不仅页面慢&#xff0c;而且还会用掉很多流量。我们主题之前也都采用了图片的懒加载形式&#xff0c;但都不完美&#xff0c;部分主题还采用了占位图片来控制懒加载&#xff0c…

CP2102N高度集成USB全速带电池充电检测控制芯片

目录CP2102N简介主要特点芯片特性CP2102N开发板开发板功能应用领域CP2102N简介 CP2102N是USBXpress系列中新的一款高度集成的USB转RS232的桥接芯片。不但较上一代CP210X系列更有成本效益&#xff0c;而且在功能上也有更多创新。其中&#xff0c;符合USB-BCS 1.2规范的充电器识…

【人脸识别】基于直方梯度图 HDGG 的人脸识别算法研究附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步进步&#xff0c;matlab项目目标合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信息&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算…

入门系列 - Git的管理修改与撤销修改

本篇文章&#xff0c;是基于我自用Linux系统中的自定义文件夹“test_rep”&#xff0c;当做示例演示 具体Git仓库的目录在&#xff1a;/usr/local/git/test_rep Git的管理修改与撤销修改 在讲这个之前&#xff0c;还是有必要再阐述一下“工作区和暂存区”。Git 和其它版本控制…

计算机毕业论文java毕业设计选题源代码S2SH校园BBS论坛系统

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 计算机毕业设计java毕设之S2SH校园论坛_哔哩哔哩_bilibili计算机毕业设计java毕设之S2SH校园论坛共计2条视频&#xff0c;包括&#xff1a;计算机…

机器学习与数据挖掘——分类与预测模型

如果有兴趣了解更多相关内容&#xff0c;欢迎来我的个人网站看看&#xff1a;瞳孔空间 一&#xff1a;分类与预测 分类(Classification)&#xff1a;分类是找出描述并区分数据类或概念的分类函数或分类模型(也常常称作分类器)&#xff0c;该模型能把数据库中的数据项映射到给…

设计行业文档管理怎么做?天翎群晖全新解决方案来了!

编者按&#xff1a;解决设计行业文档管理难题&#xff0c;天翎群晖全新解决方案来帮忙&#xff01;本文分析了设计行也中的文档管理难点&#xff0c;并从五个方面介绍了天翎群晖是如何解决这些难题的。 关键词&#xff1a;免安装&#xff0c;免维护&#xff0c;私有化部署&…