深入kafka 一 處理請求

2021-10-06 05:54:20 字數 2224 閱讀 7866

介紹集群成員關係前,我們要清楚集群包含哪些成員,所有關係都是圍繞這幾個成員展開的:

1.成員:包含broker、zookeeper和kafka元件。

2.關係:

broker啟動的時候,它通過建立臨時節點把自己的id註冊到zookeeper

kafka元件訂閱zookeeper的/brokers/ids路徑,當有broker加入或退出集群時,它就會收到通知

kafka元件在broker伺服器上安裝。

本節將介紹兩個概念和三種場景的處理:

1.概念

控制器:就是乙個broker,除了具備一般broker的功能,還負責分割槽首領的選舉

腦裂:有兩個broker同時認為自己是當前的控制器

2.三種場景的處理

控制器的產生:集群裡啟動的第乙個broker通過在zookeeper裡建立乙個臨時節點讓自己成為broker。其他broker在控制器節點上建立zookeeper watch物件,這樣就可以接收到這個節點的變更通知

控制器掛了:剩餘的broker通過watch物件得到控制器節點消失的通知,然後嘗試使自己成為新的控制器,第乙個在zookeeper裡成功建立控制器節點的broker會成為新的控制器。

broker離開集群:控制器會為失去首領的分割槽選擇新的首領。告知首領和跟隨者,誰是首領誰是跟隨者。

複製功能是kafka的核心功能,kafka使用主題來組織資料,每個主題被分為若干個分割槽,每個分割槽有多個副本,副本被儲存在broker上。本節我們來了解一下什麼叫首領副本、跟隨者副本、同步副本和不同步副本。

1.首領副本:每個分割槽都有乙個首領副本,為了保證一致性,所有生產者和消費者的請求都會經過這個副本。

2.跟隨者副本:

首領以外的副本都是跟隨者副本

跟隨者副本不處理客戶端請求

唯一的任務從首領那裡複製訊息,保持與首領一致的狀態。如果首領發生崩潰,其中乙個跟隨者就會提公升為新首領

3.同步副本:

持續請求得到的最新訊息的副本稱為同步副本。

首領發生失效時,只有同步副本才有可能成為新的首領。

4.不同步副本:

跟隨者10秒內沒有請求任何訊息。

雖然在請求訊息,但是在10秒內不是請求最新的訊息。

acceptor執行緒:broker會在它所監聽的每乙個埠上執行乙個acceptor執行緒,這個執行緒會建立乙個連線,並把它交給processor執行緒處理。

processor執行緒:也叫網路執行緒,負責從客戶端獲取請求訊息,把他們放入「請求對列「,然後從」響應對列「獲取響應訊息,把他們傳送給客戶端。

io執行緒:處理」請求對列」的訊息

2.kafka處理請求內部流程:

3.獲取元資料:

問題:客戶端怎麼知道往**傳送請求呢?

答案:客戶端會傳送元資料請求。請求中包含客戶端感興趣的主題,伺服器端的響應訊息裡指明了這些主題所包含的分割槽、每個分割槽有哪些副本,以及哪個副本是首領。

特點:元資料是快取到客戶端的

元資料請求策:

輪詢傳送元資料請求

客戶端收到「非首領」錯誤,會觸發傳送元資料請求

元資料請求流程:

4.處理生產請求broker會做哪些操作?

校驗:1:傳送資料的客戶是否有主題寫入許可權

2:請求裡包含的acks值是否有效(只允許:0、1、all)

3:若acks=all,是否有足夠多的同步副本保證訊息已經被安全寫入

處理訊息:將訊息寫入磁碟

返回響應:

1:acks=0|1,訊息被寫入分割槽首領後,響應會被立即返回

2:acks=all,請求會被放在乙個叫做「煉獄」的緩衝區裡,直到所有跟隨副本都複製了訊息,響應才會返回給客戶端。

5.處理獲取請求broker會做哪些操作?

校驗:校驗指定的偏移量在分割槽上是否存在,不存在broker將返回乙個錯誤訊息

處理訊息:broker按照客戶端指定的數量上限從分割槽裡讀取訊息

6.客戶端設定

設定返回下限:告訴broker「等到有10kb資料的時候再把他們傳送給我」。這樣可以減少cpu和網路開銷

7.另外需要了解一下兩點:

注意:並不是所有儲存到分割槽首領的資料都能返回,而是返回已經被寫入同步副本的訊息

零複製:kafka直接把訊息檔案傳送到網路通道。這樣避免了位元組複製和管理記憶體緩衝區,從而獲得更好的效能。

以上就是kafka處理請求的基本操作,**說的不對,不吝賜教。

SpringMVC學習個人總結(一) 處理請求引數

1.搭建環境 在web.xml中配置視 析器 dispatcherservlet org.springframework.web.servlet.dispatcherservlet 宣告mvc配置檔案的位置 contextconfiglocation classpath springconfigur...

統一處理異常

1.controlleradvice 註解定義全域性異常處理類 controlleradvice public class globalexceptionhandler 2.exceptionhandler 註解宣告異常處理方法,註解的方法的引數列表裡,還可以宣告很多種型別的引數 controlle...

react請求資料統一處理(axios)

開發中為了方便開發和便於維護,我們將所有的請求統一處理。這樣可以提高我們的開發效率,而且便於後期的維護。在src目錄下新建資料夾api,建立三個js檔案 server.js,serverapi.config.js,api.js.如下圖 server.js檔案處理axios跨域問題。如下 import...