初次使用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插入频繁报错优化相关推荐

  1. Linux下MySql插入汉字报错解决(/etc/my.cnf不存在)

    2019独角兽企业重金招聘Python工程师标准>>> Linux下MySql插入汉字报错解决(/etc/my.cnf不存在) 看了很多帖子,大多数是说修改my.cnf,如 http ...

  2. hibernate执行插入时候报错: IDENTITY_INSERT 设置为 OFF 时,不能为表 ‘user‘ 中的标识列插入显式值

    插入时会报错 @Id // 使用的hibernate 的自动增量,没有用数据库的自动增量型 @GeneratedValue(generator = "increment") @Ge ...

  3. mysql 繁体_mysql 插入繁体字报错?报错-问答-阿里云开发者社区-阿里云

    mysql 插入繁体字报错?报错 爱吃鱼的程序员 2020-06-22 14:09:16 87 @jfinal程序插入繁体字mysql的时候报错,数据库设置了utf8,但是依然报错,数据库,表,字段, ...

  4. MySQL插入汉字报错的解决方案

    MySQL插入汉字报错的原因是字符集的问题,MySQL默认使用的是Latin(拉丁文)字符集,可以在创建数据库时指定其字符集:CREATE DATABASE test DEFAULT CHARACTE ...

  5. php mysql 微信昵称_php 解决微信昵称emoji表情插入MySQL报错

    在PHP接受到微信用户昵称入库的时候报错 原因:utf-8 最大3个字节,而emoji占4个字节 解决办法: 1.修改mysql 数据库的字符集,改为utf8mb4,但是前提是MySQL的版本需要5. ...

  6. mysql timestamp 插入null报错_读MySQL 5.7文档11.2 Date and Time Data Types总结

    作者:魏新平,知数堂第5期MySQL实战班学员,第10期MySQL优化班学员,现任职助教. 读MySQL5.7文档11.2 Date and Time Data Types MySQL的时间类型分为D ...

  7. cmd mysql 报错_客户端cmd打开mysql,执行插入中文报错或插入中文乱码解决方案

    最近在制作一个安装包,需要安装的时候执行mysql脚本儿,做了一个批处理,但是发现总是执行到 插入中文的时候报错,或者插入中文是乱码. 网上查了好多资料,说是把编码改成GBK什么的,终究还是不成功. ...

  8. oracle插入时间报错,Oracle 插入时间时 报错:ORA-01861: 文字与格式字符串不匹配 的解决办法...

    一.写sql的方式插入到Oracle中 往oracle中插入时间  '2007-12-28 10:07:24' 如果直接按照字符串方式,或者,直接使用to_date('2007-12-28 10:07 ...

  9. mysql报错1241_flask内的mysql插入语句报错:1241, 'Operand should contain 1 column(s)

    view.py内的代码如下: -- c_location = request.form.getlist('c_location') connection = db.engine.connect() m ...

最新文章

  1. 生成服务器密码的shell脚本
  2. 程序员的魔法——用Masking GAN让100,000人都露出灿烂笑容
  3. 创建用户,并加入sudo组
  4. Mac下通过Anaconda安装Tensorflow
  5. oracle 11gR2 新增deinstall命令来卸载grid和database
  6. I2C设备驱动编写,struct i2c_device_id,struct i2c_driver,i2c_add_driver,i2c_register_board_info
  7. mysql系统搭建互备DB(双主)记录
  8. 多核对mysql好处_多核和MySQL性能
  9. UITextView(文本视图) 学习之初体验
  10. Photoshop操作秘籍
  11. Windows Server 2008 R2的教程36篇!
  12. Python线程安全的单例模式
  13. 考研政治---马克思主义基本原理概论---认识论
  14. 腾讯地图产业版 WeMap 官网正式发布
  15. 自监督学习经典之作:DINO
  16. lisp方格网法计算土方量_方格网法计算土方工程量
  17. 微信php页面你画我猜,微信小程序你画我猜
  18. Post请求,参数跟在url后面的问题
  19. Unity_ClickToShow_FadeInAndOut
  20. python爬虫技术如何挣钱?教你爬虫月入三万

热门文章

  1. mysql 5.6 不同步_MySQL5.6配置同步复制的新方法以及常见问题的解决方法
  2. python写自动化测试脚本常见报错_Appium自动化测试
  3. 电商 lamp java_搭建LAMP环境部署Ecshop电商网站
  4. 市场分析-全球与中国液态有机氢载体市场现状及未来发展趋势
  5. Linux 系统优化相关经验总结
  6. 计算机里看不到移动硬盘,我的电脑里看不到移动硬盘怎么处理呢?
  7. 去哪儿网支付系统架构演进全历程阅读心得
  8. iOS图片不失真拉伸方法
  9. 第九章 Wi-Fi Portal认证过程
  10. ncae的c语言编程高阶怎么考,NCAE考试科目.doc