kafka的集群規(guī)劃主要需要考慮以下幾個(gè)方面:
- 操作系統(tǒng):最好選擇Lunix系統(tǒng)学搜,因Linux提供的epoll模型使用的是I/O多路復(fù)用+信號(hào)驅(qū)動(dòng)I/O的結(jié)合怔接;且Linux可以實(shí)現(xiàn)零拷貝技術(shù)现诀,而Windows需要JDK1.8之后才支持零拷貝技術(shù)橙困。
- 磁盤規(guī)劃:普通的JBOD(Just Bunch Of Disks)和SSD的選擇依啰,Kafka是對(duì)磁盤的順序訪問,所有減少了磁盤尋道道開銷案训,很大程度上抵消了SSD帶來的優(yōu)勢(shì)买置,而且JBOD磁盤的容量大、價(jià)格低又是另一優(yōu)勢(shì)强霎。Kafka從框架層面就支持了副本機(jī)制忿项,所以不再需要磁盤陣列來實(shí)現(xiàn)冗余,如果再以磁盤陣列的話城舞,對(duì)于空間來講也是一種浪費(fèi)轩触。
- 磁盤容量:
在磁盤規(guī)劃的過程中,需要結(jié)合以下幾點(diǎn)進(jìn)行考量:
1家夺、新增消息數(shù)
2脱柱、消息留存時(shí)間
3、平均消息大小
4拉馋、副本數(shù)
5榨为、是否啟用壓縮
如:client每天產(chǎn)生1億條消息,每條消息保存兩份并保留一周時(shí)間煌茴,平均每條消息的大小是1KB随闺,那么我們需要為Kafka規(guī)劃多大的磁盤空間呢?
每天產(chǎn)生的消息會(huì)占用:1億 * 2 * 1KB / 1000 / 1000 = 200GB
最好預(yù)留10%的磁盤空間給其他數(shù)據(jù)文件(索引文件等)的存儲(chǔ)蔓腐,10GB矩乐。
那么整體磁盤規(guī)劃就應(yīng)該210 * 7 = 1.5T。這是在消息無壓縮的情況下回论,如果消息啟用壓縮散罕,假設(shè)壓縮比為0.5分歇,那么整體磁盤的容量就是0.75TB。 - 內(nèi)存規(guī)劃:Kafka大量使用了操作系統(tǒng)的頁(yè)緩存欧漱,反而堆內(nèi)存中并沒有使用太多职抡,一般堆內(nèi)存最好不要超過6GB,而頁(yè)緩存應(yīng)該提供在10GB以上的內(nèi)存空間硫椰,總之對(duì)于內(nèi)存規(guī)劃的建議如下:
盡量分配更多的內(nèi)存給操作系統(tǒng)的page cache。
不要為broker設(shè)置過大的堆內(nèi)存萨蚕,最好不要超過6GB靶草。
page cache大小至少大于一個(gè)日志段堆大小。 - CPU規(guī)劃:
使用多核系統(tǒng)岳遥,CPU核數(shù)最好大于8
如果使用Kafka 0.10.0.0之前的版本或client端與broker端消息版本不一致(若無閑事配置奕翔,這種情況多半由client和broker版本不一致造成),且考慮多配置一些資源已防止消息解壓縮操作消耗過多CPU浩蓉。 - 帶寬規(guī)劃:
盡量使用高速網(wǎng)絡(luò)派继。
根據(jù)自身網(wǎng)絡(luò)條件和帶寬來評(píng)估Kafka集群機(jī)器數(shù)量。
避免使用跨機(jī)房網(wǎng)絡(luò)捻艳。
如:假設(shè)用戶網(wǎng)絡(luò)環(huán)境中的帶寬是1GB/s驾窟,用戶的業(yè)務(wù)目標(biāo)是每天用1小時(shí)來處理1TB的業(yè)務(wù)消息,那么在這種情況下Kafka到底需要多少臺(tái)機(jī)器呢认轨?
預(yù)估計(jì)算:網(wǎng)絡(luò)帶寬是1GB/s绅络,假設(shè)分配的機(jī)器為Kafka專屬使用且為Kafka分配70%的帶寬資源(考慮到機(jī)器上還有其他的進(jìn)程使用網(wǎng)絡(luò)且網(wǎng)卡通常不能用滿,超過一定閾值可能出現(xiàn)網(wǎng)絡(luò)丟包情況嘁字,因此70%的設(shè)定是合理的)恩急,那么kafka每臺(tái)broker的帶寬就是1GB/s * 0.7 = 710MB/s。
但事實(shí)上這是Kafka所使用的最高帶寬纪蜒,用戶不能奢望Kafka集群平時(shí)就一直使用如此多的帶寬衷恭,畢竟萬一碰上突發(fā)流量,會(huì)極容易把網(wǎng)卡“打滿”纯续,因此在70%的基礎(chǔ)上随珠,一般再截取1/3,即710 / 3 = 240MB/s猬错。
如果要在1小時(shí)內(nèi)處理1TB的業(yè)務(wù)消息牙丽,也就是每秒2336MB數(shù)據(jù),那么至少需要2336/240 = 10臺(tái)機(jī)器兔魂。若副本數(shù)量是2烤芦,那么這個(gè)數(shù)字還需要再翻1倍。即20臺(tái)析校。