kafka原理理解常見問題

2021-09-26 13:16:43 字數 2239 閱讀 1861

1.kafka consumer是否可以消費指定分割槽訊息?

kafka consumer消費訊息時,向broker發出"fetch"請求去消費特定分割槽的訊息,consumer指定訊息在日誌中的偏移量(offset),就可以消費從這個位置開始的訊息,customer擁有了offset的控制權,可以向後回滾去重新消費之前的訊息,這是很有意義的。

消費者每次消費資料的時候,消費者都會記錄消費的物理偏移量(offset)的位置,等到下次消費時,他會接著上次位置繼續消費。

2.kafka判斷乙個節點是否還活著有那兩個條件?

(1)節點必須可以維護和zookeeper的連線,zookeeper通過心跳機制檢查每個節點的連線

(2)如果節點是個follower,他必須能及時的同步leader的寫操作,延時不能太久

3.kafka訊息是採用pull模式,還是push模式?

kafka最初考慮的問題是,customer應該從brokes拉取訊息還是brokers將訊息推送到consumer,也就是pull還push。在這方面,kafka遵循了一種大部分訊息系統共同的傳統的設計:producer將訊息推送到broker,consumer從broker拉取訊息

pull有個缺點是,如果broker沒有可供消費的訊息,將導致consumer不斷在迴圈中輪詢,直到新訊息到達。為了避免這點,kafka有個引數可以讓consumer阻塞直到新訊息到達

4.consumer水平擴充套件如何實現

kafka支援consumer水平擴充套件,可以讓多個consumer加入乙個consumer group,在乙個consumer group中,每個分割槽只能分配給乙個consumer,當kafka服務端增加分割槽數量進行水平擴充套件後,可以向consumer group中增加新的consumer來提高整個consumer group的消費能力,當consumer group 中的乙個consumer出現故障下線時,會通過rebalance操作下線consumer,它負責處理的分割槽將分配給其他consumer

5.訊息的順序

kafka保證乙個partition內訊息是有序的,但是並不保證多個partition之間的資料有順序,每個topic可以劃分成多個分割槽,同乙個topic下的不同分割槽包含的訊息是不同的,每個訊息在被新增到分割槽時,都會被分配乙個offset,它是此訊息在分割槽中的唯一編號,kafka通過offset保證訊息在分區內的順序,offset順序不跨分割槽,即kafka只保證在同乙個分區內的訊息是有序的

6.kafka  unclean 配置代表啥,會對 spark streaming 消費有什麼影響?

unclean.leader.election.enable 為true的話,意味著非isr集合的broker 也可以參與選舉,這樣有可能就會丟資料,spark streaming在消費過程中拿到的 end offset 會突然變小,導致 spark streaming job掛掉。如果unclean.leader.election.enable引數設定為true,就有可能發生資料丟失和資料不一致的情況,kafka的可靠性就會降低;而如果unclean.leader.election.enable引數設定為false,kafka的可用性就會降低。

7.如果leader crash時,isr為空怎麼辦?

kafka在broker端提供了乙個配置引數:unclean.leader.election,這個引數有兩個值:

true(預設):允許不同步副本成為leader,由於不同步副本的訊息較為滯後,此時成為leader,可能會出現訊息不一致的情況。

false:不允許不同步副本成為leader,此時如果發生isr列表為空,會一直等待舊leader恢復,降低了可用性

8.kafka中consumer group 是什麼概念?

同樣是邏輯上的概念,是kafka實現單播和廣播兩種訊息模型的手段。同乙個topic的資料,會廣播給不同的group;同乙個group中的worker,只有乙個worker能拿到這個資料。換句話說,對於同乙個topic,每個group都可以拿到同樣的所有資料,但是資料進入group後只能被其中的乙個worker消費。group內的worker可以使用多執行緒或多程序來實現,也可以將程序分散在多台機器上,worker的數量通常不超過partition的數量,且二者最好保持整數倍關係,因為kafka在設計時假定了乙個partition只能被乙個worker消費(同一group內)。

CSS 原理理解

網頁製作最初,html規定了 normal document stream 標準文件流 來規範元素在網頁中的顯示法則 標準文件流中元素分兩種 塊內元素,行內元素。行內元素的特點 span標籤 豎直margin中的塌陷現象,上下緊密排列的元素的外邊距並不是兩個元素外邊距之和,而是選取那個最大的外邊距作...

Spring IOC原理理解

ioc,inversion of control,控制倒轉。這是spring的核心,貫穿始終。所謂ioc,對於spring框架來說,就是由spring來負責控制物件的生命週期和物件間的關係。di,dependency injection,依賴注入。在系統執行中,動態的向某個物件提供它所需要的其他物件...

ROI Align 原理理解

對背景問題的理解 之前一直在想乙個問題 乙個label在原圖上標記出乙個包含目標的區域。這個框在特徵提取後,大小被縮小到了什麼程度?如果這個label框本身就不大,那麼經過幾層池化之後,是不是在最後的feature map上都沒有乙個位置,能夠對應到這個區域?目標在特徵提取過程中,由於這種深度結構導...