一、硬件资源推荐
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
(直接内存大小,用于网络数据包存储)。