我是靠谱客的博主 斯文铅笔,最近开发中收集的这篇文章主要介绍ClickHouse插入频繁报错优化频繁写入ClickHouse报错原因实时写入引入缓存buffer离线服务使用预构集群ClickHouse配置优化,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

初次使用ClickHouse,基本都会碰到如下图中too many parts的报错。本文将具体介绍报错原因和优化方案。
在这里插入图片描述

频繁写入ClickHouse报错原因

在这里插入图片描述

如上图所示,clickhouse操作数据的最小操作单元是block,每次写入,都会按照zookeeper记录的唯一自增的blockId,按照PartitionId_blockId_blockId_0生成data parts,也就是小文件,然后后台会有merge线程,不定时(分钟级别)的将多个小文件进行合并,生成PartitionId_MinBlockNum_MaxBlockBum_Level的文件,未达到data parts最小rows或者大小限制前,会持续merge,每次merge的耗时大概5分钟左右。由于merge线程池是固定的,默认32,所以如果插入过于频繁,merge压力过大,处理不了,就会出现too many parts的报错。

实时写入引入缓存buffer

基于实时清洗,如果延时要求高,可以使用redis做缓存,根据时间窗口期和固定写入阈值(针对波动大的可以按照二次指数平滑函数去确定阈值)进行写入与否的判断;如果能接受一定的时延,可以使用flink的窗口去做。

在这里插入图片描述

离线服务使用预构集群

离线导入的数据量一般比较大,可以基于spark调度任务,预先进行数据的shuffle和排序,然后写入预构集群,这样可以提前merge成data parts,然后通过remote推送到正式的ClickHouse集群,这样可以减少正式集群的merge压力,同时达到读写分离。
在这里插入图片描述

ClickHouse配置优化

ClickHouse存储方式优化

ClickHouse默认Wide,我们可以针对业务场景特点和数据量,对于一定数据量(条数&大小两个方面)以下,选择Compact,这样可以减少merge压力和时间,针对超过的使用wide。
在这里插入图片描述

调大后台Merge线程池数量

通过backbackground_pool_size调整merge线程大小,默认是32,这个结合ClickHouse服务器进行适当调整,不宜过大

最后

以上就是斯文铅笔为你收集整理的ClickHouse插入频繁报错优化频繁写入ClickHouse报错原因实时写入引入缓存buffer离线服务使用预构集群ClickHouse配置优化的全部内容,希望文章能够帮你解决ClickHouse插入频繁报错优化频繁写入ClickHouse报错原因实时写入引入缓存buffer离线服务使用预构集群ClickHouse配置优化所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部