# go-performance **Repository Path**: project-store-mark/go-performance ## Basic Information - **Project Name**: go-performance - **Description**: Kafka,Redis,ES,MQ性能测试工具集 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-07-06 - **Last Updated**: 2026-07-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # go-performance > 中间件性能与灾备测试工具集(Go 实现)—— 当前覆盖 **Redis Cluster 灾备切换**、**Elasticsearch 写入/查询性能**、**Kafka 生产/消费性能**、**RocketMQ 5.x (gRPC) 生产/消费性能**。 [功能特性](#功能特性) · [快速开始](#快速开始) · [工具一览](#工具一览) · [配置](#配置) · [文档](#文档) · [参与贡献](#参与贡献) --- ## 功能特性 - 🧪 **四类中间件**:Redis 集群灾备(failover)+ Elasticsearch 写入吞吐与查询延迟 + Kafka 生产/消费吞吐 + RocketMQ 5.x gRPC 生产/消费吞吐。 - 📊 **统一指标层**:每秒级时间序列、reservoir 分位数(p50/p95/p99)、错误率与错误类型分布,输出 `metrics.csv` / `summary.json` / `report.txt`。 - 🎯 **Redis 灾备**:实时检测节点宕机 / 副本提升(failover)/ 恢复,输出带时间戳的事件时间线 + 双口径 RTO(拓扑侧 + 流量侧)。 - ⚡ **ES 性能**:Bulk 批量索引吞吐 + term/match/range/bool+聚合 四种查询延迟,多索引、多节点写入全局唯一不重复。 - 📨 **Kafka 性能**:多节点生产/消费吞吐 + ack 延迟 + 端到端延迟,自动建 topic,支持**自定义消息体**(文件/内联 + `{seq}/{ts}/{ms}/{rand}` 占位符)。 - 🚀 **RocketMQ 性能**:gRPC 协议生产/消费吞吐(OMB 式指标),**多 topic、多消费组 fan-out、大并发、自定义消息体、消息大小范围随机、按时间执行**,5s 实时指标。 - 🔒 **安全优先**:ES/Kafka `--reset` 仅清理工具自有前缀的索引/topic,误删业务数据不可能发生;创建幂等、已存在自动复用。 - 🧩 **零外部基础设施**:不依赖 Prometheus/Grafana,CSV 可直接导入任意工具出图。 - 📦 **单二进制**:每个工具一个独立可执行文件,仅依赖官方客户端(`go-redis`、`go-elasticsearch`、`IBM/sarama`、`apache/rocketmq-clients`)。 --- ## 快速开始 ### 前置条件 - Go **1.22+**(项目使用 `math/rand/v2`;实测 go1.25) - 可达的目标中间件(Redis Cluster、Elasticsearch 8.x 或 Kafka) ### 编译 ```bash git clone go-performance cd go-performance go build ./... go test ./... ``` > 若本机 `go` 不在 PATH(如安装于 `C:\Program Files (x86)\Go\bin`),先 `export PATH="$PATH:/c/Program Files (x86)/Go/bin"`。 > 国内拉依赖慢时设置模块代理:`export GOPROXY=https://goproxy.cn,direct`。 **一键打包**(同时出 Windows + Linux 全部工具,文件名带时间戳): ```bash ./build.sh all # Linux / macOS / Git Bash → go-performance-<时间戳>.tar.gz .\build.ps1 -Target all # Windows PowerShell ``` 详见各工具文档的「编译(Windows / Linux 傻瓜式)」小节。 ### 跑起来 ```bash # Redis 灾备测试 go build -o redis-dr-test ./cmd/redis-dr-test ./redis-dr-test \ --nodes 192.168.1.162:6379,192.168.1.153:6379,192.168.1.160:6379 \ --password 'YOUR_PASSWORD' --ratio 2:8 --warmup 1m # ES 写入/查询性能测试 go build -o es-perf ./cmd/es-perf ./es-perf \ --es-url http://192.168.1.100:9200 --es-user elastic --es-pass 'YOUR_PASSWORD' \ --num-indices 3 --docs 1000000 --write-duration 60s --query-duration 30s # Kafka 生产/消费性能测试 go build -o kafka-perf ./cmd/kafka-perf ./kafka-perf \ --brokers 192.168.1.100:9092,192.168.1.101:9092,192.168.1.102:9092 \ --producers 3 --consumers 3 --messages 1000000 ``` ```bash # RocketMQ 5.x (gRPC) 生产/消费性能测试 go build -o rocketmq-perf ./cmd/rocketmq-perf ./rocketmq-perf \ --endpoint 192.168.1.100:8081 \ --topic test_yyq_1,test_yyq_2 --group test_yyq_group_1,test_yyq_group_2 \ --msg-size-min 128 --msg-size-max 1024 \ --messages 0 --produce-duration 60s --consume-duration 60s \ --producers 4 --consumers 4 ``` 更详细的安装、首次运行、报告解读见 [📖 Getting Started](docs/getting-started.md)。 --- ## 工具一览 | 工具 | 二进制 | 测试内容 | 详细文档 | | --- | --- | --- | --- | | Redis 集群灾备 | `cmd/redis-dr-test` | 主节点故障自动切换:RTO、节点宕机/恢复时间线、QPS 与延迟恢复曲线 | [docs/redis-dr-test.md](docs/redis-dr-test.md) | | Elasticsearch 性能 | `cmd/es-perf` | Bulk 写入吞吐 + term/match/range/bool 查询延迟 | [docs/es-perf.md](docs/es-perf.md) | | Kafka 性能(一体) | `cmd/kafka-perf` | 生产→消费一条龙:吞吐 + ack 延迟 + 端到端延迟,自定义消息体 | [docs/kafka-perf.md](docs/kafka-perf.md) | | Kafka 生产端 | `cmd/kafka-perf-producer` | **只生产**,可与消费端同时跑、多节点各起一份 | [docs/kafka-perf.md](docs/kafka-perf.md#生产端消费端独立执行) | | Kafka 消费端 | `cmd/kafka-perf-consumer` | **只消费**,同 `--group` 多节点负载均衡 | [docs/kafka-perf.md](docs/kafka-perf.md#生产端消费端独立执行) | | RocketMQ 性能(一体) | `cmd/rocketmq-perf` | 生产→消费一条龙(多 topic/多消费组/大并发/按时间/随机大小),OMB 指标 | [docs/rocketmq-perf.md](docs/rocketmq-perf.md) | | RocketMQ 生产端 | `cmd/rocketmq-perf-producer` | **只生产**,可与消费端同时跑、多节点各起一份 | [docs/rocketmq-perf.md](docs/rocketmq-perf.md#生产端消费端独立执行) | | RocketMQ 消费端 | `cmd/rocketmq-perf-consumer` | **只消费**,同 `--group` 多节点负载均衡,不同 group fan-out | [docs/rocketmq-perf.md](docs/rocketmq-perf.md#生产端消费端独立执行) | ### 生产端 / 消费端独立执行(可同时跑、多节点) Kafka 与 RocketMQ 各拆出独立的 **生产端** 和 **消费端** 二进制:两者**互不依赖、可同时启动**,也便于在**多台机器上各起一份**做分布式压测(生产端不需要 `--group`,消费端必需)。 ```bash # 机器 A:RocketMQ 生产端(持续 60s) ./rocketmq-perf-producer --endpoint 192.168.1.100:8081 \ --topic test_yyq_1,test_yyq_2 --messages 0 --produce-duration 60s --producers 4 # 机器 B(同时):RocketMQ 消费端 ./rocketmq-perf-consumer --endpoint 192.168.1.100:8081 \ --topic test_yyq_1,test_yyq_2 --group test_yyq_group_1 --consume-duration 60s --consumers 4 ``` - **同时执行**:生产端和消费端是独立进程,并行跑即可(无需先生产后消费),最接近线上稳态。 - **多节点**:在 N 台机器上运行**同一命令**即可线性扩压;消费端用**相同 `--group`** 让分区在节点间负载均衡,用**不同 group** 做 fan-out 广播。 - **端到端延迟**:消息内嵌生产时间戳,消费端据此算延迟;多节点请保证各机器 **NTP 时钟同步**。 ### Redis 灾备测试 — 一句话 工具**只测量、不注入故障**:预热 → 稳态压测期间你**手动杀掉一个 master**,工具实时打印 `[宕机]/[切换]/[恢复]` 事件并记录退化指标;`Ctrl+C` 生成报告(节点时间线 + RTO + 基线/故障/恢复对比)。 ### ES 性能测试 — 三个自动阶段 1. **build**:bulk 灌 `--docs` 条文档建数据集(供查询命中) 2. **index**:写吞吐测试 `--write-duration` → docs/s + 批次延迟分位数 3. **query**:term/match/range/bool 各跑 `--query-duration` → 分类型查询延迟 ### Kafka 性能测试 — 三个自动阶段 1. **setup**:确保 topic 就绪(不存在则建、已存在复用、`--reset` 删后重建) 2. **produce**:`--producers` 个生产者并发发 `--messages` 条 → 吞吐 + ack 延迟 3. **consume**:`--consumers` 个消费者组实例排空 → 吞吐 + 端到端延迟 支持 **自定义消息体**(`--msg-file` / `--msg-body`,含 `{seq}/{ts}/{ms}/{rand}` 占位符)。 --- ## 配置 四个工具均支持 **命令行参数** 与 **key:value 配置文件**(命令行覆盖文件)。完整参数表见 [📖 配置参考](docs/configuration.md),示例文件: - Redis:[config.example.yaml](config.example.yaml) - ES:[config.example.es.yaml](config.example.es.yaml) - Kafka:[config.example.kafka.yaml](config.example.kafka.yaml) - RocketMQ:[config.example.rocketmq.yaml](config.example.rocketmq.yaml) ```bash cp config.example.es.yaml config.es.yaml # 改完用 -config 载入 ./es-perf -config config.es.yaml ``` --- ## 输出 每次运行在 `out` 目录(默认 `report-/`)产出: | 文件 | 内容 | | --- | --- | | `metrics.csv` | 每秒一行指标(phase、ops、错误率、p50/p95/p99、状态、错误类型) | | `summary.json` | 基线/故障/恢复、RTO、错误类型聚合(机器可读) | | `timeseries.json` | 每秒快照(机器可读) | | `events.json` | 仅 redis:节点/集群事件时间线 | | `report.txt` | 人类可读的最终报告(同控制台输出) | 字段语义与示例见 [📖 输出格式](docs/output-format.md)。 --- ## 文档 - [Getting Started](docs/getting-started.md) — 安装、构建、首次运行 - [Redis 灾备测试](docs/redis-dr-test.md) — 原理、全部参数、灾备测试方法论、报告解读 - [Elasticsearch 性能测试](docs/es-perf.md) — 阶段、全部参数、多节点部署、报告解读 - [Kafka 性能测试](docs/kafka-perf.md) — 阶段、全部参数、多节点、自定义消息体、报告解读 - [RocketMQ 性能测试](docs/rocketmq-perf.md) — 阶段、全部参数、多 topic/多消费组、OMB 指标、报告解读 - [配置参考](docs/configuration.md) — 配置文件格式与全部参数 - [架构设计](docs/architecture.md) — 目录结构、共享指标层、数据流 - [输出格式](docs/output-format.md) — CSV/JSON/report 字段说明与示例 --- ## 项目结构 ```text go-performance/ ├── cmd/ │ ├── redis-dr-test/ # redis 灾备测试入口 │ ├── es-perf/ # es 写入/查询测试入口 │ ├── kafka-perf/ # kafka 生产/消费一体(先产后消) │ ├── kafka-perf-producer/ # kafka 独立生产端(可与消费端同时跑) │ ├── kafka-perf-consumer/ # kafka 独立消费端 │ ├── rocketmq-perf/ # rocketmq 5.x (gRPC) 生产/消费一体 │ ├── rocketmq-perf-producer/ # rocketmq 独立生产端 │ └── rocketmq-perf-consumer/ # rocketmq 独立消费端 ├── internal/ │ ├── metrics/ # [共享] 时间分桶、reservoir 分位数、CSV、summary │ ├── configfile/ # [共享] key:value 配置解析 │ ├── config/ # redis 配置 │ ├── loadgen/ # redis 压测引擎(set:get 比例、随机数据、key 池) │ ├── cluster/ # redis CLUSTER NODES/INFO 轮询 + 事件检测 │ ├── report/ # redis 报告渲染 │ ├── es/ # es 配置/客户端/索引器/查询器/报告/数据 │ ├── kafka/ # kafka 配置/admin/生产者/消费者/消息体/报告 │ └── rocketmq/ # rocketmq 配置/客户端/生产者/消费者/消息体/OMB 指标/报告 ├── config.example.yaml # redis 配置示例 ├── config.example.es.yaml # es 配置示例 ├── config.example.kafka.yaml # kafka 配置示例 ├── config.example.rocketmq.yaml # rocketmq 配置示例 └── docs/ # 文档 ``` 详见 [架构设计](docs/architecture.md)。 --- ## 参与贡献 欢迎提 Issue 与 PR。构建、测试、代码规范、提交流程见 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 许可证 [MIT License](LICENSE)(`SPDX-License-Identifier: MIT`)。