clickhouse最佳实践(一):clickhouse千亿级日志系统单机到集群架构演进历程

clickhouse千亿级日志系统单机到集群架构演进历程

  • 1. 初始阶段:单机部署
  • 2. 使用代理层
  • 3. 集群设计
  • 4. 数据迁移
  • 5. 监控和维护
  • 6.集群横向扩展

最佳实践系列文章持续完善中, 记录了业务系统从碰到瓶颈到迭代的过程

1. 初始阶段:单机部署

针对ClickHouse(以下简称CK)单机的优化过程,通常包括以下几个方面,以确保在非分布式环境中达到最佳性能:

1). 硬件优化

  • 内存:尽可能多的内存对CK有帮助,因为它能缓存查询的数据块。确保有足够的内存,尤其是当数据量较大时。

  • 磁盘:优先选择SSD,以提高数据读取和写入速度。此外,CK对文件系统的选择敏感,通常推荐选择xfs或ext4。

  • CPU:CK对CPU多核的支持良好,多核CPU能显著提高并发查询的处理能力。

2). 配置优化 【clickhouse最佳实践(二):clickhouse单机性能优化】

  • max_threads:根据实际CPU核数,调整max_threads,建议设置成与CPU核心数相同或稍高的值。

  • max_block_size:增大max_block_size的值以提高查询的吞吐量,但如果内存有限则需适量调整。

  • max_memory_usage:针对内存进行限制,防止因数据量过大导致内存溢出。可以通过设置max_memory_usage控制单次查询的最大内存使用。

  • max_partitions_to_read:在分区读取时,控制最大可读分区数,从而避免数据量大的查询引起卡顿或过载。

3). 数据表结构优化 【clickhouse最佳实践(二):clickhouse单机性能优化】

  • 列式存储:确保使用列式存储(CK默认),这种存储方式在数据量大的查询中能显著提高性能。

  • 分区设计:合理设计分区键(如按时间或业务逻辑),可以有效减少扫描的数据量,提高查询效率。

  • 主键和排序键:选择合适的主键和排序键,避免全表扫描。排序键能够帮助CK加快特定字段的查询速度。

  • 物化视图(Materialized Views):对于频繁查询的聚合结果,可以使用物化视图,减少查询时间。

4). 数据管理和清理

  • 分区管理:定期清理旧分区(如按时间分区),以减少表数据量,避免无关数据对性能的影响。

  • 数据压缩:CK支持多种压缩算法,可以使用zstd或lz4提高数据存取效率。压缩可以显著减少磁盘占用和I/O负载。

5). 查询优化【clickhouse最佳实践(二):clickhouse单机性能优化- - -持续完善中】

  • 查询方式优化:尽量使用预聚合数据,避免复杂的实时计算,利用条件过滤减少数据读取量。

  • 设置查询超时:避免长时间运行的查询拖垮性能,比如可以限制查询的max_execution_time。

  • 避免低效函数和操作:避免对列数据频繁使用LIKE等低效操作,可以使用匹配表达式或正则替代。

6). 监控与调试【clickhouse最佳实践(二):clickhouse单机性能优化- - -持续完善中】

  • 系统监控:使用ClickHouse自带的系统表如system.metrics,system.events,监控查询的资源占用情况。

  • Profile分析:通过分析查询的Profile日志,找到瓶颈点,改进查询语句和表结构设计。

CK单机优化需要结合具体的硬件资源和业务需求,定期监控和调整系统配置以达到最佳性能。

2. 使用代理层

  • 搭建代理层:在原有单机的基础上添加一个代理层(如: Nginx 或 CkProxy【官方的ck代理】),用于后续的负载均衡。【nginx负载均衡策略】
  • 配置代理:在代理层上配置后端节点的负载均衡策略,以便未来的集群扩展。

3. 集群设计

【集群规划方法论】
【clickhouse最佳实践(三):Clickhouse集群模式读写方案- - -持续完善中】

  • 节点配置:设计多个 ClickHouse 实例,每个实例运行在独立的机器上。
  • Shard 和 Replica:根据业务需求设计合适的分片(Shard)和复制(Replica)策略,确保数据高可用。例如,可以设置 3 个 shard,每个 shard 3 个 replica。
  • 数据分配:考虑使用 Repartition 或者 Distributed 表引擎将数据均匀分配到不同的节点。

4. 数据迁移

【clickhouse最佳实践(四):Clickhouse单机到集群模式数据迁移- - -持续完善中】

社区的一些迁移工具:clickhouse-copier 、clickhouse-mysql-data-reader

  • 迁移工具:使用 ClickHouse 的复制功能(如 CREATE TABLE ... AS SELECT)进行数据迁移。
  • 双写策略:在过渡期间实现双写策略,确保新数据可以在新集群中被写入。

5. 监控和维护

[运维维度优化、1中的监控主要是业务维度优化]

  • 监控提升:逐步升级监控系统,使用 Grafana 和 Prometheus 等工具监控集群状态和性能指标。
  • 调节参数:根据监控数据对 ClickHouse 的配置参数进行调整,优化查询性能。

6.集群横向扩展

【clickhouse最佳实践(四):Clickhouse单机到集群模式数据迁移- - -持续完善中】

  • 弹性扩展:根据业务负载和数据量的变化,灵活添加或移除节点,实现弹性扩展。
  • 高可用设计:实现故障转移(Failover)机制,以增强集群的稳定性。

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

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

相关文章

ZeroNL2SQL:零样本 NL2SQL

发布于:2024 年 10 月 30 日 星期三 #RAG #NL2SQL # Zero-Shot 自然语言到 SQL(NL2SQL)的转换是一个重要的研究领域,它允许非技术用户轻松访问和分析数据,在商业智能、数据分析等领域具有广泛的应用前景。然而&#x…

前端部署指南:手把手教你部署 Vue 项目

​🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vue篇专栏内容:Vue-部署项目 前言 嗨喽伙伴们大家好,我是依旧青山。作为一名前端开发工程师&#xff…

usb外设枚举不到怎么查

明明内核配置了cdc_acm,dmesg | grep acm也有,lsusb却看不到设备。 排查思路: 主机端: 1、设备树是否使能。 2、主模式和从模式是否配置正确。 设备端: 设备端有条件的话可以插入其它设备看,或者复位…

Vivo开奖了,劝退价。。

vivo 也开奖了,不过有小伙伴反馈是个劝退价,甚至不如隔壁的 oppo,要说这两家也是渊源颇深,一家是绿厂,一家是蓝厂,高管也都是早期步步高出来的。 给大家盘一下开奖的信息,方便大家横向做个对比&…

Python 的 Pygame 库来开发一个游戏

import pygame import random# 初始化 Pygame pygame.init()# 设置屏幕大小 screen_width 800 screen_height 600 screen pygame.display.set_mode((screen_width, screen_height))# 设置标题 pygame.display.set_caption("飞机大战")# 加载图片 player_img pyga…

WPF+MVVM案例实战(八)- 自定义开关控件封装实现

文章目录 1、案例运行效果2、项目准备2、功能实现1、控件模板实现2、控件封装1、目录与文件创建2、各文件功能实现3、开关界面与主窗体菜单实现1、开关界面实现2、主窗体菜单实现4、源代码获取1、案例运行效果 2、项目准备 打开项目 Wpf_Examples,新建ToggleButtonWindow.xma…

【深度学习中的注意力机制10】11种主流注意力机制112个创新研究paper+代码——交叉注意力(Cross-Attention)

【深度学习中的注意力机制10】11种主流注意力机制112个创新研究paper代码——交叉注意力(Cross-Attention) 【深度学习中的注意力机制10】11种主流注意力机制112个创新研究paper代码——交叉注意力(Cross-Attention) 文章目录 【…

安宝特案例 | AR技术在院外心脏骤停急救中的革命性应用

00 案例背景 在院外心脏骤停 (OHCA) 的突发救援中,时间与效率直接决定着患者的生命。传统急救模式下,急救人员常通过视频或电话与医院医生进行沟通,以描述患者状况并依照指令行动。然而,这种信息传递方式往往因信息不完整或传递延…

测试自动化工具的横向对比

MicroAgent:这个AI智能体一键写代码并且自动测试!它比 Aider 更好吗? 待研究:https://blog.csdn.net/gitblog_00054/article/details/139541862 playright:这是一个python驱动的自动化框架,部署简单&#…

第八天: C语言深度探索:指针与函数的奥秘

1 字符指针与字符串处理 字符指针与数组的关系 在C语言中,字符串可以被视为字符数组。数组名可以看作是指向其第一个元素的指针。因此,我们可以使用相同类型的指针来访问数组中的每个元素。这种对应关系使得字符指针在处理字符串时显得特别方便。 c …

C++初阶——类与对象(上篇)

一、写在前面 类与对象是C不同于C语言的一个板块,内容很多,笔者把这部分分为三篇博客来讲解,希望能够帮助各位读者更容易地理解这些知识点。弄清楚这一部分之后,C就算是成功入门了。 二、面向过程和面向对象 C语言就是典型的面向…

Java如何实现PDF转高质量图片

大家好,我是 V 哥。在Java中,将PDF文件转换为高质量的图片可以使用不同的库,其中最常用的库之一是 Apache PDFBox。通过该库,你可以读取PDF文件,并将每一页转换为图像文件。为了提高图像的质量,你可以指定分…

论文略读:OneChart: Purify the Chart Structural Extraction via One Auxiliary Token

2024 旷视的work 图表解析模型 1 背景 对于之前的视觉语言模型,论文认为其有两点不足需要改进: 需要充分训练一个真正会看 chart 的 vision encoder单纯对文本输出算交叉熵损失,并不是最优的(如上图所示,当ground-tr…

STM32CubeMX学习(三) SPI+DMA通信

STM32CubeMX学习(三) SPIDMA通信 一、简介二、新建STM32CubeMX项目并使用外部时钟三、SPI3配置四、相关代码五、测试 一、简介 本文将基于STM32F103RCT芯片介绍如何在STM32CubeMXKEIL5开发环境下进行SPIDMA通信。 操作系统:WIN10 x64硬件电…

iOS静态库(.a)及资源文件的生成与使用详解(OC版本)

引言 iOS静态库(.a)及资源文件的生成与使用详解(Swift版本)_xcode 合并 .a文件-CSDN博客 在前面的博客中我们已经介绍了关于iOS静态库的生成步骤以及关于资源文件的处理,在本篇博客中我们将会以Objective-C为基础语言…

Python爬虫:在1688上“拍立淘”——按图索骥的奇妙之旅

想象一下,你是一名古代的侦探,手中握着一张神秘的藏宝图,在1688的茫茫商品海洋中寻找与之匹配的宝藏。今天,我们将一起化身为代码界的“拍立淘”专家,使用Python爬虫技术,通过API接口按图搜索商品。准备好你…

如何在小红书发布笔记时显示外地IP地址

小红书平台在发布笔记时显示IP地址可能是由于网络爬虫或者某些技术手段抓取数据时所导致的。为了保护用户隐私和安全,显示外地IP地址,可以尝试以下几种方法: 1.检查发布环境: 确保你是在一个安全、可信的网络环境下发布笔记&…

Linux中查询Redis中的key和value(没有可视化工具)

1.进入redis安装目录 进入redis安装目录,找到redis-cli(redis的客户端) 2.登录redis客户端 登录redis的客户端,格式:redis-cli -h [host] -p [port] -a [password],懂的都懂!!! ./redis-cli -h 192.168.8.101 -p 6380 -a xxxx登录成功后就这样子 3.查看redis中所有的key和…

Unity Editor 快速移动资源

Editor 快速移动资源 🍔使用场景🌭功能 🍔使用场景 一般想要移动一个资源到另一个目录的办法是选中资源拖拽过去, 但在一个比较大的项目中你得一直拖啊拖直到找到那个目录 🤯。 使用本插件就可以省去拖拽的步骤&#…

特斯联巨亏数十亿:毛利率剧烈波动下滑,高管动荡引发关注

《港湾商业观察》施子夫 近期,重庆特斯联智慧科技股份有限公司(以下简称,特斯联)递表港交所,联席保荐机构中信证券和海通国际。 此番闯关港交所,特斯联三年半巨亏超70亿元,公司何时能扭亏为盈…