關於Kafka部署優化的一點建議


網絡和IO線程配置優化

配置參數

  • num.network.threads:Broker處理消息的最大線程數
  • num.io.threads:Broker處理磁盤IO的線程數

優化建議

  • 一般num.network.threads主要處理網絡io,讀寫緩沖區數據,基本沒有io等待,配置線程數量為cpu核數加1
  • num.io.threads主要進行磁盤io操作,高峰期可能有些io等待,因此配置需要大些。配置線程數量為cpu核數2倍,最大不超過3倍.

日志保留策略配置

當kafka server的被寫入海量消息后,會生成很多數據文件,且占用大量磁盤空間,如果不及時清理,可能磁盤空間不夠用,kafka默認是保留7天。

優化建議

  • 減少日志保留時間,建議三天或則更多時間。log.retention.hours=72
  • 段文件配置1GB,有利於快速回收磁盤空間,重啟kafka加載也會加快(如果文件過小,則文件數量比較多,kafka啟動時是單線程掃描目錄(log.dir)下所有數據文件),文件較多時性能會稍微降低。log.segment.bytes=1073741824

log數據文件刷盤策略

為了大幅度提高producer寫入吞吐量,需要定期批量寫文件

優化建議

  • 每當producer寫入10000條消息時,刷數據到磁盤。log.flush.interval.messages=10000
  • 每間隔1秒鍾時間,刷數據到磁盤。log.flush.interval.ms=1000

replica復制配置

每個follow從leader拉取消息進行同步數據,follow同步性能由這幾個參數決定:

  • num.replica.fetchers:拉取線程數
  • replica.fetch.min.bytes:拉取最小字節數
  • replica.fetch.min.bytes:拉取最大字節數
  • replica.fetch.wait.max.ms:最大等待時間

優化建議

  • num.replica.fetchers 配置多可以提高follower的I/O並發度,單位時間內leader持有更多請求,相應負載會增大,需要根據機器硬件資源做權衡
  • replica.fetch.min.bytes=1 默認配置為1字節,否則讀取消息不及時
  • replica.fetch.max.bytes= 5 * 1024 * 1024 默認為1MB,這個值太小,5MB為宜,根據業務情況調整
  • replica.fetch.wait.max.ms follow拉取頻率,頻率過高,會導致cpu飆升,因為leader無數據同步,leader會積壓大量無效請求情況

配置jmx服務

kafka server中默認是不啟動jmx端口的,需要用戶自己配置,修改方式是修改kafka-run-class.sh文件,在文件的最前面添加一行JMX_PORT=8868


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM