在CentOS上优化Kafka前,需完成以下基础配置:
sudo yum install java-11-openjdk -y安装,验证java -version确认安装成功。/opt/kafka目录,配置环境变量PATH包含Kafka的bin目录。sudo firewall-cmd --zone=public --add-port=9092/tcp --permanent及sudo firewall-cmd --reload。noatime(不更新访问时间)和nodiratime(不更新目录访问时间),减少磁盘IO。例如:mount -o remount,noatime,nodiratime /dev/sdb1 /data/kafka
sudo sed -i '/swap/d' /etc/fstab # 注释掉swap行
sudo swapoff -a # 立即禁用swap
编辑/etc/sysctl.conf,添加以下参数优化内核性能:
# 减少swappiness(避免频繁swap)
vm.swappiness = 1
# 控制脏页刷新(平衡IO性能与系统响应)
vm.dirty_background_ratio = 10
vm.dirty_ratio = 60
# 增加内存映射区域数量(避免Kafka内存溢出)
vm.max_map_count = 262144
# 调整网络缓冲区大小(提升网络吞吐量)
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
# 增加网络连接数(支持更多并发)
net.core.somaxconn = 65535
执行sudo sysctl -p使配置生效。
Kafka需要处理大量并发连接,需增加文件描述符限制:
/etc/security/limits.conf,添加:* soft nofile 65535
* hard nofile 65535
/etc/pam.d/login,添加:session required pam_limits.so
ulimit -n 65535。编辑config/server.properties,调整以下关键参数:
num.partitions(分区数)根据消费者线程数设置(建议与消费者线程数相等),default.replication.factor(副本数)根据可靠性需求设置(生产环境建议3,平衡可靠性与吞吐量)。num.network.threads(网络请求线程)设置为CPU核数的1-2倍(如8核设置为16),num.io.threads(磁盘IO线程)设置为CPU核数的2-4倍(如8核设置为16)。log.retention.ms(日志保留时间)设置为7天(604800000ms),log.segment.bytes(日志段大小)设置为1GB(避免频繁切换日志段)。compression.type(压缩类型)设置为lz4(平衡吞吐量与CPU开销),减少网络传输和磁盘IO。编辑kafka-server-start.sh,调整JVM参数:
-Xms(初始堆)与-Xmx(最大堆)设置为相同值(如8GB),避免堆扩展带来的性能开销:export KAFKA_HEAP_OPTS="-Xms8G -Xmx8G"。-XX:+UseG1GC -XX:MaxGCPauseMillis=200。-XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M(避免元空间溢出)。-XX:MaxDirectMemorySize=1G(控制直接内存大小,避免OOM)。sysctl.conf中的参数),提升网络吞吐量。log.retention.ms设置),避免磁盘空间不足。