1. 程式人生 > >分散式日誌分析系統構建實戰(二)——ZooKeeper

分散式日誌分析系統構建實戰(二)——ZooKeeper

在由kafka+storm搭建起來的日誌分析系統中,ZooKeeper屬於中流砥柱的作用。因此,在這裡,先從實踐的角度來介紹一下ZooKeeper以及相關的配置問題。

介紹

簡而言之,ZooKeeper是用來為分散式系統提供一個統一的配置資訊管理平臺。在分散式系統的各個機器之間,都會有一些關鍵的節點資訊需要暴露給其他機器,這樣才能達到協作的效果。而使每個機器獲取到相同的資訊,這就是ZooKeeper的作用。

考慮一下有多個伺服器的分散式系統,每臺伺服器都負責儲存資料,在資料上執行操作。這樣的潛在例子包括分散式搜尋引擎、分散式構建系統或者已知的系統如Apache Hadoop。所有這些分散式系統的一個常見問題是,你如何在任一時間點確定哪些伺服器活著並且在工作中。最重要的是,當面對這些分散式計算的難題,例如網路失敗、頻寬限制、可變延遲連線、安全問題以及任何網路環境,甚至跨多個數據中心時可能發生的錯誤時,你如何可靠地做這些事。這些正是Apache ZooKeeper所關注的問題,它是一個快速、高可用、容錯、分散式的協調服務。你可以使用ZooKeeper構建可靠的、分散式的資料結構,用於群組成員、領導人選舉、協同工作流和配置服務,以及廣義的分散式資料結構如鎖、佇列、屏障(Barrier)和鎖存器(Latch)。許多知名且成功的專案依賴於ZooKeeper,其中包括HBase、Hadoop 2.0、Solr Cloud、Neo4J、Apache Blur(Incubating)和Accumulo。

ZooKeeper本身也是一個分散式架構,提供了可靠性的保證。在ZooKeeper的資料,會被備份到每一個機器中去。而在這些機器中,會通過選舉,得到一個leader,其他所有機器則作為server,跟leader進行同步,保證資料一致。而每一個server則可以支援多個client同時進行連線,並且通過廣播,將client讀寫的資料同步到所有的server中去。至於具體的同步原理,以及leader的選舉機制,都是一個比較複雜的過程,我也不是特別理解,在此就不贅述了。

在ZooKeeper中,所有的資訊以一種類似檔案系統的樹結構來儲存(如下圖所示)。不同的是,這個樹的每一個節點(znode

),既可以存放資訊,也可以同時作為父節點,包含其他的子節點資訊(類似檔案系統中,一個路徑既是檔案又是資料夾)。另外,對於znode中的資料,所有的讀寫操作都是原子性的。即,每一次讀都會讀出所有的資料,每一次寫都會覆蓋所有資料,這樣以來,確保了znode中資料的完整性。另外,ZooKeeper將所有的資訊存放在記憶體當中,提高了吞吐量,減小了快取。
http://zookeeper.apache.org/doc/trunk/zookeeperOver.html
總而言之,Zookeeper提供了一下幾個特性:

  • 有序性: client提交的更新都會按照發送的順序同步到Zookeeper
  • 原子性: 更新要麼成功要麼失敗,不存在中間態(部分更新)
  • 一致性: 不論client連線到了哪個server,它所操作到的資料都是一樣的
  • 可靠性: 只要更新成功,那麼這次更新的資料會一直保留,直到被覆寫
  • 實時性: 所有client得到資料都能保證是最新的(一定時間範圍內)

配置

配置過程還是推薦官網的指南:http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html
http://zookeeper.apache.org/releases.html下好壓縮包解壓後,在zookeeper根目錄下建立conf/zoo.cfg,其中包含
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
其中,dataDir的目錄必須是一個已存在的空目錄。clientPort建議保持預設的2181,因為其他大部分的使用到ZooKeeper的框架都會將預設使用這個埠。
檔案建立好後,執行
bin/zkServer.sh start
就可以啟動ZooKeeper了。啟動完之後,可以執行
bin/zkCli.sh -server 127.0.0.1:2181`
然後體驗一下ZooKeeper提供的檔案系統式的儲存空間。

小結

在Kafka中,ZooKeeper是一個基礎,利用ZooKeeper可以儲存producer和consumer的必要狀態。而ZooKeeper作為一個易用性極高的配置資訊儲存系統,在各種分散式架構中都可以得到廣泛的應用,因此,瞭解ZooKeeper的作用可以對分散式系統的搭建產生極大的幫助。

相關文章