ByteHouse实践与思考:如何补全ClickHouse高可用短板?

火山引擎 ByteHouse:ClickHouse 如何保证海量数据一致性 背景ClickHouse是一个开源的OLAP引擎,不仅被全球开发者广泛使用,在字节各个应用场景中也可以看到它的身影。基于高性能、分布式特点,ClickHouse可以满足大规模数据的分析和查询需求,因此字节研发团队以开源ClickHouse为基础,推出火山引擎云原生数据仓库ByteHouse。在日常工作中,研发人员经常会遇到业务链路过长,导致流程稳定性和数据一致性难保障的问题,这在分布式、跨服务的场... 阅读详情

相信大家都对大名鼎鼎的ClickHouse有一定的了解了,它强大的数据分析性能让人印象深刻。但在字节大量生产使用中,发现了ClickHouse依然存在了一定的限制。例如:

  • 缺少完整的upsert和delete操作

  • 多表关联查询能力弱

  • 集群规模较大时可用性下降(对字节尤其如此)

  • 没有资源隔离能力

因此,我们决定将ClickHouse能力进行全方位加强,打造一款更强大的数据分析平台。后面我们将从五个方面来和大家分享,本篇将详细介绍我们是如何为ClickHouse增强高可用能力的。

字节遇到的ClickHouse可用性问题

随着字节业务的快速发展,产品快速扩张,承载业务的ClickHouse集群节点数也快速增加。另一方面,按照天进行的数据分区也快速增加,一个集群管理的库表特别多,开始出现元数据不一致的情况。两方面结合,导致集群的可用性极速下降,以至于到了业务难以接受的程度。直观的问题有三类:

1、故障变多

典型的例子如硬件故障,几乎每天都会出现。另外,当集群达到一定的规模,Zookeeper会成为瓶颈,增加故障发生频率。

2、故障恢复时间长

因为数据分区变多,导致一旦发生故障,恢复时间经常会需要1个小时以上,这是业务方完全不能接受的。

3、运维复杂度提升

以往只需要一个人负责运维的集群,由于节点增加和分区变多,运维复杂度和难度成倍的增加,目前运维人数增加了几人也依然拙荆见肘,依然难保证集群的稳定运行。

可用性问题已经成为制约业务发展的重要问题,因此我们决定将影响高可用的问题一一拆解,并逐个解决。

提升高可用能力的方案

一、降低Zookeeper压力

问题所在:

原生ClickHouse 使用 ReplicatedMergeTree 引擎来实现数据同步。原理上,ReplicatedMergeTree 基于 ZooKeeper 完成多副本的选主、数据同步、故障恢复等功能。由于 ReplicatedMergeTree 对 ZooKeeper 的使用比较重,除了每组副本一些表级别的元信息,还存储了逻辑日志、part 信息等潜在数量级较大的信息。Zookeeper并不是一个能做到良好线性扩展的系统,当ZooKeeper 在相对较高的负载情况下运行时,往往性能表现并不佳,甚至会出现副本无法写入,数据也无法同步的情况。在字节内部实际使用和运维 ClickHouse 的过程中,ZooKeeper 也是非常容易成为一个瓶颈的组件。

改造思路:

ReplicatedMergeTree 支持 insert_quorum,insert_quorum 是指如果副本数为3,insert_quorum=2,要成功写入至少两个副本才会返回写入成功。

新分区在副本之间复制的流程如下:

77c1128c5bb9d9905c6396825dfa0d59.png

可以看到,反复在 zookeeper 中进行分发日志、数据交换等步骤,这正是引起瓶颈的原因之一。

为了降低对 ZooKeeper 的负载,在ByteHouse中重新实现了一套 HaMergeTree 引擎。通过HaMergeTree降低对 ZooKeeper 的请求次数,减少在 ZooKeeper 上存储的数据量,新的 HaMergeTree 同步引擎:

1)保留ZooKeeper上表级别的元信息;

2)简化逻辑日志的分配;

3)将 part 信息从 ZooKeeper 日志移除。

73e62b99ad9a02c8de2787661b3c5dfd.png

HaMergeTree 减少了操作日志等信息在zookeeper里面的存放,来减少zookeeper的负载,zookeeper里面只是存放log LSN, 具体日志在副本之间通过gossip协议同步回放。

在保持和ReplicatedMergeTree完全兼容的前提下,新的 HaMergeTree 极大减轻了对 ZooKeeper 的负载,实现了 ZooKeeper 集群的压力与数据量不相关。上线后,因Zookeeper导致的异常大量减少。无论是单集群几百甚至上千节点,还是单节点上万张表,都能保障良好的稳定性。

二、提升故障恢复能力

问题所在:

虽然所有数据从业者都在做各种努力,想要保证线上生产环境不出故障,但是现实中还是难以避免会遇到各式各样的问题。主要是由下面这几种因素引起的:

软件缺陷:软件设计本身的Bug引起的系统非正常终止,或依赖的组件兼容引发的问题。

硬件故障:常见的有磁盘损坏、内容故障、CPU故障等,当集群规模扩大后发生的频率也线性增加。

内存溢出导致进程被停止:在OLAP数据库中经常发生。

意外因素:如断电、误操作等引发的问题。

由于原生ClickHouse希望达到极致性能的初衷,所以在ClickHouse系统中元数据常驻于内存中,这导致了ClickHouse server重启时间非常长。因而当故障发生后,恢复的时间也很长,动辄一到两个小时,相当于业务也要中断一到两个小时。当故障频繁出现,造成的业务损失是无法估量的。

改造思路:

为了解决上述问题,在ByteHouse中采用了元数据持久化的方案,将元数据持久化到RocksDB, Server启动时直接从RocksDB加载元数据,内存中也仅仅存放必要的Part信息。因此可以减少元数据对内存的占用,以及加速集群的启动以及故障恢复时间。

如下图所示,元数据持久化整体上采用了RocksDB+Meta in Memory的方式,每个Table都会对应一个RocksDB数据库存放该表所有Part的元信息。Table首次启动时,从文件系统中加载的Part元数据将被持久化到RocksDB中;之后重启时就可以直接从RocksDB中加载Part。每个表从RocksDB或者文件系统加载的Part将只在内存中存放必要的Part信息。在实际使用Part时,将通过内存中存放的Part元信息去RocksDB中读取并加载对应Part。

d7e49141822675bd748ce9ed691c5904.png

完成元数据持久化后,在性能基本无损失的情况下,单机支持的part不再受内存容量的限制,可以达到100万以上。最重要的是,故障恢复的时间显著缩短,只需要此前的几十分之一的时间就可以完成。例如在原生ClickHouse中需要一到两个小时的恢复时间,在ByteHouse中只需要3分钟,大大提高的系统的高可用能力,为业务提供了坚实保障。

三、其他方面

除了以上两点,在ByteHouse中在其他很多方面都为高可用能力做了增强,如通过HaKafka引擎提升了数据写入的高可用性,提升实时数据写入的容错率,可自动切换主备写入;增加了监控运维平台,实现对关键指标的监控、告警;增加多种问题诊断工具,能实现故障的快速定位。

对于数据分析平台来说,稳定性是重中之重。我们对ByteHouse的高可用能力的提升是不会停止的,在极致性能的背后,力图为用户提供最强有力的稳定性保障。

除高可用能力之外,ByteHouse在为原生ClickHouse的企业级能力进行了全方位的增强。下一期,我们将介绍ClickHouse增强计划之“资源隔离”,大家有兴趣一定不要错过。

ByteHouse已经通过火山引擎全面对外服务,并且提供各种版本以满足不同类型用户的需求。在ByteHouse官网上提交试用信息即可免费试用!欢迎大家试用。

671c850bd8089ffe74981a8d49671f97.png

扫码即可免费试用

另外,也欢迎大家扫描下方二维码加入ByteHouse & ClickHouse交流群,交流关于ByteHouse和ClickHouse的使用经验,有问题也可以咨询群中技术大神。

7dab3a01eb8ce73b3b1a09dd388bd3ba.png

ClickHouse深度总结 一、简介 1.1ClickHouse是什么 ClickHouse 是一个用于联机分析 (OLAP)的列式数据库管理系统( DBMS),来自于俄罗斯本土搜索引擎企业 Yandex 公司,是为世界第二大web分析平台(Yandex.Metrica)所开发 2016年开源,开发语言是C++,是一款PB级的交互式分析数据库。ClickHouse的性能超过了目前市场上可比的面向列的DBMS,每秒钟每台服务器每秒处理数亿至十亿多行和数十千兆字节的数据。 1.2CK的热度 与其他开源分析数据库的受欢迎程. 阅读详情

相关推荐

从贝叶斯网络到结构因果模型:因果推理在可解释AI中的实践

在机器学习和数据分析领域,理解变量间的因果关系而不仅仅是统计关联,是构建可信赖、可解释系统的关键。概率图模型,特别是贝叶斯网络,通过有向无环图和条件概率表,能够高效地编码和推理变量间的条件依赖关系,广泛应用于医疗诊断、风险评估等场景。然而,贝叶斯网络主要刻画的是“是什么”的关联,难以回答“如果…会怎样”的因果问题。为了进行因果推断,需要引入结构因果模型和do-演算,它们通过定义结构方程和模拟干预操作,能够区分混杂效应,估计处理变量对结果变量的净因果影响。这一套方法论对于可解释人工智能至关重要,它能生成反事实

weixin_42168902的博客 380

ClickHouse高性能查询/写入和常见注意事项(五)

数据写入默认是异步的(可以开启同步写但性能会影响),先在分布式表所在的机器进行落盘, 然后异步的发送到本地表所在机器进行存储,中间没有一致性的校验,短时间内可能造成不一致,且如果分布式表所在机器时如果机器出现down机, 会存在数据丢失风险。批量写入数据时,控制每个批次的数据中涉及到的分区的数量,无序的数据导致涉及的分区太多,建议写入之前最好对需要导入的数据进行排序。首先是内存的 C0 层,保存了所有最近写入的 (k,v),这个内存结构是有序的,且可以随时原地更新,同时支持随时查询。

xwnxwn的专栏 2513

华为昇腾Atlas 200I DK A2实战:从开箱到运行首个AI应用

本文详细介绍了华为昇腾Atlas 200I DK A2开发板从开箱到运行首个AI应用的全过程。包括硬件准备、系统烧录、开发板连接方案、AI应用运行及性能优化技巧,帮助开发者快速上手部署AI项目,提升开发效率。

weixin_27038245的博客 593

clickhouse使用经验总结

1、java连接clickhouse中,尽量不用使用循环查,容易造成超时异常; 2、高并发查询clickhouse造成超时。 3、clickhouse适合大数据量,单查询。 4、高并发需要优化clickhouse的配置,具体包含 max_concurrent_queries 100个并发 1000个 uncompressed_cache_size 8G 总内存*2/3 5、对于数据去重,除了使用distinct函数外,还有uniq()、uniqComb...

dkgee 9322

20 Embedding 与向量检索:语义为什么能变成距离

Embedding 是 RAG 语义检索的数学基础。本文用工程视角讲清文本如何变成向量,为什么语义相近会表现为距离相近,Top-K 检索如何工作,以及在模型选择、同模型约束、精确匹配和召回评估上的常见坑。

老于的笔记的专栏 6204

LeRobot 入门教程(四)SO-101机械臂组装教程

《SO-101机器人组装与配置指南》详细介绍了旗舰机器人SO-101的完整搭建流程。从获取3D打印零件、安装LeRobot软件和FeetechSDK,到分步组装6个关节的机械臂结构(含夹爪/手柄选项),指南提供了清晰的螺丝规格和安装位置说明。重点包括:电机ID/波特率设置方法、USB端口识别技巧、领导者/跟随者臂的校准流程,以及故障排查建议。完成组装后,用户可通过配套Python脚本校准机器人,为后续的自主学习任务做好准备。文档附有视频演示和技术支持通道,确保用户顺利完成机器人部署。

2506_90492529的博客 2582

【大数据实战】聊聊clickhouse的性能问题-高性能分析

在OLAP的查询场景中,同样的数据量,ClickHouse表现出了比同类可比较产品更优的性能。可以看到CK在OLAP场景下的性能还是非常强的,那么是不是它在每个指标上表现都很好呢?事实上,并不是这样的,它也有自己的缺点,接下来我们可以大致来看看ClickHouse的性能指标。

小吴同学的博客 3081

基于LUT表对鱼眼图像进行畸变校正

当然也可以进行图像的畸变校正操作,已知相机的焦距为fx/fy,光心为cx/cy,像素大小为p(单位mm/pixel)对于畸变校正结果图中像素点(u,v),其对应的原图中的像素坐标(u',v')的计算流程描述如下。1)假设无畸变相机成像模型的焦距和光心与原相机相同,计算得到无畸变相机成像模型中归一化平面坐标(X,Y,Z),其中X=(u-cx)/fx,Y=(v-cy)/fy,Z=1。这里x'/y'的单位为像素。

On my way 639

从 Clickhouse 到 Apache Doris,慧策电商 SaaS 高并发数据服务的改造实践

引入 Apache Doris 之后,新架构的整体查询响应速度都有了较大的提升, 存储成本显著降低,后续我们将继续探索 Doris 新特性,进一步实现降本增效。

SelectDB 1409

揭秘AI人工智能中Stable Diffusion的模型微调技巧

Stable Diffusion作为一种强大的文本到图像生成模型,在艺术创作、设计、娱乐等多个领域展现出了巨大的应用潜力。然而,其默认的模型输出可能无法满足特定用户或特定场景的个性化需求。本文章的目的在于深入揭秘Stable Diffusion的模型微调技巧,让读者能够根据自己的需求对模型进行定制化调整,生成符合特定风格、主题或要求的图像。范围涵盖了从基础概念到实际操作,从理论原理到项目实战的全方位内容,旨在为读者提供一个系统且深入的学习指南。

大模型应用工坊 950

YOLO11涨点优化:半监督学习 | 结合Unbiased Teacher框架,利用海量无标签数据实现自训练暴力涨点

本文提出了一种基于Unbiased Teacher v2的半监督学习方法,用于解决YOLO11目标检测模型在标注数据不足时的性能瓶颈问题。通过分析纯监督YOLO11在小样本场景下的局限性,揭示了朴素自训练方法的三大陷阱:确认偏差、类别不均衡和噪声累积。文章详细解析了Unbiased Teacher框架的核心设计理念,包括教师-学生模型互监督机制、类别平衡损失和Burn-In预热策略,并重点介绍了v2版本针对无锚框检测器的优化。最后提出将Unbiased Teacher与YOLO11相结合的融合架构设计方案,

2601_95807009的博客 208

ClickHouse数据库性能测试报告

测试日期: 20223年3月15日至2023年3月20日。项目名称: ClickHouse数据库性能测试。

swpmvp的专栏 1136

PINNACLE:PINN自适应配点与实验点选择算法

PINNACLE算法通过引入动态权重机制,实现了PINN训练点选择的自适应优化。该算法基于对训练过程中不同区域学习需求变化的深入理解,设计了平滑过渡的权重函数,确保了模型在不同训练阶段能够优先学习最需要的区域。理论分析和实验结果均表明,PINNACLE不仅能够保证收敛性,而且能够显著提高PINN的性能。这一算法为物理信息神经网络的应用提供了重要支持,尤其适用于复杂PDE问题的求解。

VectorShift的博客 1137

4月22日丨【云数据库技术沙龙】技术进化,让数据更智能

MySQL 是毫无争议的最受欢迎的数据库,在现实世界中支持了无数大大小小的业务场景;ClickHouse则是最近几年增长最快速的开源分析型数据库,因为其对于性能的极致追求,使其即使是单机的情况下,也有着非常优秀的性能表现。而这也非常好的弥补了MySQL在复杂分析查询上的性能短板。这次,我们就一起来看看MySQL x ClickHouse会碰撞出怎样的火花。火山引擎资深研发工程师,负责ByteHouse云数仓版引擎计算模块。之前先后就职于网易、菜鸟集团、蚂蚁集团,有多年大数据计算引擎、分布式系统相关研发经历。

云原生智能数据管理平台 1372

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Clickhouse-file:基于Clickhouse-local实现Clickhouse高效写入数据

Clickhouse file模式、Clickhouse local生成Clickhouse file,通过rsync传输到Clickhouse服务器

u011618288的博客 2750

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ClickHouse缺点

ClickHouse缺点

lidepan的博客 3307

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

如何实现ClickHouse千万级QPS:高并发处理的终极性能优化指南

ClickHouse® 是一个免费的大数据分析型数据库管理系统,专门为高性能OLAP场景设计。在当今数据爆炸的时代,ClickHouse的高并发处理能力成为企业处理海量实时数据的核心利器。本文将深入探讨ClickHouse如何实现千万级QPS的性能优化,帮助您掌握这个列式数据库的并发处理秘诀。 ## ClickHouse高并发架构的核心优势 ClickHouse的列式存储架构是其高并发性能的基

gitblog_00162的博客 1050

万字长文详述ClickHouse的探索与实践

一、前言 京喜达技术部在社区团购场景下采用JDQ+Flink+Elasticsearch架构来打造实时数据报表。随着业务的发展 Elasticsearch开始暴露出一些弊端,不适合大批量的数据查询,高频次深度分页导出导致ES宕机、不能精确去重统计,多个字段聚合计算时性能下降明显。所以引入ClickHouse来处理这些弊端。 数据写入链路是业务数据(binlog)经过处理转换成固定格式的MQ消息,Flink订阅不同Topic来接收不同生产系统的表数据,进行关联、计算、过滤、补充基础数据等加工关联汇总成

qq_32445015的博客 2168

字节跳动数据平台技术揭秘:基于ClickHouse的复杂查询实现与优化

ClickHouse作为目前业内主流的列式存储数据库(DBMS)之一,拥有着同类型DBMS难以企及的查询速度。作为该领域中的后起之秀,ClickHouse已凭借其性能优势引领了业内新一轮分析型数据库的热潮。但随着企业业务数据量的不断扩大,在复杂query场景下,ClickHouse容易存在查询异常问题,影响业务正常推进。字节跳动作为国内最大规模的ClickHouse使用者,在对ClickHouse的应用与优化过程中积累了大量技术经验。本文将分享字节跳动解决ClickHouse复杂查询问题的优化思路与技术细节

m0_60025795的博客 2038

Clickhouse数据库八:搭建分片集群(高并发)

Clickhouse数据库八:搭建分片集群(高并发) 复本虽然能够提高数据的可用性,降低丢失风险,但是对数据的横向扩容没有解决。每台机子实际上必须容纳全量数据。 要解决数据水平切分的问题,需要引入分片的概念。 通过分片把一份完整的数据进行切分,不同的分片分布到不同的节点上。再通过Distributed表引擎把数据拼接起来一同使用。 Distributed表引擎本身不存储数据,有点类似于MyCat之于MySql,成为一种中间件,通过分布式逻辑表来写入、分发、路由来操作多台节点不同分片的分布式数据。 8.1 读

weixin_42796403的博客 3423

火山引擎:ClickHouse增强计划之“资源隔离”

相信大家都对大名鼎鼎的ClickHouse有一定的了解了,它强大的数据分析性能让人印象深刻。但在字节大量生产使用中,发现了ClickHouse依然存在了一定的限制。例如:缺少完整的upsert和delete操作多表关联查询能力弱集群规模较大时可用性下降(对字节尤其如此)没有资源隔离能力因此,我们决定将ClickHouse能力进行全方位加强,打造一款更强大的数据分析平台。后面我们将从五个方面来和大家...

芋艿V 406

Clickhouse优缺点及性能情况

优点: 1,为了高效的使用CPU,数据不仅仅按列存储,同时还按向量进行处理; 2,数据压缩空间大,减少IO;处理单查询高吞吐量每台服务器每秒最多数十亿行; 3,索引非B树结构,不需要满足最左原则;只要过滤条件在索引列中包含即可;即使在使用的数据不在索引中,由于各种并行处理机制ClickHouse全表扫描的速度也很快; 4,写入速度非常快,50-200M/s,对于大量的数据更新非常适用。 ...

lovewebeye的专栏 7万+

ClickHouse的高并发与负载测试

1.背景介绍 1. 背景介绍 ClickHouse 是一个高性能的列式数据库,主要用于实时数据处理和分析。它的高性能和实时性能使得它在各种场景中得到了广泛应用,如实时监控、日志分析、实时报表等。随着数据量的增加,ClickHouse 的性能瓶颈也会逐渐显现。因此,了解 ClickHouse 的高并发与负载测试是非常重要的。 本文将从以下几个方面进行阐述: 核心概念与联系 核心算法原理和具...

AI天才研究院 1291

Clickhouse数据写入机制

Clickhouse 写入机制

zxf126126的博客 3398

京东 ClickHouse 高可用实践

导读:京东OLAP采取ClickHouse为主Doris为辅的策略,有3000台服务器,每天亿次查询万亿条数据写入,广泛服务于各个应用场景,经过历次大促考验,提供了稳定的服务。本文介绍了ClickHouse在京东的高可用实践,包括选型过程、集群部署、高可用架构、问题和规划。 01 应用场景和选型 京东数据分析的场景非常多,在交易、流量、大屏、用户分析和算法等多场景中采用到了OLAP技术。那么在应用中有遇到什么样的难点,应对这些问题如何做的技术选型和最终方案呢? 1.京东OLAP的场景的难..

qq_41466440的博客 2282

ClickHouse最大QPS到底咋估算?

是用于分析的OLAP数据库,因此典型的使用场景是处理相对较少的请求 — 从每小时几个到每秒几十甚至几百个不等 — 但会影响到大量数据(几GB/数百万行)。但是在其他情况下,它的表现如何?让我们尝试用大量小请求来测试ClickHouse如何处理。这将帮助我们更好地了解可能的使用场景范围和限制。

JavaEdge全是干货的技术号 2079
上一篇: 服务端自定义生成PDF的几种方案
下一篇: 架构应该如何来理解?
公众号-芋道源码
博客等级 码龄10年 1634粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值