Kafka緩沖機(jī)制有什么作用-創(chuàng)新互聯(lián)

這篇文章主要講解了“Kafka緩沖機(jī)制有什么作用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Kafka緩沖機(jī)制有什么作用”吧!

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的順義網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

1、Kafka的客戶端緩沖機(jī)制

在客戶端發(fā)送消息給kafka服務(wù)器的時(shí)候,一定是有一個(gè)內(nèi)存緩沖機(jī)制的。也就是說(shuō),消息會(huì)先寫(xiě)入一個(gè)內(nèi)存緩沖中,然后直到多條消息組成了一個(gè)Batch,才會(huì)一次網(wǎng)絡(luò)通信把Batch發(fā)送過(guò)去。

2、內(nèi)存緩沖造成的頻繁GC問(wèn)題

這種內(nèi)存緩沖機(jī)制的本意,其實(shí)就是把多條消息組成一個(gè)Batch,一次網(wǎng)絡(luò)請(qǐng)求就是一個(gè)Batch或者多個(gè)Batch。這樣每次網(wǎng)絡(luò)請(qǐng)求都可以發(fā)送很多數(shù)據(jù)過(guò)去,避免了一條消息一次網(wǎng)絡(luò)請(qǐng)求。從而提升了吞吐量,即單位時(shí)間內(nèi)發(fā)送的數(shù)據(jù)量。

但是問(wèn)題來(lái)了,大家可以思考一下,一個(gè)Batch中的數(shù)據(jù),會(huì)取出來(lái)然后封裝在底層的網(wǎng)絡(luò)包里,通過(guò)網(wǎng)絡(luò)發(fā)送出去到達(dá)Kafka服務(wù)器。這個(gè)Batch里的數(shù)據(jù)都發(fā)送過(guò)去了,現(xiàn)在Batch里的數(shù)據(jù)應(yīng)該怎么處理?這些Batch里的數(shù)據(jù)此時(shí)可還在客戶端的JVM的內(nèi)存里??!那么此時(shí)從代碼實(shí)現(xiàn)層面,一定會(huì)嘗試避免任何變量去引用這些Batch對(duì)應(yīng)的數(shù)據(jù),然后嘗試觸發(fā)JVM自動(dòng)回收掉這些內(nèi)存垃圾。

這樣不斷的讓JVM回收垃圾,就可以不斷的清理掉已經(jīng)發(fā)送成功的Batch了,然后就可以不斷的騰出來(lái)新的內(nèi)存空間讓后面新的數(shù)據(jù)來(lái)使用。這種想法很好,但是實(shí)際線上運(yùn)行的時(shí)候一定會(huì)有問(wèn)題,大的問(wèn)題,就是JVM GC問(wèn)題。JVM GC在回收內(nèi)存垃圾的時(shí)候,他會(huì)有一個(gè)“Stop the World”的過(guò)程,也就是垃圾回收線程運(yùn)行的時(shí)候,會(huì)導(dǎo)致其他工作線程短暫的停頓,這樣可以便于他自己安安靜靜的回收內(nèi)存垃圾。

這個(gè)也很容易想明白,畢竟你要是在回收內(nèi)存垃圾的時(shí)候,你的工作線程還在不斷的往內(nèi)存里寫(xiě)數(shù)據(jù),制造更多的內(nèi)存垃圾,那你讓人家JVM怎么回收垃圾?這就好比在大馬路上,如果地上有很多垃圾,現(xiàn)在要把垃圾都掃干凈,最好的辦法是什么?大家都讓開(kāi),把馬路空出來(lái),然后清潔工就是把垃圾清理干凈。但是如果清潔工在清掃垃圾的時(shí)候,結(jié)果一幫人在旁邊不停的嗑瓜子扔瓜子殼,吃西瓜扔西瓜皮,不停的制造垃圾,你覺(jué)得清潔工內(nèi)心啥感受?當(dāng)然是很憤慨了,照這么搞,地上的垃圾永遠(yuǎn)的都搞不干凈了!

現(xiàn)在JVM GC是越來(lái)越先進(jìn),從CMS垃圾回收器到G1垃圾回收器,核心的目標(biāo)之一就是不斷的縮減垃圾回收的時(shí)候,導(dǎo)致其他工作線程停頓的時(shí)間。所以現(xiàn)在越是新款的垃圾回收器導(dǎo)致工作線程停頓的時(shí)間越短,但是再怎么短,他也還是存在??!而如何盡可能在自己的設(shè)計(jì)上避免JVM頻繁的GC就是一個(gè)非??简?yàn)水平的事兒了。

3、Kafka設(shè)計(jì)者實(shí)現(xiàn)的緩沖池機(jī)制

在Kafka客戶端內(nèi)部,對(duì)這個(gè)問(wèn)題實(shí)現(xiàn)了一個(gè)非常優(yōu)秀的機(jī)制,就是緩沖池的機(jī)制。每個(gè)Batch底層都對(duì)應(yīng)一塊內(nèi)存空間,這個(gè)內(nèi)存空間就是專(zhuān)門(mén)用來(lái)存放寫(xiě)入進(jìn)去的消息的。然后當(dāng)一個(gè)Batch被發(fā)送到了kafka服務(wù)器,這個(gè)Batch的數(shù)據(jù)不再需要了,就意味著這個(gè)Batch的內(nèi)存空間不再使用了。此時(shí)這個(gè)Batch底層的內(nèi)存空間不要交給JVM去垃圾回收,而是把這塊內(nèi)存空間給放入一個(gè)緩沖池里。這個(gè)緩沖池里放了很多塊內(nèi)存空間,下次如果你又有一個(gè)新的Batch了,那么不就可以直接從這個(gè)緩沖池里獲取一塊內(nèi)存空間就ok了?然后如果一個(gè)Batch發(fā)送出去了之后,再把內(nèi)存空間給人家還回來(lái)不就好了?以此類(lèi)推,循環(huán)往復(fù)。

感謝各位的閱讀,以上就是“Kafka緩沖機(jī)制有什么作用”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Kafka緩沖機(jī)制有什么作用這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)站名稱:Kafka緩沖機(jī)制有什么作用-創(chuàng)新互聯(lián)
瀏覽地址:http://muchs.cn/article12/csgjgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、標(biāo)簽優(yōu)化、電子商務(wù)品牌網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、靜態(tài)網(wǎng)站

廣告

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

商城網(wǎng)站建設(shè)