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(磁盤使用率)),根據指標調整配置(如增加副本數、擴容磁盤)。