=======================================================================
Kafka處理請求不區(qū)分優(yōu)先級,但這種絕對公平的策略有時會發(fā)生問題。
比如:創(chuàng)建一個單分區(qū)雙副本的主題,當(dāng)時集群中的Broker A機(jī)器保存了分區(qū)的Leader副本,Broker B保存了Follower副本。突然業(yè)務(wù)激增,Broker A瞬間積壓大量未處理PRODUCE請求。運維“不湊巧”執(zhí)行了次Preferred Leader選舉,將Broker B顯式地調(diào)整成了Leader。
若Producer把a(bǔ)cks設(shè)為all,那在LeaderAndIsr請求(負(fù)責(zé)調(diào)整副本角色,比如Follower和Leader角色轉(zhuǎn)換)之前積壓的那些PRODUCE請求就無法正常完成,因為這些請求要一直等待ISR中所有Follower副本同步完成。
但此時,Broker B成為了Leader,它上面的副本停止了拉取消息,這就可能出現(xiàn)一種結(jié)果:這些未完成的PRODUCE請求會一直保存在Broker A上的Purgatory緩存中。Leader/Follower的角色轉(zhuǎn)換,導(dǎo)致無法完成副本間同步,所以這些請求無法被成功處理,最終Broker A拋出超時異常,返回給Producer程序。
Purgatory緩存是Broker端暫存延時請求的地方。
這就是因為對請求不區(qū)分優(yōu)先級。
1 基本概念
=====================================================================
1.1 Data plane & Control plane
Data plane和Control plane的字面意思是數(shù)據(jù)面和控制面,各自對應(yīng)數(shù)據(jù)類請求和控制類請求。
Kafka請求類型分為:
- 數(shù)據(jù)類請求
Data plane負(fù)責(zé)處理數(shù)據(jù)類請求
- 控制類請求
Control plane負(fù)責(zé)處理控制類請求
Controller與Broker交互的請求類型有如下種類:
-
LeaderAndIsrRequest
-
StopReplicaRequest
-
UpdateMetadataRequest
都屬控制類請求,通常應(yīng)該被賦予高優(yōu)先級,比如PRODUCE和FETCH請求。
SocketServer負(fù)責(zé)對這兩大類請求區(qū)分處理。
1.2 監(jiān)聽器(Listener)
區(qū)分?jǐn)?shù)據(jù)類請求和控制類請求不同處理方式的主要途徑。即創(chuàng)建多組監(jiān)聽器分別執(zhí)行數(shù)據(jù)類和控制類請求的處理。
- Kafka Broker端如下參數(shù)用以配置監(jiān)聽器
監(jiān)聽器定義為
EndPoint類
屬性
- host
Broker主機(jī)名。
- port
Broker端口號。
- listenerName
監(jiān)聽器名稱。目前預(yù)定義的名稱包括
-
PLAINTEXT
-
SSL
-
SASL_PLAINTEXT
-
SASL_SSL
Kafka允許自定義其他監(jiān)聽器名稱,比如CONTROLLER、INTERNAL。
-
securityProtocol:監(jiān)聽器使用的安全協(xié)議。Kafka支持4種安全協(xié)議
-
PLAINTEXT
-
SSL
-
SASL_PLAINTEXT
-
SASL_SSL
Broker端參數(shù)
比如若Broker端參數(shù)配置如下:
配置3個監(jiān)聽器,分別是CONTROLLER、INTERNAL和EXTERNAL,使用的安全協(xié)議分別是PLAINTEXT、PLAINTEXT和SSL。
那SocketServer如何實現(xiàn)Data plane與Control plane分離的呢?
SocketServer
===========================================================================
屬性
- 實現(xiàn)請求優(yōu)先級相關(guān)的字段
對于Data plane,線程池的說法沒有問題,因為Processor線程確實有很多,而Acceptor也可能多個,因為SocketServer會為每個EndPoint(每套監(jiān)聽器)創(chuàng)建一個對應(yīng)的Acceptor線程。
但Control plane不同。
Control plane那組屬性變量都是以O(shè)pt結(jié)尾的,即Option類型,完全可以不使用Control plane,即你可讓Kafka不區(qū)分請求類型,2.2.0之前設(shè)計就是這樣。
但一旦開啟Control plane設(shè)置,其Processor線程和Acceptor線程都是1個。
它對應(yīng)的RequestChannel里面的請求隊列長度被硬編碼成20,即控制類請求的數(shù)量應(yīng)該遠(yuǎn)小于數(shù)據(jù)類請求,因而不需要為它創(chuàng)建線程池和較深的請求隊列。
創(chuàng)建Data plane所需資源
===============================================================================
- 負(fù)責(zé)為Data plane創(chuàng)建所需資源
- 執(zhí)行流程
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)Java工程師,想要提升技能,往往是自己摸索成長或者是報班學(xué)習(xí),但對于培訓(xùn)機(jī)構(gòu)動則幾千的學(xué)費,著實壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Java開發(fā)全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Java開發(fā)知識點,真正體系化!
由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新
如果你覺得這些內(nèi)容對你有幫助,可以添加V獲?。簐ip1024b (備注Java)
最后
既已說到spring cloud alibaba,那對于整個微服務(wù)架構(gòu),如果想要進(jìn)一步地向上提升自己,到底應(yīng)該掌握哪些核心技能呢?
就個人而言,對于整個微服務(wù)架構(gòu),像RPC、Dubbo、Spring Boot、Spring Cloud Alibaba、Docker、kubernetes、Spring Cloud Netflix、Service Mesh等這些都是最最核心的知識,架構(gòu)師必經(jīng)之路!下圖,是自繪的微服務(wù)架構(gòu)路線體系大綱,如果有還不知道自己該掌握些啥技術(shù)的朋友,可根據(jù)小編手繪的大綱進(jìn)行一個參考。
如果覺得圖片不夠清晰,也可來找小編分享原件的xmind文檔!
且除此份微服務(wù)體系大綱外,我也有整理與其每個專題核心知識點對應(yīng)的最強(qiáng)學(xué)習(xí)筆記:
-
出神入化——SpringCloudAlibaba.pdf
-
SpringCloud微服務(wù)架構(gòu)筆記(一).pdf
-
SpringCloud微服務(wù)架構(gòu)筆記(二).pdf
-
SpringCloud微服務(wù)架構(gòu)筆記(三).pdf
-
SpringCloud微服務(wù)架構(gòu)筆記(四).pdf
-
Dubbo框架RPC實現(xiàn)原理.pdf
-
Dubbo最新全面深度解讀.pdf
-
Spring Boot學(xué)習(xí)教程.pdf
-
SpringBoo核心寶典.pdf
-
第一本Docker書-完整版.pdf
-
使用SpringCloud和Docker實戰(zhàn)微服務(wù).pdf
-
K8S(kubernetes)學(xué)習(xí)指南.pdf
另外,如果不知道從何下手開始學(xué)習(xí)呢,小編這邊也有對每個微服務(wù)的核心知識點手繪了其對應(yīng)的知識架構(gòu)體系大綱,不過全是導(dǎo)出的xmind文件,全部的源文件也都在此!文章來源:http://www.zghlxwxcb.cn/news/detail-844720.html
寶典.pdf
-
第一本Docker書-完整版.pdf
-
使用SpringCloud和Docker實戰(zhàn)微服務(wù).pdf
-
K8S(kubernetes)學(xué)習(xí)指南.pdf
[外鏈圖片轉(zhuǎn)存中…(img-CP9XbQli-1712095401168)]
另外,如果不知道從何下手開始學(xué)習(xí)呢,小編這邊也有對每個微服務(wù)的核心知識點手繪了其對應(yīng)的知識架構(gòu)體系大綱,不過全是導(dǎo)出的xmind文件,全部的源文件也都在此!
[外鏈圖片轉(zhuǎn)存中…(img-bYCraRMs-1712095401169)]文章來源地址http://www.zghlxwxcb.cn/news/detail-844720.html
到了這里,關(guān)于Kafka源碼解析之SocketServer,kafka消息隊列面試題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!