ClickHouse与Elasticsearch压测实践
字数 2251 2025-08-12 11:34:19
ClickHouse与Elasticsearch性能压测实践教学文档
1. 需求分析
1.1 压测对象分析
ClickHouse简介
- 真正的列式数据库管理系统(DBMS)
- 数据始终按列存储,包括矢量(向量或列块)执行
- 采用"矢量化查询执行"降低数据处理开销
Elasticsearch简介
- 开源的分布式、RESTful风格的搜索和数据分析引擎
- 底层基于Apache Lucene
- 特点:
- 分布式实时文档存储
- 每个字段可被索引与搜索
- 支持PB级结构化/非结构化数据
- 可扩展至上百个服务节点
压测目的
- 验证ClickHouse和Elasticsearch在复杂业务查询场景下的抗压能力
- 为双十一大促活动峰值业务稳定性做准备
- 发现性能瓶颈并进行针对性优化
1.2 压测目标
选择接口原因
- 接口
queryOBBacklogData复杂度高,包含5次查询:- 越库信息-待越库件数&待越库任务数
- 集合任务信息-待分配订单
- 拣货信息-待拣货件数&待拣货任务数
- 分播信息-待分播件数&待分播任务
- 发货信息-待发货件数
查询数据量
- 待越库信息:720,817行
- 待分配订单:153,118行
- 待拣货信息:2,673,536行
- 待分播信息:1,448,149行
- 待发货信息:99,591行
2. 测试环境准备
- 使用与线上完全一致的环境配置
- 确保性能压测结果具有参考价值
3. 监控工具准备
-
JVM监控:http://origin.jd.com/
- 监控JVM状态
- 方法级别监控(秒级支持)
-
异常分析:http://console.jex.jd.com/
- 异常堆栈监控
- 火焰图监控
- 线程堆栈分析
-
数据库监控:http://x.devops.jdcloud.com/
- 查看ClickHouse/Elasticsearch各节点CPU使用率
-
服务器监控:http://dashboard.fireeye.jdl.cn/
- 监测应用服务器CPU/内存使用率
4. 压测执行及分析
4.1 压测工具
- Forcebot:http://forcebot.jd.com
- 性能测试平台
- 支持同步/异步/集合点等多种发压模式
- 文档:http://doc.jd.com/forcebot/helper/
4.2 压测数据设计
关键名词解释
-
DBCP:数据库连接池,Apache项目
- 预先建立连接放在内存中
- 应用程序从连接池申请/归还连接
- 实现连接复用,减少资源消耗
-
maxTotal:连接池中总连接的最大数量(默认8)
-
max_thread:ClickHouse处理SQL请求的最大线程数(默认等于服务器核心数)
-
coordinating:ES协调节点数
- 负责请求转发和响应处理
- 执行轻量级操作
-
数据节点:ES存储索引数据的节点
- 执行文档增删改查和聚合操作
- 对CPU/内存/IO要求高
ClickHouse压测配置
- 数据服务:32C128G 6节点2副本
- 应用服务器:4核8G 2台
- maxTotal=16
发现问题:
- 并发用户数增加至8后,ClickHouse CPU稳定在40-50%不再增加
- 应用服务器CPU稳定在25%
- 原因是bigdata dbcp默认最大线程数为8
调整后测试:
- 设置maxTotal=50
- 调整max_thread不同值,保持数据库节点CPU使用率约50%
Elasticsearch压测配置
- 数据服务:32C128G 6节点2副本
- 应用服务器:4核8G 2台
测试指标调整:
-
coordinating=2,数据节点=4,poolSize=400
- 发现coordinating节点CPU达51.69%,负载均衡受限
-
coordinating=4,数据节点=5,poolSize=800
- 发现CPU使用率约40%时上不去
- activeCount已达797,需增加poolSize
-
coordinating=4,数据节点=5,poolSize=1200
- coordinating节点仍需扩容
发现问题:
- bigdata应用线程池最大线程数8成为瓶颈
- warehouse集群协调节点配置低
- clickhouse-jdbc JavaCC解析SQL效率低
4.3 结果分析
测试结论
ClickHouse性能:
| max_thread | 最大TPS | TP99(ms) |
|---|---|---|
| 32 | 37 | 122 |
| 2 | 66 | 155 |
| 1 | 86 | 206 |
- 支持一定并发,可通过调整max_thread提高并发
- 并发能力与线程数设置相关
Elasticsearch性能:
- TPS:192
- TP99:3050ms
对比结论:
- Elasticsearch并发支持更好但响应速度慢
- ClickHouse响应速度快但并发能力较低
- ClickHouse足以支撑当前业务需求
优化建议
-
Elasticsearch优化:
- 对协调节点进行扩容
-
应用层优化:
- bigdata应用线程池最大线程数调高至200
- bigdata应用dbcp线程池maxTotal设置为50
- 读取配置文件工具类增加内存缓存
-
ClickHouse优化:
- 考虑优化clickhouse-jdbc的SQL解析效率