一、硬件资源推荐
num.io.threads(磁盘I/O线程数,通常设为CPU核数2倍)、num.network.threads(网络请求线程数,通常设为CPU核数+1)匹配,以充分利用并发能力。-Xmx/-Xms设为相同值,如8G,避免堆扩展开销)、元数据缓存(-XX:MetaspaceSize/-XX:MaxMetaspaceSize设为256M)、直接内存(-XX:MaxDirectMemorySize设为1G);操作系统需预留足够页缓存(建议大于Kafka日志段大小,如1G),减少磁盘IO。log.dirs配置,如/data1/kafka,/data2/kafka),实现负载均衡和故障转移;设置noatime挂载选项(减少文件访问时间更新),进一步提升性能。replication.factor=3)和客户端通信(如listeners=PLAINTEXT://:9092)的低延迟;建议将Broker部署在内网环境,减少公网传输延迟。二、操作系统配置优化
noatime选项(如mount -o noatime /dev/sdb1 /data),减少不必要的磁盘写操作。/etc/sysctl.conf中的vm.swappiness=1(值越小,越不容易使用Swap),避免内存不足时频繁交换到磁盘,影响性能。ulimit -n 65535(或更高)增加文件描述符限制(Kafka需处理大量连接);修改/etc/sysctl.conf中的vm.max_map_count=262144(增加内存映射区域数量,避免OutOfMemoryError)。vm.dirty_background_ratio=10(脏页占内存10%时触发后台刷新)、vm.dirty_ratio=60(脏页占内存60%时强制刷新),平衡I/O性能与系统响应时间。三、Kafka Broker核心配置
num.partitions(主题分区数)需根据消费者线程数设置(建议与消费者线程数相等,提升并行处理能力);default.replication.factor(默认副本因子)建议设为3(保证数据可靠性),但需权衡存储和网络开销;min.insync.replicas=2(最小同步副本数),确保数据同步的可靠性。num.network.threads(网络请求处理线程数)设为CPU核数+1(如4核设为5);num.io.threads(磁盘I/O线程数)设为CPU核数2倍(如4核设为8),处理消息写入和读取。compression.type=lz4(推荐,兼顾吞吐量与CPU开销),减少网络传输和磁盘IO;生产者端batch.size=1M(批量发送大小)、linger.ms=100(发送延迟),平衡延迟与吞吐量;消费者端fetch.min.bytes=1M(每次拉取最小数据量)、fetch.max.wait.ms=1000(拉取最大等待时间),减少网络开销。log.segment.bytes=1G(单个日志段大小),便于管理和清理;log.retention.ms=7d(日志保留时间,如7天)、log.retention.bytes=100G(日志保留大小,如100G),避免日志文件过多占用磁盘空间。四、JVM配置优化
-Xmx(最大堆内存)与-Xms(初始堆内存)设为相同值(如8G),避免堆扩展带来的性能抖动;例如export KAFKA_HEAP_OPTS="-Xmx8G -Xms8G"。-XX:+UseG1GC;调整-XX:MaxGCPauseMillis=200(最大GC停顿时间,如200ms),避免GC停顿过长影响Kafka性能。-XX:MetaspaceSize=256M(元数据缓存初始大小)、-XX:MaxMetaspaceSize=256M(元数据缓存最大大小);-XX:MaxDirectMemorySize=1G(直接内存大小,用于网络数据包存储)。