大數據面試題匯總之Zookeeper

滌生大數據 發佈 2024-04-30T16:40:00.920969+00:00

數倉開發這塊問得不多!一、介紹下Zookeeper是什麼?可回答:談談你對Zookeeper的理解參考答案:Zookeeper是一個開源的分布式的,為分布式應用提供協調服務的Apache項目。

數倉開發這塊問得不多!

一、介紹下zookeeper是什麼?

可回答:談談你對Zookeeper的理解

參考答案:

Zookeeper是一個開源的分布式的,為分布式應用提供協調服務的Apache項目。

Zookeeper從設計模式角度來理解,是一個基於觀察者模式設計的分布式服務管理框架,它負責存儲和 管理大家都關心的數據,然後接受觀察者的註冊,一旦這些數據的狀態發生了變化,Zookeeper就負責 通知已經在Zookeeper上註冊的那些觀察者做出相應的反應。

Zookeeper提供的服務包括:統一命名服務、統一配置管理、統一集群管理、伺服器節點動態上下線、 軟負載均衡等。它致力於為那些高吞吐的大型分布式系統提供一個高性能、高可用、且具有嚴格順序訪 問控制能力的分布式協調服務。

特性

1)順序一致性:從一個客戶端發起的事務請求,最終都會嚴格按照其發起順序被應用到Zookeeper中; 對於來自客戶端的每個更新請求,Zookeeper都會分配一個全局唯一的遞增ID(zxid),這個ID反映了所有事務請求的先後順序。

2)原子性:所有事務請求的處理結果在整個集群中所有機器上都是一致的

3)最終一致性:所有客戶端看到的服務端數據模型都是一致的;

4)可靠性:一旦服務端成功應用了一個事務,則其引起的改變會一直保留,直到被另外一個事務所更改,如果消息被到一台伺服器接受,那麼它將被所有的伺服器接受。

5)實時性:一旦一個事務被成功應用後,Zookeeper可以保證客戶端立即可以讀取到這個事務變更後的最新狀態的數據。

6)等待無關(wait-free):慢的或者失效的client不得干預快速的client的請求,使得每個client都能有效的等待。

二、Zookeeper的選舉策略,leader和follower的區別?

可回答:1)Zookeeper的選舉過程(選舉機制);2)leader的選舉是如何實現的;3)說說Zookeeper的 啟動過程,比如現在有五台機器,ABCDE依次啟動起來,那麼哪台是leader?4)Zookeeper的選主策略了解過嗎

參考答案:

半數機制:集群中半數以上機器存活,集群可用。所以Zookeeper適合安裝奇數台伺服器。

Zookeeper雖然在配置文件中並沒有指定Master和Slave。但是,Zookeeper工作時,是有一個節點為 Leader,其他則為Follower,Leader是通過內部的選舉機制臨時產生的。

以一個簡單的例子來說明整個選舉的過程

假設有五台伺服器組成的Zookeeper集群,它們的id從1-5,同時它們都是最新啟動的,也就是沒有歷史 數據,在存放數據量這一點上,都是一樣的

1)伺服器1啟動,發起一次選舉。伺服器1投自己一票。此時伺服器1票數一票,不夠半數以上(3 票),選舉無法完成,伺服器1狀態保持為LOOKING;

2)伺服器2啟動,再發起一次選舉。伺服器1和2分別投自己一票並交換選票信息:此時伺服器1發現伺服器2的ID比自己目前投票推舉的(伺服器1)大,更改選票為推舉伺服器2。此時伺服器1票數0票,伺服器2票數2票,沒有半數以上結果,選舉無法完成,伺服器1,2狀態保持LOOKING

3)伺服器3啟動,發起一次選舉。此時伺服器1和2都會更改選票為伺服器3。此次投票結果:伺服器1為0票,伺服器2為0票,伺服器3為3票。此時伺服器3的票數已經超過半數,伺服器3當選Leader。伺服器 1,2更改狀態為FOLLOWING,伺服器3更改狀態為LEADING;

4)伺服器4啟動,發起一次選舉。此時伺服器1,2,3已經不是LOOKING狀態,不會更改選票信息。交 換選票信息結果:伺服器3為3票,伺服器4為1票。此時伺服器4服從多數,更改選票信息為伺服器3,並更改狀態為FOLLOWING;

5)伺服器5啟動,同4一樣當小弟。

三、Zookeeper的leader和follower的區別?

領導者Leader

Leader在集群中只有一個節點,可以說是老大,是zookeeper集群的中心,負責協調集群中的其他節點。 從性能的角度考慮,leader可以選擇不接受客戶端的連接。

主要作用

1)發起與提交寫請求。

所有的跟隨者Follower與觀察者Observer節點的寫請求都會轉交給領導者Leader執行。Leader接受到一 個寫請求後,首先會發送給所有的Follower,統計Follower寫入成功的數量。當有超過半數的Follower寫 入成功後,Leader就會認為這個寫請求提交成功,通知所有的Follower commit這個寫操作,保證事後哪怕是集群崩潰恢復或者重啟,這個寫操作也不會丟失。

2)與Learner(Follower與Observer)保持心跳

3)崩潰恢復時負責恢復數據以及同步數據到Leader

跟隨者Follower

Follow在集群中有多個

主要作用

1)與老大Leader保持心跳連接

2)當Leader掛了的時候,經過投票後成為新的leader。leader的重新選舉是由老二Follower們內部投票決 定的。

3)向leader發送消息與請求

4)處理leader發來的消息與請求

四、Zookeeper怎麼保證一致性的

參考答案:

依賴了ZAB協議

ZAB協議是偽分布式協調服務Zookeeper專門設計的一種崩潰恢復的原子廣播協議

它有兩種基本的模式:

  • 崩潰恢復
  • 消息廣播

這兩個模式是相輔相成的,消息廣播模式就是zookeeper不出現任何問題,並且正常工作的模式,崩潰 恢復看字面意思就是當Zookeeper出現故障時用於恢復的。

當出現故障時這兩種模式怎麼用?(不故障時就一種都沒必要說)

當整個zookeeper集群剛剛啟動或者Leader伺服器宕機、重啟或者網絡故障導致不存在過半的伺服器與Leader伺服器保持正常通信時(Leader選舉,必須要存在過半的伺服器),所有進程(伺服器)進入崩潰恢復模式,首先選舉產生新的Leader伺服器,然後集群中Follower伺服器開始與新的Leader伺服器進行 數據同步,當集群中超過半數機器與該Leader伺服器完成數據同步之後,退出恢復模式進入消息廣播模式,Leader伺服器開始接收客戶端的事務請求生成事物提案來進行事務請求處理。

五、Zookeeper腦裂問題

1、什麼是腦裂

參考答案:

腦裂(split-brain)就是「大腦分裂」,也就是本來一個「大腦」被拆分了兩個或多個「大腦」,我們都知道, 如果一個人有多個大腦,並且相互獨立的話,那麼會導致人體「手舞足蹈」,「不聽使喚」。 腦裂通常會出現在集群環境中,比如ElasticSearch、Zookeeper集群,而這些集群環境有一個統一的特 點,就是它們有一個大腦,比如ElasticSearch集群中有Master節點,Zookeeper集群中有Leader節點。 當集群中出現故障(比如網絡故障),分成了「兩個集群」,這兩個集群無法互相通信,此時就會讓集群覺得Leader掛了,這時候就會出現兩個Leader節點,這就是腦裂。

2、Zookeeper集群中腦裂場景

對於一個集群,想要提高這個集群的可用性,通常會採用多機房部署,比如現在有一個由6台zkServer所組成的一個集群,部署在了兩個機房:

正常情況下,此集群只會有一個Leader,那麼如果機房之間的網絡斷了之後,兩個機房內的zkServer還 是可以相互通信的,如果不考慮過半機制,那麼就會出現每個機房內部都將選出一個Leader。

這就相當於原本一個集群,被分成了兩個集群,出現了兩個「大腦」,這就是腦裂。

對於這種情況,我們也可以看出來,原本應該是統一的一個集群對外提供服務的,現在變成了兩個集群同時對外提供服務,如果過了一會,斷了的網絡突然聯通了,那麼此時就會出現問題了,兩個集群剛剛都對外提供服務了,數據該怎麼合併,數據衝突怎麼解決等等問題。 剛剛在說明腦裂場景時,有一個前提條件就是沒有考慮過半機制,所以實際上Zookeeper集群中是不會出現腦裂問題的,而不會出現的原因就跟過半機制有關。(過半機制:在領導者選舉的過程中,如果某台zkServer獲得了超過半數的選票,則此zkServer就可以成為Leader了)

關鍵字: