Kafka配置調優
num.partitions
需與消費者線程數基本相等,確保分區資源被充分利用,避免消費者閑置;num.io.threads
設置為CPU核心數的50%,負責磁盤寫操作,提升I/O處理能力;num.replica.fetchers
設置為CPU核心數的1/3,加速副本同步;num.network.threads
設置為CPU核心數的2/3,處理客戶端請求,避免網絡成為瓶頸。compression.type
推薦使用lz4
(兼顧吞吐量與CPU開銷),可減少網絡傳輸和存儲壓力;生產者與消費者均需開啟壓縮,確保端到端的壓縮效果。batch.size
設置為1MB(默認16KB),合并多個小消息為一個批次,減少網絡請求次數;linger.ms
設置為100ms以上,讓生產者等待更多消息進入批次,提高批處理效率;消費者fetch.min.bytes
設置為1MB(默認1KB),增加單次拉取的數據量,減少網絡往返次數。acks
根據業務需求設置:可靠性要求高選all
(確保所有副本同步成功),性能優先選1
(僅Leader副本確認);buffer.memory
設置為64MB以上,作為生產者發送緩沖區,避免因緩沖區滿導致消息丟失。JVM調優
-Xms
(初始堆)與-Xmx
(最大堆)設置為相同值(如4-16GB),避免堆大小動態調整帶來的性能開銷;堆內存不宜過大(超過16GB易導致Full GC延遲)。G1GC
(適合Kafka的內存使用特性),設置-XX:+UseG1GC
;調整-XX:MaxGCPauseMillis=100-200
,控制最大GC停頓時間在100ms以內,減少對消息處理的影響。-XX:MetaspaceSize
與-XX:MaxMetaspaceSize
設置為256MB(存儲類元數據,避免永久代溢出);-XX:MaxDirectMemorySize
設置為堆內存的1-2倍(如8GB堆設為8GB),用于網絡數據包緩沖,避免OOM。磁盤I/O優化
ext4
或XFS
文件系統(XFS對大文件支持更好),掛載時添加noatime
(不更新文件訪問時間)、nodiratime
(不更新目錄訪問時間)選項,減少不必要的磁盤寫入;log.segment.bytes
設置為1GB(默認1GB,增大日志段大小,減少日志刷新頻率);log.flush.interval.messages
設置為10000(每1萬條消息刷新一次)、log.flush.interval.ms
設置為1000(每1秒刷新一次),平衡數據持久性與寫入性能。vm.dirty_ratio
(臟頁占比,如20%)、vm.dirty_background_ratio
(后臺刷臟頁閾值,如10%),控制臟頁寫回磁盤的頻率;vm.swappiness
設置為1(默認60,減少交換空間使用,避免頻繁磁盤I/O);使用deadline
或noop
I/O調度器(noop
適合SSD,減少調度開銷)。網絡優化
num.network.threads
設置為CPU核心數的2/3,處理網絡請求;socket.send.buffer.bytes
與socket.receive.buffer.bytes
設置為1MB(默認100KB),增加網絡緩沖區大小,提高網絡吞吐量。監控與迭代
kafka-topics.sh --describe
查看Topic詳情、kafka-consumer-groups.sh
監控消費者滯后)或第三方工具(如Prometheus+Grafana監控集群指標、JMX監控JVM狀態)。num.io.threads
或升級SSD),持續優化集群性能。