最快开源 OLAP 引擎!ClickHouse 在头条的技术演进
作者头像
  • 韩景昱
  • 2019-12-08 14:11:22 9

ClickHouse 是一款由 Yandex 开源的面向 OLAP 的分布式列式数据库,具备强大的实时数据分析能力。Yandex 被誉为“俄罗斯的 Google”,ClickHouse 以其卓越的性能和高效的查询能力而闻名。这款数据库不仅能够利用 SQL 查询生成实时数据报告,还能在内存数据库领域表现出色,甚至在某些方面比 GreenPlum 等传统数据库更为优秀。

在本文中,我们将探讨 ClickHouse 的核心技术及其在字节跳动的应用案例。文章内容源自字节跳动高级研发工程师陈星在 QCon 全球软件开发大会上的演讲。

ClickHouse 简介

ClickHouse 是 Yandex 的杰作,在 2016 年开源。它以列式存储著称,采用向量化执行引擎。ClickHouse 不依赖于 Hadoop 生态系统,而是使用本地存储,这使得它在处理大数据时更加灵活高效。ClickHouse 提供了丰富的原生客户端和 SQL 接口,并且具有优秀的线性扩展能力和可靠性。尽管 ClickHouse 的技术并不新颖,但它通过优化数据剪枝、LSM 方式以及垂直资源整合,实现了卓越的性能。

字节跳动如何运用 ClickHouse

字节跳动之所以选择 ClickHouse,主要是因为它的高性能。ClickHouse 的数据剪枝能力强,采用了 LSM 方式,并且能够充分利用机器资源。字节跳动最初将 ClickHouse 应用于用户行为分析系统,该系统需要处理大量用户行为数据。ClickHouse 在应对复杂的查询需求时表现优异,能够满足头条和抖音等应用的需求。

目前,字节跳动的 ClickHouse 集群规模达到了数千个节点,单集群最大规模为 1200 个节点。日增数据量为 100TB,而整个集群的数据总量则达到数十 PB。大多数查询响应时间在几秒内,能够满足大部分查询需求。ClickHouse 在头条内部主要应用于产品分析师的精细化运营、开发人员的问题排查以及广告客户的分析。

成绩与解决方案

在使用 ClickHouse 的过程中,字节跳动遇到了一些挑战,主要包括数据源接入、事务支持、数据就绪速度等问题。为了解决这些问题,字节跳动引入了 HDFS 客户端,维护了一套外部事务逻辑,并优化了数据就绪流程。此外,字节跳动还解决了 Map 数据类型和动态 Schema 的问题,通过 Map 类型实现了灵活的数据结构,并通过优化 LSM 架构提高了合并速度。

高可用性与大数据量

ClickHouse 的高可用性在大数据量下可能会遇到一些问题,尤其是在 Zookeeper 使用不当的情况下。为了解决这个问题,字节跳动开发了一套自有的高可用方案,将更多的信息从 Zookeeper 卸载,仅保留必要的协调服务功能。这套方案通过 Gossip 协议实现了数据和行为的全局唯一性,大大提升了系统的稳定性和可扩展性。

String 类型处理效率

为了提高交互式查询的性能,字节跳动引入了全局字典压缩方案,通过预压缩的方式减少了数据解压的时间,从而提高了执行效率。这种方案在执行层上实现了非解压计算,提高了查询性能,特别是在处理分布式查询时表现尤为出色。

特定场景内存 OOM

在处理大规模数据时,内存管理是一个重要问题。ClickHouse 在处理一些特定查询时可能会出现内存溢出的情况。为此,字节跳动引入了分步聚合算法,通过优化底层数据分布和执行路径,显著降低了内存消耗,提升了系统性能。

Array 类型处理

为了更好地处理 AB 实验数据,字节跳动开发了双尺度 Bloom Filter 和 Bitmap 索引技术,通过数据剪枝和索引优化提高了查询效率。这种优化在推荐系统等实际应用场景中取得了显著成效。

其他改进

除了上述改进,字节跳动还针对其他数据源进行了特定优化,例如针对 Kafka 的高可用解决方案和基于 Collapsing 引擎的更新/删除功能。这些改进进一步提升了 ClickHouse 的整体性能和适用性。

总体而言,ClickHouse 是一款功能强大且易于定制的数据库,非常适合处理大规模实时数据分析需求。字节跳动的成功案例证明了其在实际应用中的巨大潜力。

    本文来源:图灵汇
责任编辑: : 韩景昱
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
演进开源头条ClickHouse最快引擎技术OLAP
    下一篇