写点什么

作为国内规模最大的 ClickHouse 用户,字节跳动踩过哪些坑? 

  • 2021-11-02
  • 本文字数:3918 字

    阅读完需:约 13 分钟

作为国内规模最大的ClickHouse用户,字节跳动踩过哪些坑? 

作者 | 蔡芳芳

采访嘉宾 | 郭东东

 

ClickHouse 由于其性能方面的突出优势,正在分析型数据库领域掀起一波新的技术浪潮。作为国内规模最大的 ClickHouse 用户,目前字节跳动内部的 ClickHouse 节点总数超过 15000 个,管理总数据量超过 600PB,最大的集群规模在 2400 余个节点。实际上,字节跳动广泛的业务增长分析很多都建立在 ClickHouse 为基础的查询引擎上。

 

那么,ClickHouse 具体应用于字节跳动哪些业务场景?为什么选择采用 ClickHouse 而不是其他数据分析技术?在使用 ClickHouse 的过程中,字节跳动内部团队又踩过哪些坑?近日,InfoQ 带着上述问题采访了字节跳动数据平台数据应用研发负责人郭东东。

字节跳动数据应用产品

 

InfoQ:您在奇虎 360 工作的时候也曾负责大数据平台建设,能否基于您自己的感受,谈谈 360 和字节两家企业建设大数据平台的侧重点有哪些不同?(比如场景、需求、技术栈等等)

 

郭东东:两家公司的发展阶段,包括本身数据的体量都有一些差异,所以这两个公司可能在建设上有一些比较相通的地方,也有一些差异化。在 360 那时候主要是 Hadoop 生态刚刚兴起,当时更多的工作是把 Hadoop、HBase 等一系列大数据技术引入到 360,去解决之前传统数据库构建、数据分析平台建设这块的一些瓶颈,当时更多只是把这些平台作为底座更好地支撑业务。

 

来字节跳动之后,这些开源的生态已经比较成熟了。我们更多是怎样体系化地建设数据平台,在技术平台的基础之上,更多地构建数据分析的其他能力。当然,字节跳动的数据量后期增速很大,本身底层分析引擎等方面的挑战也比较大。

 

InfoQ:您团队负责的数据应用产品,与前段时间字节对外开放的火山引擎数据中台产品,二者之间的关系应该怎么理解?

 

郭东东:我主要负责数据应用相关产品,跟火山引擎的数据中台其实是上下游的依赖关系。中台更多是把数据整理好加工好,形成相对规范的数据体系。数据应用的话更多考虑的是在数据体系上怎样把更多的数据能力赋能给业务线,比如各种分析能力、AB 实验能力、行为分析能力和可视化能力等等。二者是一个比较密切的协同关系。

 

InfoQ:数据应用产品迭代的节奏和流程是怎样的?

 

郭东东:我们基本上采用敏捷开发,一个迭代周期可能是两到三周,每个产品会不太一样,整体来说是小步快跑的节奏,快速把客户的需求转化成产品能力,然后提供给用户去使用。这里面包括测试环节、活动环节都需要把控,整个有一套相对完善的需求管理和研发管控的系统。

 

InfoQ:能否以一个数据应用产品为例,为我们拆解一下背后的整体技术栈和架构是什么样的?

 

郭东东:我以 AB 实验平台为例,简单介绍一下我们整体的技术栈和架构。AB 实验平台整个产品的技术架构包括指标建设模块、数据分流模块等,以及底层的查询引擎能力。指标建设模块负责数据的接入和清洗,包括整个 AB 实验平台数据体系的建设。数据分流模块模块主要是根据不同用户实时决定用户属于的实验组。最底层的查询引擎是我们的核心,主要负责保证整个交互式查询的能力,这里面还有一些增强分析的子模块等等。整个是以容器化部署的,编程语言的话包括 Python、Go 这些都有用到。

 

ClickHouse 应用实践

 

InfoQ:ClickHouse 其实在 16 年就已经开源了,但似乎直到去年热度和关注度才一下子变得特别高,这是为什么呢?

 

郭东东:其实一个开源技术从开源到逐步成熟、被业内广泛采用,本来就需要一个过程。另外,如果有一些大公司逐步在使用这个技术的话,也有助于更好地推动这项技术在业内被普遍采用。应该说字节跳动内部的 ClickHouse 应用实践,对于 ClickHouse 在业内更大范围的使用也起到比较大的推动作用。很多公司都跟我们交流过 ClickHouse 的使用情况,包括技术改进、技术引进路线等等。

 

另外,从本质上来说 ClickHouse 确实解决了一些特定场景和业务上存在的比较大的痛点。数据分析之前大家更多是困在数据量,很少能得到相对明细数据的分析,而 ClickHouse 强大的分析能力刚好解决了这一痛点。这其实也反映了大家对数据更细粒度的分析需求的持续拓展。

 

InfoQ:据了解,ClickHouse 在字节应用还比较多。能否基于您负责的团队和产品,介绍一下 ClickHouse 主要应用于哪些业务场景?第一个采用 ClickHouse 的业务场景是什么?

 

郭东东:ClickHouse 在字节的应用场景比较多,比如我负责的数据应用平台,基本上很多底层技术都非常多地依赖 ClickHouse 提供的能力,比如 BI 分析能力、AB 实验的分析能力、行为分析能力等等,包括商业化层面的广告效果分析,也都是依赖 ClickHouse 的。

 

InfoQ:在选用 ClickHouse 之前你们做了哪些技术选型工作?为什么上述业务场景选择采用 ClickHouse 而不是其他数据分析技术?主要看重 ClickHouse 的哪些特性?相对应可以解决业务场景中的什么问题?

 

郭东东:其实在选 ClickHouse 之前,我们也做了比较多的技术选型工作。当时我们有一个相对比较有挑战的技术场景,是要基于很多明细数据做行为分析,这一块我们研究了挺长时间,当时也试用了 Presto、Kylin 等等各种各样的分析技术,最后选择了 ClickHouse。主要是 ClickHouse 在相对固定的一个 Panel 场景下,查询能力确实有比较明显的优势,而且本身它是不会损失灵活性的,像 Kylin 的话其实灵活性会比较差,只要做一点修改就需要重刷。

 

另外我们其实也调研过 Druid 等,但使用起来跟 ClickHouse 还是有比较大差异的。我们本身选 ClickHouse,还有一个比较大的原因是 ClickHouse 本身 Engine 是相对简单的,因为它 Engine 的执行引擎写得比较高效,它带来的向量化执行等等这些特性对我们场景化分析的价值还是比较大的。

 

InfoQ:从最初采用到现在,技术方案迭代过吗?团队对基于 ClickHouse 开源版本做了哪些改进和优化?

 

郭东东:ClickHouse 是本身开源版本,我们也会持续进行迭代和优化,还是做了不少工作的。比如说 ClickHouse 的单机用户规模原始是受限的,我们做到了大概几千台的单机用户规模,这里面就做了大量的优化。对于它本身查询能力层面、性能层面,我们也做了比较多的优化,包括特殊的像那些比较复杂的路径转换等等一系列分析。

 

另外我们也做了 ClickHouse 的云原生改造,本身它只支持 Local 部署的模式,我们做到了存储计算分离,就能比较容易地基于容器去调动算力,这些方面也做了很多事情。另外 ClickHouse 不支持事务、实时写入能力,包括对 Update 的支持,这块我们都做了比较多的改进.

 

我们整体来说还是按照云原生和相对完整的一个数据库去推进这个演进,包括对相对复杂 SQL 能力的支持、优化器能力的补足,这块都有投入。

 

InfoQ:在使用 ClickHouse 的过程中,你们都遇到过哪些问题?是否有一些解决的经验可以借鉴?

 

郭东东:我们使用 ClickHouse 算比较早的,中间遇到的问题比较多,踩了不少坑,但是现在来看的话,其实 ClickHouse 本身开源也在逐步成熟,很多问题也在逐步完善。至于有哪些经验可借鉴,我觉得可能有几个点拿出来跟大家分享一下。首先 ClickHouse 本身运维管控是比较弱的,所以我们内部自己搭建了一套相对完善的运维管控系统,以保证 ClickHouse 的稳定性,包括故障节点的停换等等一系列事情。另外 ClickHouse 在对外数据摄入这一方面其实也不算特别完善,这块我们也做了比较多事情,还有包括实时能力等等。

 

对大数据分析技术的观察

 

InfoQ:能否谈谈过去 1-3 年,您对于大数据分析技术的观察?有哪些比较重要的变化和趋势?

 

郭东东:过去三年大数据分析技术发展还是挺快的,尤其业内也有比较多的开源技术出现,像 ClickHouse 这样的技术。另外业内云原生数据分析公司(如 Snowflake)的成功,也在大力推动技术的发展。

 

回到技术本身,大家其实可以看到越来越多的云原生能力,包括 AI 支持和数据分析、数据库和数据仓的结合、湖仓一体、批流一体等等,技术一直在持续推进。未来我认为数据分析能力会持续加强,包括数据分析技术的多样性、整个架构 Layer Out、存储计算分离等等,都是比较大的发展趋势。

 

InfoQ:基于实时数据流的 Kappa 架构现在越来越多企业开始尝试。字节的大数据架构中,目前是 Lambda 架构和 Kappa 架构共存吗?如果是,两者分别用在哪些场景?如果还只有 Lambda 架构,那为什么还没有引入 Kappa 架构?

 

郭东东:目前在我们公司内部这两种架构都是存在的,每一种架构都有不同的使用场景。Lambda 架构本身离线和实时是分开的,在我们内部更多用于一些数据量比较大且整体有一些比较复杂的策略的场景,比如反作弊等策略,实时很难做得很准确,就需要把离线和实时分开,离线先提供一份数据,然后实时进一步修正这个数据,保证数据是可用的且准确性更高。

 

但有些场景其实我们也直接采用 Kappa 架构,尤其数据湖这些技术在内部的广泛使用,保证了实时的分析能力跟离线也差不了太多,类似这种场景我们就会把实时和离线整合起来,就只用一套,保证实时产出的数据就是我们最终需要的数据。我们只有在出现比较大的数据口径调整,或者其他事故的时候,才会跑离线任务去修正,默认的话就是一套。

 

采访嘉宾介绍:

 

郭东东,字节跳动数据平台数据应用研发负责人,负责数据应用相关产品的研发,具体包括 AB 实验平台、行为分析系统、智能 BI 洞察系统相关产品等,支撑内部的抖音、今日头条等核心业务线。曾经任职于奇虎 360,负责大数据平台相关建设,有 10 年的大数据平台以及应用架构经验,对 OLAP、大数据实时 &离线处理技术有比较深入的了解,熟悉 ClickHouse、Spark、Presto 等主流的大数据处理技术。


活动推荐:

 

11 月 12-13 日举办的 ArchSummit 全球架构师峰会深圳站,字节跳动的两位老师将分别在【高可用高性能业务架构】和 【AI 工程化治理】两个专题方向带来以下分享:

 

字节跳动海量时序数据库 ByteTSD 内核探究

王栋,字节跳动基础架构研发工程师

 

字节端上推理演进与实践

黄严,字节跳动智能创作解决方案研发负责人

 

议题内容及演讲提纲已上线官网,更多议题可点击这里查看。

2021-11-02 17:009519
用户头像
蔡芳芳 InfoQ 总编辑

发布了 818 篇内容, 共 604.5 次阅读, 收获喜欢 2820 次。

关注

评论 1 条评论

发布
用户头像
BSN区块链服务网络,全球性基础设施网络,更有各类官方指定应用哦
2021-11-03 17:32
回复
没有更多了
发现更多内容

Android修炼系列(十二),自定义一个超顺滑的回弹RecyclerView

android 程序员 移动开发

android之Fragment(官网资料翻译)

android 程序员 移动开发

Android体系化进阶学习图谱:我们究竟还要学习哪些Android知识?(某大厂内部资料

android 程序员 移动开发

android图片加载库Glide4使用教程(项目中如何快速将Glide3替换成Glide4)

android 程序员 移动开发

Android平台HTTPS抓包全方案

android 程序员 移动开发

Android应用进程间通信之Messenger信使使用及源码浅析

android 程序员 移动开发

Android动画之补间动画

android 程序员 移动开发

Android命令Monkey压力测试,详解

android 程序员 移动开发

Android备忘录《内存泄漏》

android 程序员 移动开发

Android常见问题及开发经验总结(一)

android 程序员 移动开发

Android内存泄漏问题

android 程序员 移动开发

Android刘海屏、水滴屏全面屏适配详解

android 程序员 移动开发

android各种提示Dialog 弹出框(1)

android 程序员 移动开发

Android屏幕适配方案

android 程序员 移动开发

Android中自定义ViewGroup

android 程序员 移动开发

基于 OpenYurt & EdgeX Foundry 的云边端一体化解决方案

阿里巴巴云原生

云原生 边缘计算 openyurt EdgeX Foundry

Android刘海屏、水滴屏全面屏适配方案

android 程序员 移动开发

Android厂商推送冲突了。。。

android 程序员 移动开发

Android岗高频面试题二集,看你能答出几题?(含答案

android 程序员 移动开发

Android中自定义下拉样式Spinner

android 程序员 移动开发

Android仿QQ锁屏状态下消息提醒(震动+提示音)

android 程序员 移动开发

android各种提示Dialog 弹出框

android 程序员 移动开发

消息队列RocketMQ应对双十一流量洪峰的“六大武器”

阿里巴巴云原生

阿里云 RocketMQ 云原生 消息队列 流量

Android事件分发机制三:事件分发工作流程

android 程序员 移动开发

Android低版本上APP首次启动时间减少80%(一)

android 程序员 移动开发

Android使用ViewPager实现图片轮播系列之四:手动滑动 + 左右箭头 + 删除数据

android 程序员 移动开发

基于 Istio 的全链路灰度方案探索和实践

阿里巴巴云原生

阿里云 云原生 istio 灰度 全链路

Android属性动画——ObjectAnimator类及浮动菜单的实现

android 程序员 移动开发

Android开发 申请Mob的SMSSDK的短信验证码功能中获取MD5签名(更新中)

android 程序员 移动开发

Android中关于Context的三言两语,源码强势分析带你了解Context!

android 程序员 移动开发

Android企业级实战-界面篇-2

android 程序员 移动开发

作为国内规模最大的ClickHouse用户,字节跳动踩过哪些坑? _架构_蔡芳芳_InfoQ精选文章