Kafka參數優化 — IO系統優化
一、 IO Scheduler
Centos6系統默認的IO調度器是CFQ(Completely Fair Queuing),Kafka是順序IO讀寫模型,使用Deadline和NOOP無疑是更好地選擇。
Deadline:對于讀寫操作有截止時間,對讀和寫操作用兩條不同的隊列管理,可以解決讀取饑餓的現象。因為操作系統對讀請求是同步處理的,寫入請求可以異步處理。操作系統可以數據寫到內存,然后對IO隊列中的請求做合并,提高IO的吞吐量。通過設置read_expire < write_expire時間,避免讀取操作處于饑餓調度的狀態。對于數據庫存儲應用,Deadline是最佳的IO Scheduler,甚至很多PCIE卡作為設備內置默認參數。
NOOP:是建立在FIFO調度模型之上的,并合相鄰IO請求。Noop容易出現讀取操作饑餓現象,使用NOOP調度,需要磁盤有足夠的IO能力。對于SSD基于閃存技術存儲介質和SAN存儲,NOOP也是有限選擇的調度器。
CFQ是對每個進程維護一個IO隊列,IO Scheduler對每個IO隊列輪詢,對于不同的進程IO請求處理是公平的,平均IO請求響應時間很小。每個進程隊列可以設置IO優先級使得有更多的調度時間片。比較適合離散的讀寫模型。
注意的是,傳統的IO Elevator調度算法是基于減小機械盤磁頭尋道時間和提高吞吐量目的設計的。IO Scheduler的選用需要根據硬件設備和應用的IO請求模式來決定。
二、 充分利用內存提高kafka讀寫性能
之前也提到過了,數據寫入到磁盤可以異步進行,先把數據放到內存中,在集中的寫到外部存儲上。dirty_ratio 和 dirty_background_ration適當增大,充分利用內存和文件緩存buffer。
dirty_ratio,系統總內存的百分比,太小導致系統強制臟頁寫回到磁盤,這個會阻塞系統接受寫入請求。
dirty_background_ratio,文件系統的寫入緩沖區的大小,達到這個百分比時,pdflush進程開始啟動,把數據寫回到磁盤,但是不影響正常的讀寫請求。
原則:dirty_background_ratio < dirty_ratio
但是還有個疑問,dirty page什么時候寫回到磁盤?這個是由dirty_writeback_centisecs和dirty_expire_centisecs兩個參數控制的。
dirty_writeback_centisecs,控制 pdflush/flush/kdmflush等進程的喚醒時間。
dirty_expire_centisecs,控制dirty page刷盤時間點。
減小這兩個參數,可以使數據快速落盤,避免os crash引起的數據的丟失。另外,減小dirty_writeback_centisecs和dirty_expire_centisecs,解決IO Spike現象。
通過磁盤監控發現寫入量wrqm/s和awit時間波動很大。
page cache中dirty apge的數量出現驟減。
對于kafa來說,數據append總以方式追加到文件末尾,因而內存中的dirty page很少被再次更新。合理做法是把dirty page快速的flush到磁盤上,而不是默認的是30s執行一次write back。這樣可以大幅度減少單次fluhs操作的數據量,消除io-wait突然增高的現象。
dirty_writeback_centisecs=100,每1s中喚醒一次pdflush進程。
dirty_expire_centisecs=100,dirty page過了一秒就從內存寫回到磁盤。
下圖是io await的優化效果,經過參數調整之后,IO-await有明顯的下降。
三、文件系統
我們生產上常用多塊SATA盤做raid10,磁盤容量巨大時,仍然使用ext4文件系統,很容易格式化異常(需要系統補丁支持)。Ext4系統支持最大16TB的分區,而是用XFS文件系統可以達到100TB+。相比Ext4,XFS文件系統性能更好,官方也推薦使用。而穩定稍弱一點,很多參數也不需要優化。主要注意兩個參數的優化:
1)nobarrier,XFS可以有數據丟失保護機制,因而可以關閉底層硬件的強制刷盤策略,何況在線機器還有raid卡保護。
2)noatime,完全沒有必要的文件系統元數據更新。
推薦的XFS掛載參數:rw,noatime,nodiratime,noikeep,nobarrier,allocsize=128M,attr2,largeio,inode64,swalloc 。關于文件系統方面,主要參考官方的建議。
參考資料:
File Cache:https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/
Ext4:https://en.wikipedia.org/wiki/Ext4
Kafka: http://kafka.apache.org/documentation.html#appvsosflush
掃描二維碼推送至手機訪問。
版權聲明:本文由短鏈接發布,如需轉載請注明出處。
本文鏈接:http://www.virginiabusinesslawupdate.com/article_315.html