2. 环境搭建:JDK、Maven、Docker、MySQL、Redis、Kafka 的安装与配置
本章节将搭建压测与验证所需的完整基础环境。所有组件均采用 Docker 容器化部署(除 JDK 与 Maven 为宿主机原生安装),确保环境可复现、易清理。以下按依赖顺序逐一说明安装步骤与配置要点。
2.1 宿主机基础:JDK 与 Maven
压测工具(如 JMeter)与异步任务编排框架(如 CompletableFuture + 线程池)均依赖 JDK 17+。Maven 用于管理项目依赖与构建打包。
| 组件 | 版本要求 | 安装方式 | 关键配置 |
|---|---|---|---|
| JDK | 17 LTS 或更高 | tar.gz 解压 / 包管理器 | JAVA_HOME、PATH |
| Maven | 3.9+ | tar.gz 解压 / 包管理器 | MAVEN_HOME、PATH、settings.xml 镜像 |
验证命令:
java -version 应输出 OpenJDK 17.xmvn -version 应输出 Apache Maven 3.9.x 及 Java version: 17
2.2 容器运行时:Docker 与 Docker Compose
所有中间件(MySQL、Redis、Kafka)均运行在 Docker 容器中。Docker Compose 用于一键编排多容器启动顺序与网络。
- Docker Engine:版本 24+,支持 overlay2 存储驱动。
- Docker Compose:V2 插件形式(
docker compose命令)。 - 资源分配:建议为 Docker 分配至少 4GB 内存、2 个 CPU 核心。
避坑提示:Linux 用户需将当前用户加入 docker 用户组,避免每次执行
sudo。macOS/Windows 用户请确保 Docker Desktop 的资源滑块已调高。
2.3 数据层:MySQL 与 Redis
MySQL 存储业务表结构与压测基线数据;Redis 作为缓存层,用于验证缓存穿透/击穿场景。
| 服务 | 镜像版本 | 端口映射 | 持久化 | 关键参数 |
|---|---|---|---|---|
| MySQL | mysql:8.0 | 3306:3306 | 绑定挂载 /var/lib/mysql | character-set-server=utf8mb4 max_connections=500 |
| Redis | redis:7.2 | 6379:6379 | appendonly yes | requirepass 可选 |
MySQL 初始化脚本片段(init.sql):
CREATE DATABASE IF NOT EXISTS perf_test DEFAULT CHARACTER SET utf8mb4;
CREATE TABLE IF NOT EXISTS perf_test.orders (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
amount DECIMAL(10,2) NOT NULL,
status TINYINT DEFAULT 0,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user_id (user_id)
) ENGINE=InnoDB;
2.4 消息中间件:Kafka
Kafka 用于异步任务编排中的事件驱动与削峰填谷。采用 KRaft 模式(无需 Zookeeper),降低运维复杂度。
| 组件 | 镜像版本 | 端口 | 数据持久化 |
|---|---|---|---|
| Kafka | confluentinc/cp-kafka:7.6.0 | 9092:9092 | /var/lib/kafka/data |
| Kafka UI(可选) | provectuslabs/kafka-ui:latest | 8080:8080 | 无状态 |
Kafka 环境变量关键配置:
KAFKA_NODE_ID=1KAFKA_PROCESS_ROLES=broker,controllerKAFKA_CONTROLLER_QUORUM_VOTERS=1@localhost:9093KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092
2.5 整体架构与容器编排
下图展示宿主机、容器网络与各服务之间的调用关系,以及压测工具如何驱动整个链路。
2.6 一键启动与验证清单
将以下内容保存为 docker-compose.yml,执行 docker compose up -d 即可启动所有中间件。
docker-compose.yml 核心片段:
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: perf-mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: perf_test
volumes:
- ./mysql-data:/var/lib/mysql
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
networks:
- perf-net
redis:
image: redis:7.2
container_name: perf-redis
ports:
- "6379:6379"
volumes:
- ./redis-data:/data
networks:
- perf-net
kafka:
image: confluentinc/cp-kafka:7.6.0
container_name: perf-kafka
ports:
- "9092:9092"
environment:
KAFKA_NODE_ID: 1
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@localhost:9093
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
volumes:
- ./kafka-data:/var/lib/kafka/data
networks:
- perf-net
networks:
perf-net:
driver: bridge
| 验证项 | 命令 | 预期结果 |
|---|---|---|
| 容器状态 | docker compose ps | 三个服务均为 Up 状态 |
| MySQL 连接 | mysql -h127.0.0.1 -uroot -proot123 -e "SHOW DATABASES;" | 显示 perf_test 数据库 |
| Redis 连通 | redis-cli -h 127.0.0.1 ping | 返回 PONG |
| Kafka 可用 | kafka-topics --bootstrap-server localhost:9092 --list | 无报错,返回空列表 |