誰是性能殺手?Kafka多Topic下啟用SSL時延增大問題分析-創(chuàng)新互聯(lián)

問題背景

創(chuàng)新互聯(lián)長期為成百上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為榆陽企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè),榆陽網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

項目中將Kafka接口進(jìn)行RESTful封裝,在使用RESTful接口進(jìn)行性能測試時,發(fā)現(xiàn)Topic數(shù)增多后,開啟SSL與非SSL進(jìn)行測試,發(fā)現(xiàn)開啟SSL后性能下降得厲害。例如600個Topic總數(shù)每個Topic3分區(qū)3副本的場景下,使用1200個線程只發(fā)送10個Topic,開啟SSL的TPS只有3100,但是不開啟SSL性能達(dá)到11000。

其中測試客戶端會啟動多個線程,每個線程采用同步發(fā)送的方式調(diào)用RESTful API發(fā)送,即每次發(fā)送成功一條后才發(fā)送下一條。 客戶端會根據(jù)發(fā)送線程在Topic數(shù)之間進(jìn)行均分,例如1200個線程發(fā)送10個Topic,則每個Topic同時有120個線程進(jìn)行發(fā)送。

定位與分析過程

1.SSL性能下降

1.定位分析

開啟SSL是會導(dǎo)致性能下降的, 主要來自于CPU的耗時與JVM的具體實現(xiàn),參見Kafka官網(wǎng)的解釋:

誰是性能殺手?Kafka多Topic下啟用SSL時延增大問題分析

從我們之前測試的結(jié)果來看,高可靠場景SSL性能下降并沒有太厲害(從2.3W TPS下降到2.1W TPS)。應(yīng)該是觸發(fā)了某些其他問題。通過JStack查看啟動SSL下的堆棧,發(fā)現(xiàn)存在一些發(fā)送線程被Block?。?/p>

誰是性能殺手?Kafka多Topic下啟用SSL時延增大問題分析誰是性能殺手?Kafka多Topic下啟用SSL時延增大問題分析

這個堆棧里面做的事情,是來自于java.security.SecureRandom要產(chǎn)生隨機(jī)數(shù),采用”SHA1PRNG”算法。在sun/oracle的jdk里,這個隨機(jī)算法的的實現(xiàn)在底層依賴到操作系統(tǒng)提供的隨機(jī)數(shù)據(jù),默認(rèn)用的是/dev/random,在讀取時,/dev/random設(shè)備會返回小于熵池噪聲總數(shù)的隨機(jī)字節(jié)。/dev/random可生成高隨機(jī)性的公鑰或一次性密碼本。若熵池空了,對/dev/random的讀操作將會被阻塞,直到收集到了足夠的環(huán)境噪聲為止。這個問題在網(wǎng)上也查到,主要是JDK提供的SecureRandom函數(shù)存在1個全局的鎖,在熵源不足且SSL線程多的時候很容易碰到這個問題,具體見:

https://github.com/netty/netty/issues/3639

http://bugs.java.com/view_bug.do?bug_id=6521844

2.解決措施

措施一:更新JDK

目前這個問題是在OpenJDK 1.8中解決了,可以通過升級JDK到使用OpenJDK,但是這個方案不太好替換,并且OpenJDK和原來有什么不兼容還不清楚。

措施二:采用非阻塞的熵源: /dev/urandom

通過設(shè)置-Djava.security.egd=file:/dev/./urandom宏,隨機(jī)數(shù)時選擇/dev/urandom,它會重復(fù)地使用熵池中的數(shù)據(jù)以產(chǎn)生偽隨機(jī)數(shù)據(jù)避免阻塞,不過隨機(jī)安全性會降低。

2.Topic多情況下性能下降

1.定位分析

發(fā)現(xiàn)在Topic600個情況下,非SSL與SSL的時延其實差距并沒有原先發(fā)現(xiàn)的問題那么大,以下是我們用SDK接口測試的時延數(shù)據(jù):

600個 Topic總量下,400個線程同時發(fā)送10個Topic,非SSL與SSL時延對比:

誰是性能殺手?Kafka多Topic下啟用SSL時延增大問題分析

可以看出時延差距在20%之內(nèi),主要的時延增加來自于Topic增多導(dǎo)致的。

為什么Topic增多會導(dǎo)致時延增多?針對這個問題通過在程序進(jìn)行打點測試,以下是在不同的Topic數(shù)量情況下,針對10個Topic,總發(fā)送5000條消息的場景下,非SSL時延對比:

誰是性能殺手?Kafka多Topic下啟用SSL時延增大問題分析

其中總時延 = 消息的待發(fā)送隊列等待時延 + 服務(wù)端處理平均時延 + 網(wǎng)絡(luò)發(fā)送與響應(yīng)時延。

從上面的表格可以看出基本上每個處理環(huán)節(jié)上都增加了時延4~5倍。為什么會出現(xiàn)這種情況?分析如下可能點:

1、磁盤的寫速度變慢

2、Server由于Topic多需要過濾信息變慢

3、復(fù)制處理在多Topic下變慢。即使無數(shù)據(jù),多Topic下復(fù)制線程也會一直發(fā)送空請求

4、Topic多資源占用大

通過逐一分析、排除與測試,主要原因還是在第三點:服務(wù)端在復(fù)制處理在Topic數(shù)量多的情況下變慢導(dǎo)致的。

例如10個Topic的時候,如果用10個復(fù)制線程(目前性能測試就是配置10)用于副本復(fù)制,則每個復(fù)制線程會分配到1個Topic;而當(dāng)Topic有600個的時候,如果還是10個復(fù)制線程用于副本復(fù)制,則每個復(fù)制線程會分配到60個Topic。 如果此時只發(fā)送前10個Topic的時候,很有可能只有1個復(fù)制線程在工作,其他的復(fù)制線程由于分配到的Topic沒有數(shù)據(jù),基本處于空閑狀態(tài)。

2.解決措施

既然復(fù)制線程變慢,我們可以通過繼續(xù)增加復(fù)制線程的方式提高性能,在600個Topic場景只發(fā)送10個Topic場景下,我們把復(fù)制線程提升到60個,這樣10個Topic能盡可能分配到不同的復(fù)制線程中,提高了復(fù)制的速度。以下是實際測試結(jié)果:

誰是性能殺手?Kafka多Topic下啟用SSL時延增大問題分析

可以看到增加到60個fetch線程后,時延變?yōu)?00ms左右。同時原來的環(huán)境下,通過增加復(fù)制線程(修改配置num.replica.fetchers=60),在原環(huán)境下1200個發(fā)送線程即使啟動SSL,性能也能達(dá)到11000+。

性能提升措施總結(jié)

RESTful API是同步接口,但是內(nèi)部使用的SDK接口是異步發(fā)送。根據(jù)高可靠場景下異步發(fā)送的能力能達(dá)到2W+ TPS來看,主要還是同步接口的并發(fā)壓力上不去導(dǎo)致的,可以通過以下措施來改進(jìn):

1、增加請求等待時間linger.ms

通過在客戶端增加參數(shù)linger.ms,使得每個請求回等待指定的時間后再發(fā)送,使得每個請求可以發(fā)送更多的數(shù)據(jù),即增加合包率。

2、增加同步發(fā)送對同1個Topic的并發(fā)數(shù)量

3、減少Topic的分區(qū)數(shù)

因為目前RESTful API并沒有用盡服務(wù)端的能力(1個分區(qū)的能力瓶頸還沒達(dá)到),默認(rèn)的3個分區(qū)是浪費資源,并且會導(dǎo)致合包率降低,如果采用1個分區(qū),則同樣的壓力下,合包率能提升3倍,這樣性能也能提升。這個措施還可以支持更多的Topic數(shù)。

4、增加復(fù)制線程

5、考慮提供異步發(fā)送SDK接口

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

本文標(biāo)題:誰是性能殺手?Kafka多Topic下啟用SSL時延增大問題分析-創(chuàng)新互聯(lián)
標(biāo)題URL:http://muchs.cn/article26/dcocjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)頁設(shè)計公司、虛擬主機(jī)、企業(yè)網(wǎng)站制作網(wǎng)站策劃、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名