一、硬件资源规划
-Xms8g -Xmx8g,初始与最大堆内存一致,避免频繁GC),避免过大堆内存导致Full GC停顿。二、操作系统内核参数优化
ulimit -n 65536),并在/etc/security/limits.conf中永久设置(* soft nofile 100000; * hard nofile 100000)。vm.swappiness=1(默认60),避免Kafka因内存不足频繁使用swap;vm.dirty_background_ratio=10(后台脏页比例)、vm.dirty_ratio=20(强制脏页刷新阈值),平衡写性能与数据安全性;net.core.somaxconn=8192(监听队列长度)、net.ipv4.tcp_max_syn_backlog=8096(SYN队列长度)、net.core.rmem_max=16777216/net.core.wmem_max=16777216(TCP读写缓冲区大小),提升网络吞吐量。三、Kafka Broker核心配置优化
default.replication.factor=3(确保高可用),min.insync.replicas=2(写入成功需至少2个副本确认),避免因副本同步问题导致数据丢失。log.segment.bytes=1GB(默认1GB),减少日志段数量,降低文件系统元数据操作开销;log.retention.hours=168(7天)或log.retention.bytes(最大存储容量),避免日志无限增长占用磁盘空间;log.flush.interval.messages=10000(每1万条消息刷新一次)、log.flush.interval.ms=1000(每1秒刷新一次),平衡数据持久性与写入吞吐量(频繁刷新会降低吞吐量,但提高数据安全性)。num.network.threads=CPU核心数×1~2(如8核CPU设置为8-16),处理客户端请求;num.io.threads=CPU核心数×2(如8核CPU设置为16),处理磁盘读写和副本同步;background.threads=CPU核心数×1(如8核CPU设置为8),处理后台任务(如日志压缩)。四、JVM调优
-Xms(初始堆内存)和-Xmx(最大堆内存),建议两者一致(如-Xms8g -Xmx8g),避免动态扩展带来的性能开销;-XX:+UseG1GC),适合大内存场景,可通过-XX:MaxGCPauseMillis=200(最大GC停顿时间,单位毫秒)调整停顿时间,平衡吞吐量与延迟;-XX:MetaspaceSize=128m(初始元空间大小)、-XX:MaxMetaspaceSize=512m(最大元空间大小),避免元空间溢出。五、网络与压缩优化
net.core.rmem_max=16777216、net.core.wmem_max=16777216),提升网络吞吐量;确保服务器之间网络延迟低(如同城数据中心延迟<1ms),避免网络成为瓶颈。compression.type=lz4或zstd),减少网络传输和存储开销(lz4压缩率高且CPU开销低,zstd压缩率更高但CPU开销略大);压缩会增加CPU负载,需根据CPU资源和吞吐量需求权衡。六、监控与持续调优
kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec),实时了解集群状态。server.log),查看是否有异常(如磁盘空间不足、副本同步失败、GC停顿过长),及时解决问题。