Linux下Kafka性能優化策略
noatime
選項(禁用文件訪問時間更新,減少不必要的磁盤寫操作)。vm.swappiness
(建議設為10以下,減少內存交換)、vm.dirty_background_ratio
(后臺臟頁刷新閾值,建議設為5-10%)、vm.dirty_ratio
(前臺臟頁刷新閾值,建議設為10-20%),優化內存與磁盤I/O平衡。ulimit -n 65535
命令臨時提高Kafka進程可打開的文件描述符數量(生產環境需寫入/etc/security/limits.conf
永久生效),避免因連接數過多導致服務拒絕。net.core.rmem_max=16777216
、net.core.wmem_max=16777216
),調整TCP接收/發送窗口(net.ipv4.tcp_rmem="4096 87380 16777216"
、net.ipv4.tcp_wmem="4096 65536 16777216"
),提升網絡吞吐量。num.network.threads
(處理網絡請求,建議為CPU核心數的1-2倍,如8核設為8-16);根據磁盤數量設置num.io.threads
(處理磁盤I/O,建議為磁盤數量的1-2倍,如4塊磁盤設為4-8),避免線程成為瓶頸。log.segment.bytes
(單個日志段大小,建議128MB-512MB,過大導致日志切換慢,過小增加元數據開銷);log.retention.hours
(日志保留時間,根據業務需求設為1-7天,避免磁盤空間過度占用);log.flush.interval.messages
(批量刷盤的消息數,建議10000-50000)和log.flush.interval.ms
(批量刷盤的時間間隔,建議1000-5000ms),平衡數據持久性與性能。num.partitions
(主題分區數,需大于消費者數量且隨集群規模增長調整,如10個消費者設為10-20),提高并行處理能力;設置default.replication.factor=3
(默認副本因子,確保數據高可用,避免單點故障)。batch.size
(批量發送的消息字節數,建議1MB-10MB,增大減少網絡請求);linger.ms
(發送前等待時間,建議10-100ms,允許更多消息填充批次);compression.type
(壓縮算法,推薦lz4
或snappy
,減少網絡傳輸和存儲開銷,但會增加少量CPU負載)。-Xms
(初始堆)與-Xmx
(最大堆)為相同值(避免動態擴展帶來的停頓),如-Xms8g -Xmx8g
。-XX:+UseG1GC
;調整-XX:MaxGCPauseMillis=200
(目標最大GC停頓時間,建議200ms以內)、-XX:InitiatingHeapOccupancyPercent=45
(觸發并發GC的堆占用率,建議45%左右),優化GC性能。server.log
、controller.log
),及時發現異常(如Broker宕機、副本不同步);設置日志清理策略(如按時間或大小清理舊日志),避免磁盤空間耗盡;定期進行性能測試(如使用JMeter、Gatling模擬高并發場景),評估優化效果并調整配置。