Kafka在CentOS上的性能調優策略
vm.dirty_ratio
和vm.dirty_background_ratio
調整臟頁刷新策略)。noatime
選項(禁用訪問時間更新,減少文件系統寫操作)。vm.swappiness=1
(甚至0,若內存充足),避免頻繁swap操作(swap會嚴重影響性能)。vm.dirty_background_ratio=5
、vm.dirty_ratio=10
,平衡臟頁刷新頻率與系統響應時間(避免頻繁刷盤導致I/O瓶頸)。fs.file-max=65535
(系統最大文件描述符數)、ulimit -n 65535
(用戶級文件描述符限制),滿足Kafka大量連接的需求。net.core.somaxconn=32768
(TCP連接隊列長度)、net.ipv4.tcp_max_syn_backlog=16384
(SYN隊列長度),避免連接堆積。num.network.threads
:設置為CPU邏輯核數的2倍(如16核設置為32),處理客戶端網絡請求。num.io.threads
:設置為磁盤數量的8倍(如4塊SSD設置為32),處理磁盤I/O操作(寫入、讀取日志)。num.replica.fetchers
:設置為CPU邏輯核數的1/4(如16核設置為4),加速副本同步(避免副本滯后)。num.partitions
:根據預期吞吐量和消費者線程數設置(公式:分區數=max(預期吞吐量/單分區TPS, 消費者線程數*2)
),增加分區數能提升并行處理能力(如某金融平臺設置128分區,峰值TPS達180萬)。default.replication.factor
:強一致性場景(如金融)設置為3(跨AZ部署),允許短暫數據丟失的場景設置為2(降低成本)。log.segment.bytes
:設置為1GB(默認1GB),減少日志段文件數量(便于管理和清理)。log.flush.interval.messages
:SSD設置為10000條(默認1000條),HDD設置為3000條(平衡數據持久性與性能)。log.flush.interval.ms
:SSD設置為1000ms(默認1000ms),HDD設置為3000ms(減少刷盤次數)。compression.type
設置為lz4
(兼顧壓縮率與CPU開銷,比Snappy略高但吞吐量更好),減少網絡傳輸和存儲開銷。batch.size
設置為1MB(默認16KB),linger.ms
設置為20ms(默認0ms),讓生產者積累更多消息后再批量發送,減少網絡請求次數(提升吞吐量約30%)。compression.type
設置為lz4
(比Snappy更高效),進一步減少網絡傳輸量(吞吐量可提升20%-30%)。buffer.memory
設置為32MB(默認32MB),應對高并發場景(避免生產者因緩沖區滿而阻塞)。acks
根據業務需求設置:
acks=1
(默認):Leader寫入成功即返回(平衡可靠性與性能)。acks=all
:所有ISR副本寫入成功才返回(強一致性,適合金融場景)。acks=0
:不等待應答(最高吞吐量,但可能丟失數據)。fetch.min.bytes
設置為1MB(默認1B),fetch.max.wait.ms
設置為1000ms(默認500ms),讓消費者一次性拉取更多數據,減少網絡請求次數(提升吞吐量)。max.partition.fetch.bytes
設置為2MB(默認1MB),允許單分區拉取更多數據(避免因單分區數據量大而阻塞)。max.poll.records
設置為500(默認500),控制單次poll
返回的記錄數(避免單次處理過多導致延遲)。consumer_lag
),若延遲超過閾值(如1000條),動態調整fetch.min.bytes
(增大)或max.poll.records
(減?。?,緩解消費壓力。-Xms
(初始堆)和-Xmx
(最大堆)為相同值(如4GB),避免堆內存動態擴展帶來的性能開銷(如-Xms4G -Xmx4G
)。-XX:+UseG1GC
),適合大內存場景(比CMS更高效),減少Full GC次數(降低停頓時間)。-XX:MaxGCPauseMillis=200
(目標最大GC停頓時間,單位ms)、-XX:InitiatingHeapOccupancyPercent=35
(觸發并發GC的堆占用率,避免過早GC)。log.retention.hours=168
(保留7天)、log.retention.bytes=1073741824
(保留1GB),定期清理舊日志(避免磁盤空間耗盡)。kafka-producer-perf-test
和kafka-consumer-perf-test
工具定期進行壓力測試(如模擬峰值吞吐量),驗證調優效果并根據結果調整參數。