点击上方蓝字关注我们

 使用复制表之后,随着数据量的增加,zookeeper是瓶颈?这个问题估计任何一个对ch关注的人都会看到,当然解决这个问题是需要花费较大精力的。本次我主要想分享ch官方团队提出的减压方案,以及我们能通过什么手段来对zookeeper减压。

编译使用的clickhouse版本为: 19.5.3.1,本次测试比较主要以这个版本为主,鉴于clickhouse更新速度快,新版本的使用还需多查看release的更新日志。

问题描述

使用复制表之后,随着数据量的增加,zookeeper是瓶颈?这个问题估计任何一个对ch关注的人都会看到,当然解决这个问题是需要花费较大精力的。本次我主要想分享ch官方团队提出的减压方案,以及我们能通过什么手段来对zookeeper减压。

针对这个问题,最近接触到了头条关于这部分的优化,头条总结的是ch把zookeeper用成了目录服务,日志服务和协调服务,当znode达到几百万后,zk出现异常,常见是连接失败,此时有些表会出现readonly模式。

针对目录服务和日志服务随着数据量的增加会使得zookeeper的镜像快照增加,这个可以参见我的之前的文章关于zookeeper存储的分析。大厂对于该部分的处理是直接重新调整了ch使用zk的方式,用较小的数据量来完成复制表之间的数据一致性校验。这种与数据量无关的zk使用方式目前还不能接触到源码,当然也希望之后能有更多这方面源码的分享。

use_minimalistic_part_header_in_zookeeper

通过创建表指定use_minimalistic_part_header_in_zookeeper参数为1。

从ClickHouse release 19.1.6, 2019-01-24版本开始支持该配置,官方文档解释该配置可向上兼容,但是对于之前的版本应该谨慎使用该配置,减少了zk上的数据可能会导致replica表出现一些未知的错误。官方文档显示从ClickHouse release v20.1.2.4, 2020-01-22开始默认开启这个配置,当然你要退回19.1之前的版本就需要把这个关闭,不然会出现问题

Enable use_minimalistic_part_header_in_zookeeper setting for ReplicatedMergeTree by default. This will significantlyreduce amount of data stored in ZooKeeper. This setting is supported since version 19.1 and we already use it inproduction in multiple services without any issues for more than half a year. Disable this setting if you have a chanceto downgrade to versions older than 19.1.

首先创建本次使用的表,建表语句:

CREATE TABLE default.test_zookeeper(    `Id`    Int32,    `Code`  Int32,    `Type` String) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/default_test_zookeeper',           '{replica}') PARTITION BY Code ORDER BY (Id, Code)    SETTINGS index_granularity = 8192;

指定参数时的建表语句:

CREATE TABLE default.test_zookeeper_minimalistic(    `Id`   Int32,    `Code`  Int32,    `Type` String) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/default_test_zookeeper_minimalistic',           '{replica}') PARTITION BY Code ORDER BY (Id, Code) SETTINGS index_granularity = 8192,    use_minimalistic_part_header_in_zookeeper = 1;

创建之前的zookeeper的文件夹列表:

创建表之后的文件夹列表:

我们写入几条数据之后查看:

对比表test_zookeeper

replicas/parts部分有明显的不同,此处会减少部分数据,减少的部分主要为columns,主要存储的是当前版本的列名和列类型。

执行语句将其完成合并:

optimize table  default.test_zookeeper_minimalistic;optimize table  default.test_zookeeper;

合并之后,在两者表的log文件夹下都显示出了merge的日志,看来这部分内容还存在了zookeeper中。

如何减少日志在zk上的存储

例如:ReplicatedMergeTreeBlockOutputStream.cpp:

//    ops.emplace_back(zkutil::makeCreateRequest(//        storage.zookeeper_path + "/log/log-",//        log_entry.toString(),//        zkutil::CreateMode::PersistentSequential));LOG_DEBUG(log, "test : Replication log :  " << log_entry.toString() << " .");

我们注释该部分,并打印出该部分的内容,发现在zookeeper中的该部分log信息不再存储。

添加log,打印log_entry.toString()的数据:

2020.01.21 14:33:51.866180 [ 46 ] {86efe234-9691-4d95-b704-0b3b38adc3e2}  default.test_test (Replicated OutputStream): Replication log :  format version: 4create_time: 2020-01-21 14:33:51source replica: cluster01-01-01block_id: 202001_976485413081811652_2698895322145168848get202001_4_4_0 .

在源码中可以看到很多类似的写zk的操作,部分log的写入可以省略,但注意该部分只是在测试环境使用,还未经过大规模的验证。

在StorageReplicatedMergeTree中,我们能看到上述使用了配置后的存储的操作,此处就减少了写入的数据,直接写了parts而不是colums和checksums。

end

如果您想了解更多有关深度学习、机器学习、java开发、大数据等知识,欢迎关注我们的公众号,我会整理分享关于这些的有趣文章。

clickhouse官方文档_clickhouse分析:zookeeper减压概述相关推荐

  1. clickhouse官方文档_clickhouse分析:结合grafana和metabase完成监控和数据分析

    点击上方蓝字关注我们 " 关于clickhouse的监控和可视化界面,想必刚接触到ch的人是一头雾水,大厂往往会给ch集群定制各种监控和可视化分析,普通用户就需要我们自己寻求现成的开源工具, ...

  2. clickhouse官方文档_clickhouse分析:chproxy使用

    点击上方蓝字关注我们 " 什么是chproxy?从名字就能了解ch代表clickhouse,proxy为代理,即专为clickhouse使用的代理.在clickhouse集群中,每一台机器都 ...

  3. clickhouse官方文档_ClickHouse和他的朋友们(1)编译、开发、测试

    一次偶然的机会,和ClickHouse团队做了一次线下沟通,Alexey提到ClickHouse的设计哲学: The product must solve actual problem And do ...

  4. ClickHouse 官方文档摘录

    数据库创建: 延时引擎: 1 CREATE DATABASE testlazy ENGINE = Lazy(expiration_time_in_seconds); mysql引擎: 1 CREATE ...

  5. clickhouse分析:zookeeper减压概述

    前言:编译使用的clickhouse版本为: 19.5.3.1,本次测试比较主要以这个版本为主,鉴于clickhouse更新速度快,新版本的使用还需多查看release的更新日志. 问题描述 使用复制 ...

  6. dubbo官方文档_狂神说SpringBoot17:Dubbo和Zookeeper集成

    狂神说SpringBoot系列连载课程,通俗易懂,基于SpringBoot2.2.5版本,欢迎各位狂粉转发关注学习.未经作者授权,禁止转载 分布式理论 什么是分布式系统? 在<分布式系统原理与范 ...

  7. np.unique()官方文档分析以及举例

    np.unique()官方文档分析以及举例 1.1 官方文档及解读 numpy.unique 语法:numpy.unique(ar, return_index=False, return_invers ...

  8. ZooKeeper官方文档学习笔记03-程序员指南03

    我的每一篇这种正经文章,都是我努力克制玩心的成果,我可太难了,和自己做斗争. ZooKeeper官方文档学习笔记04-程序员指南03 绑定 Java绑定 客户端配置参数 C绑定 陷阱: 常见问题及故障 ...

  9. ZooKeeper官方文档学习笔记01-zookeeper概述

    纠结了很久,我决定用官方文档学习 ZooKeeper概述 学习文档 学习计划 ZooKeeper:分布式应用程序的分布式协调服务 设计目标 数据模型和分层名称空间 节点和短命节点 有条件的更新和监视 ...

最新文章

  1. 虚拟机为cenots配置网络
  2. HTML5的学习,各个标签的尝试
  3. session和cookie的区别和联系---转载
  4. DFS、栈、双向队列:CF264A- Escape from Stones
  5. 综合布线机房服务器维护,信息机房的综合布线系统维护
  6. Android 添加 *.arr
  7. 计算机网络运输层的概述,计算机网络_运输层
  8. C# Winform控件动态删除
  9. 谈现代企业中(一)菜鸟和大牛
  10. spring源码核心:DefaultListableBeanFactory
  11. linux下phylip软件构建NJ树,利用phylip构建进化树详解
  12. 数据分析需要学习哪些课程?
  13. samba介绍、搭建及坑
  14. 人工智能研究中心快递柜——代码分析六
  15. Python数据分析(五) —— 绘制直方图
  16. 1.3寸OLED SH1106 IIC驱动显示错误解决方法
  17. 古剑奇谭2打砺罂10分钟过的方法!
  18. Verilog训练笔记(2)——数据降速增宽
  19. opencv 改变光标_opencv编译方法
  20. myeclipse10下载问题

热门文章

  1. mysql 释放行锁_《深入精通Mysql(三)》深入底层Mysql各种锁机制(面试必问)...
  2. 没有富士康?外媒称苹果新款iPhone SE由和硕独家组装
  3. 华为nova 9 SE真机曝光:旗下首款一亿像素主摄 双环镜头吸睛
  4. 工信部:主要互联网企业开屏信息“关不掉”基本解决
  5. 2021北京民营企业百强榜单发布 美团、水滴等公司入选
  6. 苹果已招聘两名梅赛德斯前工程师 其中一人曾在保时捷工作近6年
  7. 三只松鼠现“两只老鼠”:卖废纸箱发家致富??
  8. Redmi Note 10配备NFC 3.0功能:首次支持封闭式门卡
  9. 中芯国际科创板上市发行价定为27.46元/股,募资或超500亿元
  10. 苹果支持安卓手机以旧换新,华为P30顶配最高才抵扣200元?