20240301-2-ZooKeeper面試題(二)

image-20240228202738121

11. Chroot 特性

3.2.0 版本后,添加了 Chroot 特性,該特性允許每個客戶端為自己設置一個命名空間。如果一個客戶端設置了 Chroot,那么該客戶端對服務器的任何操作,都將會被限制在其自己的命名空間下。

通過設置 Chroot,能夠將一個客戶端應用于 Zookeeper 服務端的一顆子樹相對應,在那些多個應用公用一個 Zookeeper 進群的場景下,對實現不同應用間的相互隔離非常有幫助。

12. 會話管理

分桶策略:將類似的會話放在同一區塊中進行管理,以便于 Zookeeper 對會話進行不同區塊的隔離處理以及同一區塊的統一處理。

分配原則:每個會話的“下次超時時間點”(ExpirationTime)

計算公式

ExpirationTime_ = currentTime + sessionTimeout

ExpirationTime = (ExpirationTime_ / ExpirationInrerval + 1) *

ExpirationInterval , ExpirationInterval 是指 Zookeeper 會話超時檢查時間間隔,默認 tickTime

13. 服務器角色

Leader

1、事務請求的唯一調度和處理者,保證集群事務處理的順序性

2、集群內部各服務的調度者

Follower

1、處理客戶端的非事務請求,轉發事務請求給 Leader 服務器

2、參與事務請求 Proposal 的投票

3、參與 Leader 選舉投票

Observer

1、3.0 版本以后引入的一個服務器角色,在不影響集群事務處理能力的基礎上提升集群的非事務處理能力

2、處理客戶端的非事務請求,轉發事務請求給 Leader 服務器

3、不參與任何形式的投票

14. Zookeeper 下 Server 工作狀態

服務器具有四種狀態,分別是 LOOKING、FOLLOWING、LEADING、OBSERVING。

1、LOOKING:尋找 Leader 狀態。當服務器處于該狀態時,它會認為當前集群中沒有 Leader,因此需要進入 Leader 選舉狀態。

2、FOLLOWING:跟隨者狀態。表明當前服務器角色是 Follower。

3、LEADING:領導者狀態。表明當前服務器角色是 Leader。

4、OBSERVING:觀察者狀態。表明當前服務器角色是 Observer。

15. 數據同步

整個集群完成 Leader 選舉之后,Learner(Follower 和 Observer 的統稱)回向Leader 服務器進行注冊。當 Learner 服務器想 Leader 服務器完成注冊后,進入數據同步環節。

數據同步流程:(均以消息傳遞的方式進行)

Learner 向 Learder 注冊

數據同步

同步確認

Zookeeper 的數據同步通常分為四類

1、直接差異化同步(DIFF 同步)

2、先回滾再差異化同步(TRUNC+DIFF 同步)

3、僅回滾同步(TRUNC 同步)

4、全量同步(SNAP 同步)

在進行數據同步前,Leader 服務器會完成數據同步初始化:

peerLastZxid:

從 learner 服務器注冊時發送的 ACKEPOCH 消息中提取 lastZxid(該Learner 服務器最后處理的 ZXID)

minCommittedLog:

Leader 服務器 Proposal 緩存隊列 committedLog 中最小 ZXID

maxCommittedLog:

Leader 服務器 Proposal 緩存隊列 committedLog 中最大 ZXID

直接差異化同步(DIFF 同步)

場景:peerLastZxid 介于 minCommittedLog 和 maxCommittedLog之間

先回滾再差異化同步(TRUNC+DIFF 同步)

場景:當新的 Leader 服務器發現某個 Learner 服務器包含了一條自己沒有的事務記錄,那么就需要讓該 Learner 服務器進行事務回滾–回滾到 Leader服務器上存在的,同時也是最接近于 peerLastZxid 的 ZXID

僅回滾同步(TRUNC 同步)

場景:peerLastZxid 大于 maxCommittedLog

全量同步(SNAP 同步)

場景一:peerLastZxid 小于 minCommittedLog

場景二:Leader 服務器上沒有 Proposal 緩存隊列且 peerLastZxid 不等于 lastProcessZxid

16. zookeeper 是如何保證事務的順序一致性的?

zookeeper 采用了全局遞增的事務 Id 來標識,所有的 proposal(提議)都在被提出的時候加上了 zxid,zxid 實際上是一個 64 位的數字,高 32 位是 epoch(時期; 紀元; 世; 新時代)用來標識 leader 周期,如果有新的 leader 產生出來,epoch會自增,低 32 位用來遞增計數。當新產生 proposal 的時候,會依據數據庫的兩階段過程,首先會向其他的 server 發出事務執行請求,如果超過半數的機器都能執行并且能夠成功,那么就會開始執行。

17. 分布式集群中為什么會有 Master?

在分布式環境中,有些業務邏輯只需要集群中的某一臺機器進行執行,其他的機器可以共享這個結果,這樣可以大大減少重復計算,提高性能,于是就需要進行leader 選舉。

18. zk 節點宕機如何處理?

Zookeeper 本身也是集群,推薦配置不少于 3 個服務器。Zookeeper 自身也要保證當一個節點宕機時,其他節點會繼續提供服務。

如果是一個 Follower 宕機,還有 2 臺服務器提供訪問,因為 Zookeeper 上的數據是有多個副本的,數據并不會丟失;

如果是一個 Leader 宕機,Zookeeper 會選舉出新的 Leader。ZK 集群的機制是只要超過半數的節點正常,集群就能正常提供服務。只有在 ZK節點掛得太多,只剩一半或不到一半節點能工作,集群才失效。所以3 個節點的 cluster 可以掛掉 1 個節點(leader 可以得到 2 票>1.5)

2 個節點的 cluster 就不能掛掉任何 1 個節點了(leader 可以得到 1 票<=1)

19. zookeeper 負載均衡和 nginx 負載均衡區別

zk 的負載均衡是可以調控,nginx 只是能調權重,其他需要可控的都需要自己寫插件;但是 nginx 的吞吐量比 zk 大很多,應該說按業務選擇用哪種方式。

20. Zookeeper 有哪幾種幾種部署模式?

部署模式:單機模式、偽集群模式、集群模式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712572.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712572.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712572.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Win11遠程桌面登陸教程

必備軟件 Remote Desktop 這個軟件用于便捷操作 Tailscale 這個用于創建虛擬局域網讓兩臺設備處于同一個網段便于遠程連接 詳細步驟 0、打開電腦設置允許遠程連接模式 把這里的開關打開就行。 1、設置允許登陸的用戶以及密碼 在管理員模式下的宿主電腦上面輸入以下命令…

支付寶小程序中喚起支付(前后端)

Java后臺獲取支付寶支付唯一訂單號 /*** 支付寶小程序支付*/PostMapping(value "/xcxPayZFBTHREE")ResponseBodypublic Map<String,Object> xcxPayZFBTHREE(RequestBody byte[] req) {HashMap<String, Object> objectObjectMap new HashMap<>();…

jax可微分編程的筆記(7)

jax可微分編程的筆記(7) 第七章 優化算法 從優化理論的整體框架來看&#xff0c;任何優化問題都可以被分解為 模型的建立&#xff0c;損失函數的構造以及優化算法的選取這三個部分。 其中優化算法的具體形式&#xff0c;又依賴于步長下降方向和終止條件 的選取。 對于多維函…

JavaScript 瀏覽器元素滾動 scrollIntoView()

scrollIntoView() ? DOM 規范中沒有涉及的一個問題是如何滾動頁面中的某個區域。為填充這方面的缺失&#xff0c;不同瀏覽器實現了不同的控制滾動的方式。在所有這些專有方法中&#xff0c;HTML5 選擇了標準化 scrollIntoView()。 ? scrollIntoView() 方法存在于所有 HTML …

深度學習中常見的backbone、neck、head的理解

在深度學習中&#xff0c;常見的backbone、neck和head是指網絡結構的不同部分&#xff0c;它們各自承擔著不同的功能&#xff1a; Backbone&#xff08;骨干網絡&#xff09;&#xff1a;骨干網絡通常是指整個深度神經網絡的主要部分&#xff0c;負責提取輸入數據的特征。骨干網…

寒假作業Day 02

這是第二天的作業&#xff0c;fighting&#xff01; Day 02 一、選擇題 首先char* s[6]是指針數組&#xff0c;也就是其存儲的都是這些字符串的地址&#xff0c;其實際上的類型為char**&#xff0c;而fun函數傳入了s數組的首地址。而后續fun函數中打印字符&#xff0c;p[i]即…

ad18學習筆記十六:如何放置精準焊盤到特定位置,捕抓功能的講解

網上倒是一堆相關的指導 AD軟件熟練度提升&#xff0c;如何設置板框捕捉&#xff1f;_嗶哩嗶哩_bilibili 關于Altium Designer 20 的捕抓功能的講解_ad捕捉設置-CSDN博客 AD軟件捕捉進階實例&#xff0c;如何精確的放置布局元器件&#xff1f;_嗶哩嗶哩_bilibili AD繪制PCB…

項目-SERVER模塊-Socket模塊

Socket模塊 一、Socket模塊是什么&#xff1f;二、代碼實現1.成員變量2.構造、析構函數3.獲取套接字文件描述符4.創建套接字5.綁定地址信息6.開始監聽連接請求7.向服務器發起連接8.獲取新連接9.接收數據10.非阻塞接收數據11.發送數據12.非阻塞發送數據13.關閉套接字14.創建一個…

何時使用子查詢?一個使用子查詢的SQL示例及其工作原理

何時使用子查詢&#xff1f;給出一個使用子查詢的SQL示例&#xff0c;并解釋其工作原理。 子查詢&#xff0c;也稱為內部查詢或嵌套查詢&#xff0c;是嵌入在另一個SQL查詢中的查詢。外部查詢&#xff0c;有時稱為外部查詢或主查詢&#xff0c;是包含子查詢的查詢。子查詢可以…

20240301作業

1.使用fwrite、fread將一張隨意的bmp圖片&#xff0c;修改成德國的國旗 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> int main(int argc, const char *argv[]) {FILE* fp fopen("./gaoda.bmp","…

24.3.1 《CLR via C#》 筆記9

第十二章 泛型 泛型&#xff1a;支持泛型值類型、泛型引用類型、泛型接口、泛型委托&#xff1b;允許在引用類型、值類型和接口中定義泛型方法&#xff1b;泛型參數變量要么稱為T&#xff0c;要么以T開頭 具有泛型類型參數的類型稱為開放類型&#xff0c;不允許構造實例&#…

Java畢業設計 基于SpringBoot vue 社區團購系統

Java畢業設計 基于SpringBoot vue 社區團購系統 SpringBoot vue 社區團購系統 功能介紹 前端用戶: 首頁 圖片輪播 商品信息 商品分類展示 搜索 商品詳情 點我收藏 添加到購物車 立即購買 我要開團 去參團 評論 公告資訊 資訊詳情 登錄 注冊 個人中心 更新信息 點我充值 我的訂…

Mysql筆記3

1、快速創建表 原理&#xff1a; 將一個查詢結果當做一張表新建 這個可以完成表的快速復制 create table emp2 as select * from emp; mysql> select * from emp2; ---------------------------------------------------------------------- …

【vscode提取函數快捷鍵】提取函數,減少大方法的復雜度

在 Visual Studio Code 中&#xff0c;提取函數的快捷鍵取決于你所使用的編程語言和安裝的插件。以下是一些常用的快捷鍵組合&#xff0c;可以用來在 Visual Studio Code 中提取函數&#xff1a; 執行以下步驟來提取函數&#xff1a; 選中要提取的代碼塊。右鍵單擊選中的代碼…

System Verilog學習筆記(十二)——數組(2)

System Verilog學習筆記&#xff08;十二&#xff09;——數組&#xff08;2&#xff09; 動態數組 在編譯時不會為其定制尺寸&#xff0c;而是在仿真運行時來確定動態數組一開始為空&#xff0c;需要使用new[ ]來為其分配空間聲明方式 int dyn[],d2[]; //聲明了兩個動態數組…

git之遠程操作

一.分布式版本控制系統 分布式版本控制系統通常也有?臺充當“中央服務器”的電腦&#xff0c;但這個服務器的作?僅僅是?來?便“交換”?家的修改&#xff0c;沒有它?家也?樣?活&#xff0c;只是交換修改不?便?已。有了這個“中央服務器”的電腦&#xff0c;這樣就不怕…

ChatGPT學習第四周

&#x1f4d6; 學習目標 ChatGPT實踐操作 通過實際操作和練習&#xff0c;加深對ChatGPT功能的理解。 項目&#xff1a;創建一個ChatGPT應用案例 設計一個基于ChatGPT的小項目&#xff0c;將理論應用于實踐。 ?? 學習活動 學習資料 《萬字干貨&#xff01;ChatGPT 從零完…

[C++核心編程](一):內存分區

目錄 代碼區 全局區 棧區 堆區 new操作符 不同區域存放的數據&#xff0c;賦予不同的生命周期&#xff0c;給予開發人員更大的靈活編程。 代碼區 存放二進制代碼&#xff0c;由操作系統管理未執行程序&#xff08;.exe&#xff09;前已經存在共享&#xff0c;對頻繁執行…

達夢數據庫查詢語句內存溢出問題解決

背景&#xff1a;達夢數據庫使用過程中&#xff0c;某天突然服務宕機&#xff0c;導致各類后端服務無法注冊到nacos上&#xff0c;重啟之后nacos正常啟動&#xff0c;可執行一條兩千多條數據量的連表查詢時間很長&#xff0c;甚至會報錯&#xff0c;經查看日志發現在查詢過程中…

【C語言】常見的動態內存管理錯誤

前言 上一篇介紹了C語言中 動態內存管理函數&#xff0c;本片講解的是 在我們使用動態內存管理時 常見的錯誤&#xff0c;一起來看看吧~ 歡迎關注個人主頁&#xff1a;逸狼 創造不易&#xff0c;可以點點贊嗎~ 如有錯誤&#xff0c;歡迎指出~ 目錄 1.對NULL指針的解引?操作 錯…