选择XFS或ext4文件系统(XFS对大文件和高并发支持更好),挂载时添加noatime、nodiratime参数(减少文件访问时间更新带来的磁盘I/O),例如:
mount -o noatime,nodiratime /dev/sdb1 /opt/kafka/logs
调整内核参数:vm.swappiness=1(降低交换空间使用,避免频繁磁盘I/O)、vm.dirty_ratio=10(脏页占比达到10%时触发写回)、vm.dirty_background_ratio=5(后台写回阈值设为5%),优化内存与磁盘交互。
num.network.threads设置为CPU核心数的1-2倍(处理客户端连接请求,如num.network.threads=8);num.io.threads设置为磁盘数量的2-3倍(处理磁盘读写操作,如num.io.threads=16);socket.send.buffer.bytes(发送缓冲区)和socket.receive.buffer.bytes(接收缓冲区)设置为128KB-1MB(提升网络传输效率)。log.segment.bytes设置为2-5GB(减少日志切换频率,降低I/O开销);log.retention.hours根据业务需求设置(如168小时=7天,避免磁盘空间耗尽);num.partitions根据消费者数量和数据量设置(每个分区对应一个消费线程,建议分区数≥消费者数,如num.partitions=100)。batch.size设置为64KB-1MB(合并多条消息为一个批次,减少网络请求),linger.ms设置为50-100ms(等待更多消息合并,提升吞吐量);compression.type设置为lz4或snappy(压缩率约30%-50%,减少网络传输量,但会增加少量CPU开销)。KAFKA_HEAP_OPTS设置为-Xms8g -Xmx8g(初始堆与最大堆一致,避免堆扩容带来的停顿);使用G1GC(适合Kafka的内存使用特性,平衡吞吐量与延迟),配置-XX:+UseG1GC、-XX:MaxGCPauseMillis=100(目标最大停顿时间为100ms),减少GC对系统的影响。
batch.size=1MB(增大批次大小)、linger.ms=100ms(延长等待时间);compression.type=lz4(启用压缩);acks=all(等待所有副本确认,确保数据不丢失);buffer.memory=1GB(增大生产者缓冲区,防止消息积压)。fetch.min.bytes=1MB(增大单次拉取最小数据量)、max.poll.records=500(控制每次轮询的最大消息数);max.partition.fetch.bytes=5MB(增大单分区拉取上限,匹配高吞吐场景)。使用Prometheus+Grafana搭建监控平台,实时监控Kafka集群的关键指标(如吞吐量、延迟、分区偏移量、GC时间);定期检查Kafka日志(如server.log),分析潜在的性能瓶颈(如磁盘I/O过高、网络拥塞);定期清理过期日志(根据log.retention.hours设置),释放磁盘空间。