大資料生態之zookeeper(知識點梳理)
1.zookeeper介紹
(1)zookeeper簡介:
Zookeeper是一個分散式的,開放原始碼的分散式應用程式協調服務,是Google的chubby一個開源的實現。
它提供了簡單原始的功能,分散式應用可以基於它實現更高的服務,比如分散式同步,配置管理,叢集管理,
命名管理,佇列管理。它被設計為易與程式設計,使用檔案系統目錄樹作為資料模型。服務端跑在 java 上,提供 java 和 C 的客戶端 API。
zookeeper是叢集的管理者,監視著叢集中各個節點的狀態,根據節點提供的反饋進行一步合理操作。最終,將簡單易用的介面
和功能穩定,效能高效的系統提供給使用者。
官網地址:
官網快速開始地址:
http://ZooKeeper.apache.org/doc/trunk/ZooKeeperStarted.html
官網 API 地址:
http://ZooKeeper.apache.org/doc/r3.4.10/api/index.html
2.zookeeper的相關功能
(1)檔案系統:
ZooKeeper 的名稱空間就是 ZooKeeper 應用的檔案系統,它和 linux 的檔案系統很像,也是樹狀,這樣就可以確定每個路徑都是唯一的,
對於名稱空間的操作必須都是絕對路徑操作。與Linux檔案系統不同的是,Linux檔案系統 有目錄和檔案的區別,而ZooKeeper統一叫znode,
一個znode節點可以包含子znode,同時也可以包含資料。
znode 即是資料夾又是檔案的概念,所以在 ZooKeeper 這裡面就不叫檔案文 件也不叫資料夾,叫znode,每個znode有唯一的路徑標識,
既能儲存資料,也能建立子znode。但是znode只適合儲存非常小的資料,不能超過1M,最好都小於1K。
zookeeper的檔案系統的特點:
zk的檔案系統和Linux的檔案系統目錄結構一樣,從”“/開始
zk的訪問路徑只有絕對路徑,沒有相對路徑。
zk中沒有檔案和目錄的概念,只有znode節點,Znode既有檔案的功能,又有目錄的功能
(2)znode介紹:
znode在型別上分為兩種:短暫的(斷開時刪除)、持久的(斷開時保留)。但是znode有4形式的節點表現:
persistent | 持久化znode節點,一旦建立這個znode點儲存的資料不會主動消失,除非客戶端主動delete |
Persistent_sequential | 自動增加順序編號的znode節點,比如ClientA 去 zk service 上建 立一個 znode 名字叫做/zk/conf,指定了 這種型別的節點後 zk 會 創 建 /zk/conf0000000000 , ClientB 再 去 創 建 就 是 創 建 /zk/conf0000000001, ClientC 是建立/zk/conf0000000002,以後任 意 Client 來建立這個 znode 都會得到一個比當前 zk 名稱空間最 大 znode 編號+1 的 znode,也就說任意一個 Client 去建立 znode 都是保證得到的 znode 是遞增的,而且是 唯一的。(原子性原則) |
Ephemral | 臨時znode節點,client連線到zkservice的時候會建立一個session,之後用這個zk連線例項建立該型別的znode ,一旦client關閉了zk的連線,伺服器就會清除 session,然後這個 session 建立的 znode 節點都會從名稱空間 消失。 |
Ephemral_ sequential | 臨時自動編號設定,znode節點編號會自動增加,但是會隨著session消失而消失。 |
zookeeper的znode的相關特點:
建立znode時設定順序標識,znode名稱後會附加一個值,順序號是一個單調遞增的計數器,由父節點維護。(無論建立的是否是有編號節點,都為順序遞增)
EPHEMERAL 型別的節點不能有子節點
zk的znode的分類:臨時節點(EPHEMERAL)、永久節點(persistent)、有編號節點(Persistent_sequential)、臨時有編號(Ephemral_ sequential)
對於zk來說,它的znode中儲存的資料不能超過1M,最好不要超過1KB,如果資料量比較大,很難保證資料的一致性
對於zk來說,有幾個節點資料就會儲存幾份
3.zookeeper的監聽機制
(1)監聽機制介紹:
客戶端註冊監聽它關心的目錄節點,當目錄節點發生變化(資料改變、節點刪除、子目錄節 點增加刪除)時,zookeeper會通知客戶端。
監聽機制保證zookeeper儲存的任何的資料的任何改變都能快速的相應到監聽了該節點的應用程式。監聽器的工作機制,其實是在客戶端會專門
建立一個監聽執行緒,在本機的一個埠上等待zk叢集傳送過來的事件。
(2)監聽的觸發
Znode的建立----nodeCreated
Znode 被刪除---nodeDelete
Znode的資料變化---nodedatachanged
Znode的子節點的變化----nodeChildrenchange
注意:監聽只生效一次。(可以使用迴圈監聽取,去實現一直監聽)。
(3)監聽機制的工作原理
解釋: ZooKeeper 的 Watcher 機制主要包括:客戶端執行緒、客戶端 WatcherManager、Zookeeper 服務 器三部分。客戶端在向zookeeper伺服器
註冊的同時,會將Watcher物件儲存在客戶端的WatcherManager當中。當zookeeper伺服器觸發watcher事件後,會向客戶端傳送通知,
客戶端執行緒從 WatcherManager 中取出對應的 Watcher 物件來執行回撥邏輯。
(4)監聽的設定:
相應的觸發:
ls--觸發---create 、delete(子節點)
get--觸發—set
exists--觸發--- create 、delete(當前節點)
4. Zookeeper的特點
最終一致性:client不論連線哪個server,展示給他的都是同一個檢視,這是zookeeper最重要特定。
可靠性:具有簡單、健壯、良好的效能,如果訊息M被一臺伺服器接收,那麼它將被 所有的伺服器接受。
實時性:ZooKeeper 保證客戶端將在一個時間間隔範圍內獲得伺服器的更新資訊,或者 伺服器失效的資訊。但由於網路延時等原因,
ZooKeeper 不能保證兩個客戶端能同時得 到剛更新的資料,如果需要最新資料,應該在讀資料之前呼叫 sync()介面。
等待無關:慢的或者失效的 client 不得干預快速的 client 的請求,使得每個 client 都能有效的等待。
原子性:更新只能成功或者失敗,沒有中間狀態。
順序性:包括全域性有序和偏序兩種:全域性有序是指如果在一臺伺服器上訊息 a 在訊息 b 前釋出,則在所有 Server 上訊息 a 都將在訊息 b 前被髮布;
偏序是指如果一個訊息 b 在 訊息 a 後被同一個傳送者釋出,a 必將排在 b 前面。