paulwong

          zookeeper client使用筆記

          Zookeeper數(shù)據(jù)模型

          1. zk具有像文件系統(tǒng)一樣的層狀的命名空間。
          2. 命名空間中的每一個(gè)節(jié)點(diǎn)都可存儲數(shù)據(jù)。
          3. 只有絕對路徑,名字都是unicode字符。
          4. 每個(gè)節(jié)點(diǎn)都是ZNode類型(如同文件系統(tǒng)的stat)。
          5. 每個(gè)ZNode上可以設(shè)置Watch,znode改變會(huì)通知設(shè)置的watch的客戶端,同時(shí)清除Watch
          6. 每次對znode的讀寫都是原子的,每次讀寫都是帶要操作znode版本號的。
          7. 盡量保證單個(gè)znode在1MB一下。通常幾K。
          8. 臨時(shí)節(jié)點(diǎn)的概念:只存在于一個(gè)Session的有效期內(nèi)的節(jié)點(diǎn)。臨時(shí)節(jié)點(diǎn)不允許有子節(jié)點(diǎn)。
          9. 使用zxid來標(biāo)示zk中的每個(gè)事件(導(dǎo)致zk狀態(tài)改變的事件)。全局唯一。
          10. 對每個(gè)znode的改變觸發(fā)當(dāng)前znode versions的改變。每個(gè)znode維護(hù)三個(gè)version(version:對應(yīng)每次znode data改變,cversion:對應(yīng)每次子節(jié)點(diǎn)改變,aversion:對應(yīng)每次acl改變)

          Zookeeper狀態(tài)轉(zhuǎn)換

          1. session timeout時(shí)間至少是ticket time(默認(rèn)是2000ms)的2倍,同時(shí)最大不能超過20倍ticket time
          2. 一旦session 過期,不必手動(dòng)重新連接。zk client會(huì)處理重連。
          3. Session的過期與否是由server端決定的。在timeout時(shí)間之內(nèi),server沒有收到來自
            client的任何信息(心跳)時(shí),則判定client session過期。同時(shí)會(huì)刪掉屬于這個(gè)session的臨時(shí)節(jié)點(diǎn)(znode),同時(shí)通知watch這個(gè)節(jié)點(diǎn)的client。
          4. 一旦session過期的client重新連接上zk cluster,將會(huì)受到“session expired”通知。
          5. 在建立zk連接時(shí),會(huì)設(shè)置一個(gè)默認(rèn)的watcher,當(dāng)client狀態(tài)改變的時(shí)候,這個(gè)watcher會(huì)被調(diào)用。一般將這個(gè)watcher的初始狀態(tài)設(shè)為disconnect。這樣就可以處理后續(xù)的session 過期事件。

          Zookeeper Watch

          1. 每一次的讀操作(getData(), getChildren(), exists())都可以對操作的節(jié)點(diǎn)設(shè)置watcher。
          2. watch是一次性的。一旦數(shù)據(jù)改變或是刪除,則觸發(fā)watcher,后續(xù)的改變則不會(huì)再觸發(fā)。
          3. 因?yàn)閣atch是異步發(fā)送的,所以有可能在節(jié)點(diǎn)操作返回碼返回之前先返回給client。zk只能保證client收到的watch事件是在他設(shè)置watch事件返回成功后收到。
          4. watch的兩種類型:data watch(由getData() 和 exists()設(shè)置),返回znode data 和 child watch(由getChildren()設(shè)置), 返回children list。
          5. 導(dǎo)致watch事件丟失的一種情況:“ a watch for the existance of a znode not yet created will be missed if the znode is created and deleted while disconnected.

          posted on 2013-08-23 10:47 paulwong 閱讀(708) 評論(0)  編輯  收藏 所屬分類: ZOOKEEPER

          主站蜘蛛池模板: 博白县| 肥西县| 毕节市| 昌平区| 来宾市| 石屏县| 昌乐县| 唐海县| 莒南县| 台山市| 盐城市| 彰武县| 岗巴县| 屯门区| 凌海市| 南平市| 深圳市| 定陶县| 安龙县| 德昌县| 海口市| 项城市| 闽清县| 新民市| 阳泉市| 饶河县| 凌海市| 垫江县| 广饶县| 桐庐县| 禄丰县| 池州市| 宁河县| 武汉市| 梁河县| 洛南县| 福鼎市| 鄄城县| 谷城县| 绥阳县| 新河县|