Kafka 是一款开源的分布式消息流处理中间件,其附带的命令行工具在管理、测试和调试过程中扮演着至关重要的角色。由于这些工具本质上是启动 Java 类的 Shell 脚本,因此我们常常需要调整 JVM(Java 虚拟机)的设置,以优化内存管理、提升垃圾回收(GC)性能并确保系统稳定性。
本文将详细介绍三个核心环境变量,它们是配置 Kafka JVM 选项的关键:
• KAFKA_HEAP_OPTS:用于控制 Kafka 工具和服务器的 JVM 堆大小。
• KAFKA_OPTS:用于设置与堆大小无关的 JVM 系统属性和选项。
• KAFKA_JVM_PERFORMANCE_OPTS:通常用于为 Kafka 服务器调整 GC(垃圾回收器)和 JVM 的底层性能设置。
现在,让我们从第一个环境变量开始,学习如何控制 JVM 的堆内存。

--------------------------------------------------------------------------------
1. 使用 KAFKA_HEAP_OPTS 控制 JVM 堆大小
KAFKA_HEAP_OPTS 环境变量的核心作用是控制 Kafka 工具和服务器的 JVM 堆大小。
1.1 为 Kafka 命令行工具设置
在启动 Kafka 命令行工具之前,您必须使用 export 命令来设置此环境变量。以下操作指南将演示如何为 kafka-console-producer.sh 工具设置并验证堆大小。
• 步骤 1:设置环境变量
• 运行以下命令,将 JVM 的最小堆大小(-Xms)和最大堆大小(-Xmx)都设置为 1GB。
• 步骤 2:运行 Kafka 工具
• 现在,启动 Kafka 生产者工具。
• 步骤 3:验证设置
• 打开一个新的终端窗口,使用 jcmd 命令检查正在运行的工具进程的 JVM 标志。
• 您将看到类似以下的输出摘录。
1.2 为 Kafka 服务器设置(作为 systemd 服务)
当 Kafka 服务器作为 Linux 系统中的 systemd 服务运行时,配置方法有所不同。您需要在服务的单元(unit)文件中直接定义环境变量。
以下是一个名为 kafka_server.service 的示例单元文件。我们通过 Environment 指令来设置 KAFKA_HEAP_OPTS。
[Unit]
Description=Kafka Server
[Service]
**Environment="KAFKA_HEAP_OPTS=-Xms2g -Xmx2g"**
ExecStart=/home/baeldung/work/kafka-vm-options/start-server.sh
[Install]
WantedBy=multi-user.target
在重新加载并启动服务后,您可以使用 systemctl status 命令来检查进程信息。
sudo systemctl status kafka_server
输出中将包含 Java 进程的启动命令。
● kafka_server.service - Kafka Server
Loaded: loaded (/etc/systemd/system/kafka_server.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2025-12-23 07:03:46 EST; 3s ago
Main PID: 9218 (start-server.sh)
Tasks: 6 (limit: 4597)
Memory: 4.0M
CPU: 4.437s
CGroup: /system.slice/kafka_server.service
├─9218 /bin/bash /home/baeldung/work/kafka-vm-options/start-server.sh
└─9943 java **-Xms2g -Xmx2g** -server -XX:+UseG1GC ...
输出的进程信息确认了 JVM 参数 -Xms2g -Xmx2g 已成功应用。
接下来,我们将探讨如何配置其他类型的 JVM 选项。
--------------------------------------------------------------------------------
2. 使用 KAFKA_OPTS 配置系统属性
KAFKA_OPTS 环境变量的核心作用是设置 JVM 系统属性和任何与堆大小无关的 JVM 选项。
2.1 为 Kafka 命令行工具设置
与 KAFKA_HEAP_OPTS 类似,我们可以通过 export 命令来设置 KAFKA_OPTS。下面的示例演示了如何更改 Kafka 工具的默认日志目录。
• 步骤 1:设置环境变量
• 使用 -D 语法设置 kafka.logs.dir 系统属性。
• 步骤 2:运行 Kafka 工具
• 步骤 3:验证设置
• 使用 jcmd 的 VM.system_properties 命令来检查系统属性。
2.2 为 Kafka 服务器设置(作为 systemd 服务)
为作为 systemd 服务的 Kafka 服务器设置 KAFKA_OPTS,其方法与设置 KAFKA_HEAP_OPTS 完全相同,即在单元文件中进行定义。
在 [Service] 区块下添加 Environment 指令。
[Service]
**Environment="KAFKA_OPTS=-Dkafka.logs.dir=/tmp/kafka"**
ExecStart=/home/baeldung/work/kafka-vm-options/start-server.sh
服务重启后,使用 jcmd 检查服务器进程的系统属性。
$ sudo jcmd $(pgrep -f kafka.Kafka) VM.system_properties | grep kafka.logs.dir
kafka.logs.dir=/tmp/kafka
输出结果表明,Kafka 服务器的日志目录已成功更改。
现在,让我们继续了解用于性能调优的最后一个环境变量。
--------------------------------------------------------------------------------
3. 使用 KAFKA_JVM_PERFORMANCE_OPTS 进行性能调优
KAFKA_JVM_PERFORMANCE_OPTS 环境变量的核心作用是通常用于为 Kafka 服务器调整 GC(垃圾回收器)和 JVM 的底层性能设置。
3.1 为 Kafka 命令行工具设置
以下步骤演示了如何使用此变量来更改 JVM 使用的垃圾回收器。
• 步骤 1:设置环境变量
• 步骤 2:运行 Kafka 工具
• 步骤 3:验证设置
• 使用 jcmd 检查 JVM 标志。
3.2 为 Kafka 服务器设置(作为 systemd 服务)
为作为服务的 Kafka 服务器设置此变量的方法与前两个变量相同。在 [Service] 区块下添加相应的 Environment 指令。
[Service]
**Environment="KAFKA_JVM_PERFORMANCE_OPTS=-XX:+UseZGC -XX:+AlwaysPreTouch"**
ExecStart=/home/baeldung/work/kafka-vm-options/start-server.sh
重启服务后,通过 systemctl status 命令检查。
$ sudo systemctl status kafka_server
● kafka_server.service - Kafka Server
...
CGroup: /system.slice/kafka_server.service
├─29923 /bin/bash /home/baeldung/work/kafka-vm-options/start-server.sh
└─30651 java -Xmx1G -Xms1G **-XX:+UseZGC -XX:+AlwaysPreTouch** ...
输出的进程信息确认了 JVM 参数 -XX:+UseZGC -XX:+AlwaysPreTouch 已成功应用。
--------------------------------------------------------------------------------
4. 结论
在本文中,我们详细探讨了如何为 Kafka 的命令行工具和服务器配置 JVM 选项。通过掌握三个关键的环境变量,您可以灵活地调整 Kafka 的运行环境以满足不同需求。
核心要点回顾:
• KAFKA_HEAP_OPTS:用于设置 JVM 堆大小,是内存管理的基础。
• KAFKA_OPTS:用于设置 JVM 系统属性,如日志目录等。
• KAFKA_JVM_PERFORMANCE_OPTS:用于设置 GC 和底层性能调优参数,以优化延迟和吞吐量。
配置这些变量主要有两种方法:对于临时运行的命令行工具,使用 export 命令在当前会话中设置;对于作为 systemd 服务的 Kafka 服务器,则在其单元文件中通过 Environment 指令进行持久化配置。