使用 esrally race 测试 Elasticsearch 性能:实践指南

在 Elasticsearch 性能优化和容量规划中,使用 esrally 进行基准测试是官方推荐的方式。通过 esrally race 命令,您可以针对不同的数据集与挑战类型,对 Elasticsearch 集群进行精确的性能评估。本文将简要介绍常用的数据集与挑战类型,并详细解析命令参数,然后展示测试结果分析和最终总结。


一、不同数据集与挑战类型简介

数据集(Tracks):

  1. geonames
    • 数据特性:地理位置相关信息(城市名、坐标、国家代码等),字段较为复杂。
    • 场景适用:地理查询、基于位置的检索和分析。
  2. http_logs
    • 数据特性:仿真 HTTP 访问日志的半结构化数据,字段较少、文本为主。
    • 场景适用:日志分析、全文搜索、可视化检索。

挑战类型(Challenges):

  1. append-no-conflicts-index-only
    • 特点:仅对集群进行数据写入(索引)操作,无查询。
    • 场景:高写入吞吐场景,如日志持续入库。
  2. 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

参数解析:

  1. --pipeline=benchmark-only

    使用已存在的 Elasticsearch 集群进行测试,不启动新的测试集群。

  2. --target-hosts=<ES_CLUSTER_IP>:9200

    指定目标集群的地址与端口。可使用内网 IP 或公网 IP,需根据实际情况替换。

  3. --track-path=~/.rally/benchmarks/tracks/default/<DATASET>

    指定数据集(如 geonameshttp_logs)的轨迹路径。

  4. --client-options="basic_auth_user:<USERNAME>,basic_auth_password:<PASSWORD>"

    配置客户端认证信息。如果 Elasticsearch 开启了安全认证,请替换为真实用户名与密码;未开启则可忽略此参数。

  5. --challenge=<CHALLENGE_TYPE>

    选择测试挑战类型,如 append-no-conflicts-index-onlyappend-no-conflicts

  6. --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,但更能模拟地理复杂查询的真实情况,对于地理搜索场景更具参考价值。

四、总结

通过合理搭配数据集(如 geonameshttp_logs)和挑战类型(如 append-no-conflictsappend-no-conflicts-index-only),您可以全面评估 Elasticsearch 集群在不同业务场景下的性能表现。生成的测试报告(如 CSV 格式)有助于直观了解吞吐量、延迟和错误率,并为后续集群优化提供指导。

在实际生产中,您可根据业务需求选择最符合场景的数据集与挑战类型,不断迭代测试与优化,最终提升 Elasticsearch 的服务质量与用户体验。


如有进一步问题或建议,欢迎留言讨论!

相关推荐
阿星AI工作室3 小时前
刘润年中大课笔记:一句话说清AI落地之战的本质
大数据·人工智能·创业创新·商业
不仙5206 小时前
VMware Workstation 26.0.0 在 Ubuntu 24.04 (内核 6.17.0) 上的安装与内核模块编译问题
linux·ubuntu·elasticsearch
189228048616 小时前
NY352固态MT29F32T08GWLBHD6-24QJ:B
大数据·服务器·人工智能·科技·缓存
不开大的凯20777 小时前
麦当秀AiPPT战略转向:从SaaS订阅迈向Token经济,AI办公定价模式迎来新探索
大数据·人工智能
程序鉴定师7 小时前
西安小程序制作的可靠选择与发展前景
大数据·小程序
黎阳之光7 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
qziovv8 小时前
Git 回退场景
大数据·git·elasticsearch
ZeroNews内网穿透9 小时前
面向 AI 协作的本地客户端能力:ZeroNews Agent Skills
大数据·人工智能·elasticsearch
SelectDB9 小时前
Agent 时代,为什么传统的可观测方案不适用了?
大数据·数据库·数据分析
Elastic 中国社区官方博客9 小时前
快 12 倍的 Elasticsearch 向量索引:使用 GPU 和 CPU 分层部署 NVIDIA cuVS
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·nvidia