1. 硬件层面:选择高性能存储设备
使用SSD或NVMe SSD替代传统HDD,显著提升磁盘读写速度(尤其是顺序I/O性能)。NVMe SSD的顺序写入速度远超HDD,更适合Kafka高吞吐量的需求。例如,将Kafka数据目录部署在NVMe SSD上,可大幅减少日志写入延迟。
2. 操作系统层面:调整内核与文件系统参数
ulimit -n 65535
(或更高)提高文件描述符上限,避免因描述符不足导致连接拒绝。/etc/sysctl.conf
,优化内存与磁盘I/O管理。例如:
vm.swappiness=10
(降低交换分区使用,优先使用物理内存);vm.dirty_background_ratio=10
(后台脏页刷新阈值,减少磁盘I/O突发);vm.dirty_ratio=20
(强制脏页刷新阈值,避免内存耗尽)。/etc/fstab
中为Kafka数据目录添加noatime,nodiratime
选项(禁用文件访问时间更新),减少不必要的磁盘写操作。3. Kafka配置层面:优化日志与线程参数
log.segment.bytes
(默认1GB,可增大至2GB)减少日志分段数量,降低索引维护开销;log.retention.hours=168
(7天)或根据业务需求调整保留时间,自动清理过期数据,避免磁盘空间耗尽;log.cleaner.enable=true
)减少重复数据,节省存储空间并提升读取性能。num.io.threads
(建议设置为CPU核心数的2-4倍,如8核设置为16),提高磁盘I/O操作并发能力;num.network.threads
(建议设置为CPU核心数的1-2倍,如8核设置为8),处理更多网络请求,避免网络成为瓶颈。log.flush.interval.messages
(如10000条消息)和log.flush.interval.ms
(如1000ms)平衡数据持久性与性能。避免过于频繁的刷新(如每条消息都刷新),减少磁盘写操作次数。4. 存储策略:优化目录与分区布局
server.properties
中设置log.dirs=/mnt/data1,/mnt/data2
(指向多个物理磁盘或分区),实现数据并行写入,提升整体I/O吞吐量。5. 监控与调优:持续优化性能
iostat -x 1
(查看磁盘利用率、IOPS、延迟)、iotop
(查看进程级I/O消耗)等工具,及时发现磁盘瓶颈(如利用率超过70%需扩容)。UnderReplicatedPartitions
(未同步副本数)、RequestQueueTimeMs
(请求队列时间)、DiskUsage
(磁盘使用率)),根据指标调整配置(如增加副本数、扩容磁盘)。