Zookeeper做爲一個分佈式協調系統提供了一項基本服務:分佈式鎖服務,分佈式鎖是分佈式協調技術實現的核心內容。像配置管理、任務分發、組服務、分佈式消息隊列、分佈式通知/協調等,這些應用實際上都是基於這項基礎服務由用戶本身摸索出來的。node
zookeeper做爲分佈式協調系統在大數據領域很是經常使用,它是一個很好的中心化管理工具。下面舉幾個常見的應用場景。網絡
HA(分佈式鎖的應用):Master掛掉以後迅速切換到slave節點。數據結構
任務發佈:regionserver掛了一臺,master須要從新分配region,會把任務放在zookeeper等regionserver來獲取架構
任務分配:給topic分配partitions和replication分佈式
ZooKeeper命名空間中的Znode,兼具文件和目錄兩種特色。既像文件同樣維護着數據、元信息、ACL、時間戳等數據結構,又像目錄同樣能夠做爲路徑標識的一部分。 每一個Znode由3部分組成:工具
ZooKeeper中的每一個節點存儲的數據要被原子性的操做。也就是說讀操做將獲取與節點相關的全部數據,寫操做也將替換掉節點的全部數據。另外,每個節點都擁有本身的ACL(訪問控制列表),這個列表規定了用戶的權限,即限定了特定用戶對目標節點能夠執行的操做。大數據
ZooKeeper能夠爲全部的讀操做設置watch,包括:exists()、getChildren()及getData()。當節點狀態發生改變時(Znode的增、刪、改)將會觸發watch所對應的操做。當watch被觸發時,ZooKeeper將會向客戶端發送且僅發送一條通知,由於watch只能被觸發一次,這樣能夠減小網絡流量。架構設計
ZooKeeper中的節點有兩種,分別爲臨時節點和永久節點(還可再分爲有序無序)。節點的類型在建立時即被肯定,而且不能改變。設計
兩種方式:server
存儲集羣元數據提供給client使用,體如今好比須要對HBase和Kafka操做時,都會直接連到zookeeper,zookeeper記錄了數據存儲的位置,存活的節點等元數據信息。
Master要監視/works和/tasks兩個永久節點,以便能感知到由哪些slave當前可用,當前有新任務須要分配。
分配過程:在/assign下建立當前可用的workA,找到須要分配的taskA,建立/assign/workA/taskA
zookeeper還有不少相似的應用大多都是基於上面的特性。總的來講,zk只是一個提供了一些特性的系統,用戶根據這些特性本身定義了它的用法。熟悉了zk的操做以及應用場景,下一篇說下zk的架構設計與角色分工。
評論不能及時回覆可直接加公衆號提問或交流,知無不答,謝謝 。