《kafka權威指南》讀書筆記-作業系統調優篇
大部分linux發行版預設的核心調優引數配置已經能夠滿足大多數應用程式的執行需求,不過還是可以通過調整一些引數來進一步提公升kafka的效能。這些引數主要與虛擬記憶體,網路子系統和用來儲存日誌片段的磁碟掛在點有關。這些引數一般配置在「/etc/sysctl.conf」 檔案裡,不過在對核心引數進行調整時,最好參考官方提供的作業系統文件。
一.虛擬記憶體
一般來說,linux的虛擬記憶體會根據系統的工作負荷進行自動調整。我們可以對交換分割槽的處理方式和記憶體髒頁進行調整,從而讓kafka更好的處理工作負載。對於大多數依賴吞吐量的應用程式來說,要盡量避免記憶體交換。記憶體頁和磁碟之間的交換對kafka各方面的效能都有重大影響。kafka大量地使用系統頁面快取,如果虛擬記憶體被交換到磁碟,說明已經沒有多餘的記憶體可以分配該頁面快取啦。
先前,人們建議把vm.swapiness設定為0,它意味著「除非發生記憶體益處,否則不要進行記憶體交換」。直到linux核心3.5-rcl版本發布,這個值的意義才發生了變化。這個變化被一直到其他的發行版本上,包括redhat企業版核心2.6.32-303。在發生變化之後,0意味著「在任何情況下都不要發生交換」。所以現在建議把這個值設定為1。
詳情請參考:
二.磁碟與檔案系統
除了選擇合適的磁碟硬體裝置和使用raid外,檔案系統是效能影響的另乙個重要因素。有很多中檔案系統可供選擇,不過對於本地檔案系統來說,ext4(***可擴充套件檔案系統)和xfs最為常見。近來,xfs稱為很多linux發行版預設的檔案系統,因為它只需要做少量的調優即就可以承擔大部分的工作負荷,比ext4具有更好的表現。ext4也可以做得很好,但需要做更多的調優,存在較大的風險。其中包括設定設定更長的時間間隔(預設是5)一邊降低重新整理的頻率。ext4還引入了塊分配延遲,一旦系統崩潰,更容易造成資料的丟失和檔案系統損壞。xfs也使用分配延遲演算法,不過比ext4的要安全些。
xfs為kafka提供了更好的效能,除了有檔案系統提供的自動優化之外,無需額外的調優。批量寫入具有更高的效率,可以提公升整體的i/o吞吐量。換句話說,這種效能的提公升主要影響的是kafka的寫入能力。根據官網的測試報告,使用xfs的寫入時間大約是160ms,而使用ext4大約是250ms。因此生產環境中最好使用xfs檔案系統。
不管使用哪一種檔案系統來儲存日誌片段,最好要對掛在點的noatime引數進行合理的設定。檔案元資料報括三個時間戳:建立時間(ctime),最後修改時間(mtime)以及最後訪問時間(atime)。預設情況下,每次檔案被讀取後,都會更新atime,這會導致大量的磁碟讀寫操作,而且atime屬性用處不大,除非某些應用程式想要某個檔案在最後一次修改後有沒有訪問過(這種情況可以使用retime)。kafka用不到該屬性,所以完全可以把它禁用掉。為掛載點設定noatime引數可以防止更新atime,但不會影響ctime和mtime。
對於xfs使用者而言,推薦設定largeio引數,該引數將影響stat呼叫返回的i/o大小。對於大資料量的磁碟寫入操作而言,它能夠提公升一定的效能。largeio是標準的mount屬性,故可使用與nobh相同的方式設定。
我們只需要修改「/etc/fstab」這個開機啟動時會載入的檔案即可,它主要時記錄作業系統開機自動掛載的事情,我們可以通過「df -h」檢視磁碟掛載的情況。我們需要修改的地方我已經標識出來啦:
三.網路
這裡指的的是os級別的socket緩衝區大小,而非kafka自己提供的socket緩衝區引數。事實上,kafka自己的引數將其設定為64kb,這對於普通的內網環境而言是足夠的,因為內網環境下往返時間(round-trip time,rrt)一般都很低,不會產生過多的資料堆積在socket緩衝區中,但對於那些跨地區的資料傳輸而言,僅僅增加kafka引數就不夠了,因為前者也受限於os級別的設定。因此如果是做遠距離的資料傳輸,那麼建議將os級別的socket緩衝區調大,比如增加到128kb,甚至更大。
還有就是關掉沒有用不到的網路服務,比如ipv6等,具體實操請參考我的筆記:
四.檔案描述符限制優化
kafka會頻繁地建立並修改檔案系統中的檔案,這包括訊息的日誌檔案,索引檔案以及各種元資料管理檔案等。我們可以使用ulimit進行資源管控,設定檔案開啟資料和使用者開啟程序數等等,我們也可以編輯配置檔案(/etc/security/limits.conf)並新增以下內容:(新增後推出當前終端,下一次登陸伺服器時就會生效!)
[root@yinzhengjie ~]# cat /etc/security/limits.conf | grep -v ^# | grep -v ^$除了上面的引數,我們還可以適當調大使用者開啟的程序數:* soft nofile 32768
* hard nofile 1048576
* soft nproc 65536
*hard nproc unlimited
*soft memlock unlimited
*hard memlock unlimited
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# cat /etc/security/limits.d/20-nproc.conf | grep -v ^# | grep -v ^$五.jvm引數優化鑑於kafka broker主要使用的時堆外記憶體,即大量使用作業系統的頁快取,因此並不需要為jvm分配太多的記憶體。在實際使用中,通常broker設定不超過6gb的堆空間,咱們關於kafka的jvm調優物件主要針對2個配置檔案,即:「kafka-run-class.sh」和「kafka-server-start.sh」兩個指令碼(這兩個指令碼都在apache kafka安裝包解壓後的bin目錄下)。* soft nproc 40960
root soft nproc unlimited
[root@yinzhengjie ~]#
1>."kafka-run-class.sh"
找到「# jmx settings」 這一行,我們可以自定義jmx的埠,舉個案例如下:
if [ -z "找到「# generic jvm settings you want to add」這一行,你可以自行新增jvm的引數列表,舉個案例如下:(注意,這個指令碼會被kafka-server-start.sh指令碼呼叫,因此這裡配置了就最好不要在其他位置配置喲!)$kafka_jmx_opts
" ]; then
kafka_jmx_opts="
-dcom.sun.management.jmxremote -dcom.sun.management.jmxremote.port=12345 -dcom.sun.management.jmxremote.authenticate=false -dcom.sun.management.jmxremote.ssl=false
"fi
# generic jvm settings you want to add2>."kafka-server-start.sh"我們可以找到「export kafka_heap_opts="-xmx1g -xms1g」這一行引數,它定義了kafka啟動的堆記憶體大小,一般推薦不要超過6g,因為kafka並不是很吃記憶體,它主要吃的的是離堆記憶體。因此我們需要把更多的記憶體留給os。而kafka在寫資料時,資料並不是真正寫入磁碟,而是寫到頁快取中,而這些頁快取就是os的記憶體空間,最終資料由作業系統負責寫入磁碟。kafka並不負責底層直接和記憶體進行互動。if [ -z "
$kafka_opts
" ]; then
kafka_opts="
-xmx6g -xms6g -xx:metaspacesize=128m -xx:+useg1gc -xx:maxgcpausemillis=20 -xx:initiatingheapoccupancypercent=35 -xx:g1heapregionsize=16m -xx:minmetaspacefreeratio=50
-xx:maxmetaspacefreeratio=85
"fi
if [ "x$kafka_heap_opts
" = "
x" ]; then
export kafka_heap_opts="
-xmx5g -xms5g
"fi
《CSS權威指南》讀書筆記
第二章 選擇器 第三章 結構和層疊 第四章 值和單位 第五章 字型 第六章 文字屬性 第七章 基本視覺格式化 第八章 內邊距邊框和外邊距 第九章 顏色和背景 第十章 浮動和定位 第十一章 表布局 第十二章 列表與生成內容 第十三章 使用者介面樣式 第十四章 非螢幕 import url sheet....
Http權威指南讀書筆記
1.1 http使用的是可靠的資料傳輸協議。1.3 型別 mime型別 multipurpose internet mail extension多用途網際網路郵件擴充套件 是為了解決在不同的電子郵件系統之間搬移報文時存在的問題。mime在電子郵件系統中工作得非常好,因此http也採納了它,用它來描述...
css權威指南 讀書筆記
網上看見推薦的書總是喜歡買回家,但是大多數時候都不會立即就看,都是在書櫥裡蒙上了一層灰塵。從畢業到現在,由於公司業務原因,寫js多餘css,所以就想系統地看看css,並且做一些練習,於是就開始看 css權威指南 看到了第六章,初步感覺,對於工作一年的我來說,很簡單,當然也有一些我不熟悉的知識點,於是...