使用 esrally race 测试 Elasticsearch 性能:实践指南
在 Elasticsearch 性能优化和容量规划中,使用 esrally 进行基准测试是官方推荐的方式。通过 esrally race
命令,您可以针对不同的数据集与挑战类型,对 Elasticsearch 集群进行精确的性能评估。本文将简要介绍常用的数据集与挑战类型,并详细解析命令参数,然后展示测试结果分析和最终总结。
一、不同数据集与挑战类型简介
数据集(Tracks):
geonames
:- 数据特性:地理位置相关信息(城市名、坐标、国家代码等),字段较为复杂。
- 场景适用:地理查询、基于位置的检索和分析。
http_logs
:- 数据特性:仿真 HTTP 访问日志的半结构化数据,字段较少、文本为主。
- 场景适用:日志分析、全文搜索、可视化检索。
挑战类型(Challenges):
append-no-conflicts-index-only
:- 特点:仅对集群进行数据写入(索引)操作,无查询。
- 场景:高写入吞吐场景,如日志持续入库。
append-no-conflicts
:- 特点:同时进行数据写入和查询操作。
- 场景:读写混合场景,如搜索引擎、实时分析系统。
通过结合不同的数据集与挑战类型,您可以模拟多种现实场景。例如,使用 geonames + append-no-conflicts
来测试地理数据的读写混合性能,或使用 http_logs + append-no-conflicts-index-only
来评估日志高写入场景的吞吐量。
二、测试命令与参数解析
以下为一条典型的 esrally race
命令示例。请根据实际环境替换 <ES_CLUSTER_IP>
, <USERNAME>
, <PASSWORD>
与所需的数据集、挑战类型参数。
esrally race --pipeline=benchmark-only \--target-hosts=<ES_CLUSTER_IP>:9200 \--track-path=~/.rally/benchmarks/tracks/default/http_logs \--client-options="basic_auth_user:<USERNAME>,basic_auth_password:<PASSWORD>" \--challenge=append-no-conflicts \--report-file=~/result.csv \--report-format=csv
参数解析:
-
--pipeline=benchmark-only
使用已存在的 Elasticsearch 集群进行测试,不启动新的测试集群。 -
--target-hosts=<ES_CLUSTER_IP>:9200
指定目标集群的地址与端口。可使用内网 IP 或公网 IP,需根据实际情况替换。 -
--track-path=~/.rally/benchmarks/tracks/default/<DATASET>
指定数据集(如geonames
或http_logs
)的轨迹路径。 -
--client-options="basic_auth_user:<USERNAME>,basic_auth_password:<PASSWORD>"
配置客户端认证信息。如果 Elasticsearch 开启了安全认证,请替换为真实用户名与密码;未开启则可忽略此参数。 -
--challenge=<CHALLENGE_TYPE>
选择测试挑战类型,如append-no-conflicts-index-only
或append-no-conflicts
。 -
--report-file=~/result.csv
与--report-format=csv
将测试结果保存为 CSV 文件,便于后续数据分析、比对和存档。
三、测试结果分析
执行上述命令后,esrally 会产生一份 CSV 格式的报告文件(如 http_logs_result.csv
)。报告中常见的指标包括:
- 索引吞吐量 (Indexing Throughput):每秒成功写入的文档数。
- 查询吞吐量 (Query Throughput):每秒完成的查询请求数(仅在
append-no-conflicts
场景下有意义)。 - 延迟 (Latency):请求操作(索引或查询)从发出到响应的时间分布(如 50th 百分位、90th 百分位)。
- 错误率 (Error Rate):测试过程中操作失败的比例。
举例分析(示例数据并非真实测试结果):
数据集 | 挑战类型 | 索引吞吐量 (ops/s) | 查询吞吐量 (ops/s) | 延迟50th (ms) | 延迟90th (ms) | 错误率 (%) |
---|---|---|---|---|---|---|
geonames | append-no-conflicts-index-only | 5,000 | - | 10 | 15 | 0.0 |
geonames | append-no-conflicts | 4,000 | 1,500 | 12 (索引) | 20 (查询) | 0.0 |
http_logs | append-no-conflicts-index-only | 8,000 | - | 8 | 12 | 0.0 |
http_logs | append-no-conflicts | 6,500 | 2,000 | 10 (索引) | 18 (查询) | 0.0 |
从上表可见:
- 对于高写入场景(index-only),
http_logs
数据集因数据结构简单而获得更高的写入吞吐量。 - 对于混合场景(append-no-conflicts),
http_logs
也表现出较高的查询吞吐量和较低的延迟,适合日志分析类场景。 geonames
数据集在复杂查询下的吞吐量与延迟表现稍逊于http_logs
,但更能模拟地理复杂查询的真实情况,对于地理搜索场景更具参考价值。
四、总结
通过合理搭配数据集(如 geonames
与 http_logs
)和挑战类型(如 append-no-conflicts
与 append-no-conflicts-index-only
),您可以全面评估 Elasticsearch 集群在不同业务场景下的性能表现。生成的测试报告(如 CSV 格式)有助于直观了解吞吐量、延迟和错误率,并为后续集群优化提供指导。
在实际生产中,您可根据业务需求选择最符合场景的数据集与挑战类型,不断迭代测试与优化,最终提升 Elasticsearch 的服务质量与用户体验。
如有进一步问题或建议,欢迎留言讨论!
相关文章:
使用 esrally race 测试 Elasticsearch 性能:实践指南
在 Elasticsearch 性能优化和容量规划中,使用 esrally 进行基准测试是官方推荐的方式。通过 esrally race 命令,您可以针对不同的数据集与挑战类型,对 Elasticsearch 集群进行精确的性能评估。本文将简要介绍常用的数据集与挑战类型ÿ…...

OkHttp源码分析:分发器任务调配,拦截器责任链设计,连接池socket复用
目录 一,分发器和拦截器 二,分发器处理异步请求 1.分发器处理入口 2.分发器工作流程 3.分发器中的线程池设计 三,分发器处理同步请求 四,拦截器处理请求 1.责任链设计模式 2.拦截器工作原理 3.OkHttp五大拦截器 一&#…...

中国计算机学会计算机视觉专委会携手合合信息举办企业交流活动,为AI安全治理打开“新思路”
近期,《咬文嚼字》杂志发布了2024年度十大流行语,“智能向善”位列其中,过去一年时间里,深度伪造、AI诈骗等话题屡次登上热搜,AI技术“野蛮生长”引发公众担忧。今年9月,全国网络安全标准化技术委员会发布了…...

重生之我在异世界学编程之C语言:深入预处理篇(上)
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一、预处理的作用与流程…...

dolphinscheduler服务RPC框架源码解析(二)RPC核心注解@RpcService和@RpcMethod设计实现
1.工程目录 从3.2.1版本之后这个dolphinscheduler中的RPC框架工程就从原来的dolphinscheduler-remote工程重构到了dolphinscheduler-extract工程。 dolphinscheduler 父项目 dolphinscheduler-extract RPC服务项目 dolphinscheduler-extract-alert 监控告警服务RPC接口定义、…...

【从零开始入门unity游戏开发之——C#篇04】栈(Stack)和堆(Heap),值类型和引用类型,以及特殊的引用类型string
文章目录 知识回顾一、栈(Stack)和堆(Heap)1、什么是栈和堆2、为什么要分栈和堆3、栈和堆的区别栈堆 4、总结 二、值类型和引用类型1、那么值类型和引用类型到底有什么区别呢?值类型引用类型 2、总结 三、特殊的引用类…...

ARCGIS国土超级工具集1.2更新说明
ARCGIS国土超级工具集V1.2版本,功能已增加至47 个。在V1.1的基础上修复了若干使用时发现的BUG,新增了"矢量分割工具"菜单,同时增加及更新了了若干功能,新工具使用说明如下: 一、勘测定界工具栏更新界址点成果…...

暂停window11自动更新
window11 的自动更新功能,一方面在后台占用资源,容易导致电脑卡顿;另一方面,“更新并关机” 和 “更新并重启” 的设置令人极其反感。很多补丁兼容性很差,更新后极易引发电脑蓝屏、闪屏等意想不到的 bug。 1.winR打开运…...

Git简介和特点
目录 一、Git简介 二、Git特点 1.集中式和分布式 (1)集中式版本控制系统 (2)分布式版本控制系统 2.版本存储方式的差异 (1)直接记录快照,而非差异比较 3.近乎所有操作都是本地执行 一、Git简介 Git是目前世界上最先进的的分布式控制系统(没有之一…...
如何通过docker 部署minio,端口号为9105
通过Docker部署MinIO对象存储服务,并指定API端口为9105,可以按照以下步骤进行。我们将基于已有的资料来详细说明这一过程。 1. 准备工作 首先,确保你的系统上已经安装了Docker。如果没有安装,可以根据官方文档指导完成安装。接下…...
设置Qt程序开机自启动(windows版本)
前言 本文展示在windows环境下,通过代码实现更改系统注册表的方式来实现程序的开机自动启动。 一、注册表 需要更改的系统注册表为: HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run 二、代码演示 1.头文件 头文件autorun.h #ifndef …...

【HarmonyOS】鸿蒙获取appIdentifier,Identifier
【HarmonyOS】鸿蒙获取appIdentifier,Identifier 一、前言 三方后台需要填写的所谓appIdentifier,Identifier信息,其实对应鸿蒙应用的appID。 二、解决方案: 注意,模拟器获取data.signatureInfo.appIndentifer为空…...
【Rust自学】3.5. 控制流:if else
3.5.0. 写在正文之前 欢迎来到Rust自学的第三章,一共有6个小节,分别是: 变量与可变性数据类型:标量类型数据类型:复合类型函数和注释控制流:if else(本文)控制流:循环 通过第二章…...
美国信息学奥林匹克竞赛USACO 2024年12月比赛铜级问题1. 循环舍入-答案代码
题目见: USACO 2024年12月比赛铜级问题1. 循环舍入(USACO 2024 December Contest, Bronze Problem 1. Roundabount Rounding) 最简单的青铜级 亲测所有得分点通过哈! 下一篇会给解题分析哦! #include <iostream> using namespace std;…...

Llama3模型详解 - Meta最新开源大模型全面解析
📚 Meta最新发布的Llama3模型在开源社区引起广泛关注。本文将全面解析Llama3的技术特点、部署要求和应用场景。 一、模型概述 1. 基本信息 发布机构: Meta AI开源协议: Llama 2 Community License Agreement模型规格: 7B/13B/34B/70B训练数据: 2万亿tokens上下文长…...
2021-02-12 c++里面cin.sync()函数的意思
回复急~救救菜鸡吧,C用cin.clear()和cin.sycn()清空缓存区一直清不了!_编程语言-CSDN问答 标识符号为:goodbit 无错误 Eofbit 已到达文件尾 failbit 非致命的输入/输出错误可挽回 badbit 致命的输入/输出错误无法挽回 int a 0;cin >> a;if (cin.rdstate() i…...

下载红米Note 9 Pro5G对应的LineageOS代码下载及编译
构建 LineageOS 进入网站:Info about gauguin | LineageOS Wiki,点击:Build for yourself,里面有详细的教程,我这里就按照Note 9 Pro 5G来。 机器环境 Ubuntu环境为:20.04.6LinagesOS版本:21-…...
《探索 Caffe2 的 C++接口在移动设备上的性能优化之路》
在当今移动应用日益智能化的时代,将深度学习框架如 Caffe2 的 C接口应用于移动设备上已成为众多开发者的目标。然而,移动设备资源相对有限,如何优化其性能成为了关键挑战。 一、移动设备应用深度学习的现状与挑战 随着智能手机等移动设备的…...
1.编写一个程序,给定一个大写字母,要求用小写输出
思路:ascII码值 例如:A的ASCII码值为65,a的ASCII码值为97,不难发现,大小写字母之间的ascii值相差了32 #include <stdio.h> int main() {char c;scanf("%c",&c);printf("%c",c32);retu…...

条件随机场(CRF)详解:原理、算法与实现(深入浅出)
目录 1. 引言2. 什么是条件随机场?2.1 直观理解2.2 形式化定义 3. CRF的核心要素3.1 特征函数3.2 参数学习 4. 实战案例:命名实体识别5. CRF vs HMM6. CRF的优化与改进6.1 特征选择6.2 正则化 7. 总结与展望参考资料 1. 引言 条件随机场(Conditional Ra…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...

LINUX编译vlc
下载 VideoLAN / VLC GitLab 选择最新的发布版本 准备 sudo apt install -y xcb bison sudo apt install -y autopoint sudo apt install -y autoconf automake libtool编译ffmpeg LINUX FFMPEG编译汇总(最简化)_底部的附件列表中】: ffmpeg - lzip…...

Spring是如何实现无代理对象的循环依赖
无代理对象的循环依赖 什么是循环依赖解决方案实现方式测试验证 引入代理对象的影响创建代理对象问题分析 源码见:mini-spring 什么是循环依赖 循环依赖是指在对象创建过程中,两个或多个对象相互依赖,导致创建过程陷入死循环。以下通过一个简…...