2. 环境搭建:JDK、Maven、Docker、MySQL、Redis、Kafka 的安装与配置

本章节将搭建压测与验证所需的完整基础环境。所有组件均采用 Docker 容器化部署(除 JDK 与 Maven 为宿主机原生安装),确保环境可复现、易清理。以下按依赖顺序逐一说明安装步骤与配置要点。

2.1 宿主机基础:JDK 与 Maven

压测工具(如 JMeter)与异步任务编排框架(如 CompletableFuture + 线程池)均依赖 JDK 17+。Maven 用于管理项目依赖与构建打包。

组件版本要求安装方式关键配置
JDK17 LTS 或更高tar.gz 解压 / 包管理器JAVA_HOME、PATH
Maven3.9+tar.gz 解压 / 包管理器MAVEN_HOME、PATH、settings.xml 镜像
验证命令:
java -version 应输出 OpenJDK 17.x
mvn -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 作为缓存层,用于验证缓存穿透/击穿场景。

服务镜像版本端口映射持久化关键参数
MySQLmysql:8.03306:3306绑定挂载 /var/lib/mysqlcharacter-set-server=utf8mb4
max_connections=500
Redisredis:7.26379:6379appendonly yesrequirepass 可选
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),降低运维复杂度。

组件镜像版本端口数据持久化
Kafkaconfluentinc/cp-kafka:7.6.09092:9092/var/lib/kafka/data
Kafka UI(可选)provectuslabs/kafka-ui:latest8080:8080无状态
Kafka 环境变量关键配置:
KAFKA_NODE_ID=1
KAFKA_PROCESS_ROLES=broker,controller
KAFKA_CONTROLLER_QUORUM_VOTERS=1@localhost:9093
KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092

2.5 整体架构与容器编排

下图展示宿主机、容器网络与各服务之间的调用关系,以及压测工具如何驱动整个链路。

环境搭建整体架构图 环境搭建整体架构图 宿主机 (Host) JDK 17 + Maven 压测脚本 & 构建 Docker Engine 容器运行时 docker-compose.yml 服务编排定义 容器网络 (bridge: perf-net) MySQL 8.0 端口 3306 Redis 7.2 端口 6379 Kafka 7.6 端口 9092 所有容器通过 docker-compose 统一启动,共享 perf-net 网络,服务名即主机名

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无报错,返回空列表