欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解讀查看zookeeper事務(wù)日志的正確姿勢(shì)

 更新時(shí)間:2023年04月03日 10:39:01   作者:Mliak  
這篇文章主要介紹了解讀查看zookeeper事務(wù)日志的正確姿勢(shì)。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

查看zookeeper事務(wù)日志

用vi打開發(fā)現(xiàn)亂碼,查資料發(fā)現(xiàn)說是文件里是二進(jìn)制。

zoo.cfg中可以通過dataLogDir來(lái)配置zookeeper的事務(wù)日志的輸出目錄。

但是這些日志文件是二進(jìn)制的,無(wú)法通過普通的查看名單看。

需要通過org.apache.zookeeper.server.LogFormatter。姿勢(shì)如下

在Linux中

命令如下:

java -cp :/.../slf4j-api-1.7.2.jar:/.../zookeeper-3.4.6.jar org.apache.zookeeper.server.LogFormatter /...dataLogDir/version-2/log.1

java -classpath :./slf4j-api-1.7.2.jar:./zookeeper-3.4.6.jar org.apache.zookeeper.server.LogFormatter log.1700000001 

在這里插入圖片描述

在這里插入圖片描述

第二個(gè)命令

在這里插入圖片描述

在window中

java -classpath ".;*" org.apache.zookeeper.server.LogFormatter log.1700000001

這是把所需jar和文件放到當(dāng)前目錄下的

在這里插入圖片描述

補(bǔ)充知識(shí)

以log.****文件開頭的是zookeeper的事務(wù)文件,每個(gè)文件大小是64m,文件名按時(shí)間遞增。

正如從代碼中看到的一樣version-2目錄中存儲(chǔ)著Zookeeper的事務(wù)日志文件,有看到log.10、log.4f文件,這些都是Zookeeper的事務(wù)日志文件;這兩個(gè)文件都有一個(gè)特點(diǎn)就是文件名為log.xx,大小為64MB文件的后綴xx時(shí)間最早的 數(shù)字總是比最晚的小。

如果有了解過Zookeeper的ZAB協(xié)議那肯定知道它為每一個(gè)事務(wù)請(qǐng)求都分配了一個(gè)事務(wù)ID也就是ZXID,上面章節(jié)也知道了xx就是Zookeeper處理請(qǐng)求的ZXID,該ZXID為log文件中第一條事務(wù)的ZXID;ZXID規(guī)則為前32 字節(jié)為L(zhǎng)eader周期,后32字節(jié)為事務(wù)請(qǐng)求序列,所以通過事務(wù)日志就可以輕松的知道當(dāng)前的Leader周期與每個(gè)文件所屬的Leader周期;

ZooKeeper日志與快照文件簡(jiǎn)單分析

有用過Zookeeper的都知道zoo.cfg配置文件中有dataDir配置項(xiàng)用于存儲(chǔ)數(shù)據(jù),不過可能有些人不太清楚這個(gè)目錄具體存儲(chǔ)的是那些數(shù)據(jù),默認(rèn)情況下這個(gè)目錄是用于存儲(chǔ)Log(事務(wù)日志)與Snapshot(快照)數(shù)據(jù),但是Zookeeper還提供了一個(gè)用于Log存儲(chǔ)目錄的配置項(xiàng)dataLogDir而dataDir用于存儲(chǔ)Snapshot數(shù)據(jù),Log文件寫入頻率非常高如果有對(duì)Snapshot文件經(jīng)常操作或是對(duì)Zookeeper性能要求非常高可以為L(zhǎng)og與Snapshot分別配置不同的目錄存儲(chǔ);本文主要是結(jié)合源碼分析Zookeeper的Log與Snapshot文件,這里我分別為L(zhǎng)og與Snapshot配置了不同的存儲(chǔ)目錄:dataDir=D:/zookeeper-3.4.6/data 、dataLogDir=D:/zookeeper-3.4.6/data/log; 

事務(wù)日志與Snapshot的操作是在org.apache.zookeeper.server.persistence包中,這里也主要是分析該包下的各個(gè)類;在FileTxnSnapLog類中看到了它在我們?yōu)槭聞?wù)日志與Snapshot配置的目錄下又創(chuàng)建了一個(gè)子目錄version-2同時(shí)又指定為該兩種文件的存儲(chǔ)目,在里面還可以看到FileTxnLog、FileSnap類分別為處理事務(wù)日志和Snapshot的;

事務(wù)日志文件

在Zab協(xié)議中我們知道每當(dāng)有接收到客戶端的事務(wù)請(qǐng)求后Leader與Follower都會(huì)將把該事務(wù)日志存入磁盤日志文件中,該日志文件就是這里所說的事務(wù)日志,下面將詳細(xì)分析該日志文件;  

FileTxnLog類用于處理事務(wù)日志文件這里就從此類開始,在該類中看到了preAllocSize、TXNLOG_MAGIC、VERSION、lastZxidSeen、dbId等這樣的屬性:  

1. preAllocSize: 默認(rèn)預(yù)分配的日志文件的大小65536*1024字節(jié)  

2. TXNLOG_MAGIC:日志文件魔數(shù)為ZKLG  

3. VERSION:日志文件版本號(hào)2  

4. lastZxidSeen:最后的ZXID

類中還有一個(gè)靜態(tài)代碼塊用于讀取配置項(xiàng)中的preAllocSize,也就是說預(yù)分配的日志文件大小是可配置的,接下來(lái)看看該類中最重要的一個(gè)方法append,該方法主要功能是創(chuàng)建新的日志文件與往日志文件中追加新的事務(wù)日志記錄;從中可以看到日志文件的

相關(guān)信息

1. 文件名為log,后綴為十六進(jìn)制的ZXID  

2. 日志文件頭有:magic、version、dbid  

3. 創(chuàng)建文件后分配的文件大小為:67108864字節(jié)+16字節(jié),其中16字節(jié)為文件頭  

4. 使用Adler32作為日志文件的校驗(yàn)碼  

5. 當(dāng)日志文件寫滿預(yù)分配大大小后就擴(kuò)充日志文件一倍大小

正如從代碼中看到的一樣version-2目錄中存儲(chǔ)著Zookeeper的事務(wù)日志文件,有看到log.10、log.4f文件,這些都是Zookeeper的事務(wù)日志文件;這兩個(gè)文件都有一個(gè)特點(diǎn)就是文件名為log.xx,大小為64MB文件的后綴xx時(shí)間最早的 數(shù)字總是比最晚的小。

如果有了解過Zookeeper的ZAB協(xié)議那肯定知道它為每一個(gè)事務(wù)請(qǐng)求都分配了一個(gè)事務(wù)ID也就是ZXID,上面章節(jié)也知道了xx就是Zookeeper處理請(qǐng)求的ZXID,該ZXID為log文件中第一條事務(wù)的ZXID;ZXID規(guī)則為前32 字節(jié)為L(zhǎng)eader周期,后32字節(jié)為事務(wù)請(qǐng)求序列,所以通過事務(wù)日志就可以輕松的知道當(dāng)前的Leader周期與每個(gè)文件所屬的Leader周期;

日志文件可視化  

事務(wù)日志文件中存儲(chǔ)的都是二進(jìn)制的數(shù)據(jù),如果不借助其他工具是很難知道里面存儲(chǔ)的內(nèi)容的,Zookeeper也給我們提供了這樣的工具,在org.apache.zookeeper.server包中的LogFormatter類為我們提供了把事務(wù)日志文件以我們看得懂的數(shù)據(jù)輸出的功能,這里就使用該工具輸出該事務(wù)日志文件,并解釋該數(shù)據(jù); 

LogFormatter工具的使用方法: java -cp ../../../zookeeper-3.4.6.jar;../../../lib/slf4j-api-1.6.1.jar org.apache.zookeeper.server.LogFormatter log.1

日志分析:  

第一行:ZooKeeper Transactional Log File with dbid 0 txnlog format version 2  

上面的代碼分析中有說到每個(gè)日志文件都有一個(gè)這就是那里所說的日志頭,這里magic沒有輸出,只輸出了dbid還有version;

第二行:15-8-12 下午03時(shí)59分53秒 session 0x14f20ea71c10000 cxid 0x0 zxid 0x1 createSession 4000  

這也就是具體的事務(wù)日志內(nèi)容了,這里是說xxx時(shí)間有一個(gè)sessionid為0x14f20ea71c10000、cxid為0x0、zxid為0x1、類型為createSession、超時(shí)時(shí)間為4000毫秒

第三行:15-8-12 下午03時(shí)59分54秒 session 0x14f20ea71c10000 cxid 0x1 zxid 0x2 create '/solinx0000000000,#736f6c696e78,v{s{31,s{'world,'anyone}}},F,1  

sessionID為0x14f20ea71c10000,cxid:0x01、zxid:0x02、創(chuàng)建了一個(gè)節(jié)點(diǎn)路徑為:/solinx0000000000、節(jié)點(diǎn)內(nèi)容為:#736f6c696e78(經(jīng)過ASCII,實(shí)際內(nèi)容為solinx)、acl為world:anyone任何人都可以管理該節(jié)點(diǎn)、節(jié)點(diǎn)不是ephemeral節(jié)點(diǎn)的、父節(jié)點(diǎn)子版本:1

第四行:15-8-12 下午04時(shí)15分56秒 session 0x14f20ea71c10000 cxid 0x0 zxid 0x3 closeSession null  

這里是說xxx時(shí)間有一個(gè)sessionid為0x14f20ea71c10000、cxid為0x0、zxid為0x3、類型為closeSession

快照文件

快照文件的處理在FileSnap類中,與事務(wù)日志文件一樣快照文件也一樣有SNAP_MAGIC、VERSION、dbId這些,這作用也只是用來(lái)標(biāo)識(shí)這是一個(gè)快照文件;Zookeeper的數(shù)據(jù)在內(nèi)存中是以DataTree為數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)的,而快照就是每間隔一段時(shí)間Zookeeper就會(huì)把整個(gè)DataTree的數(shù)據(jù)序列化然后把它存儲(chǔ)在磁盤中,這就是Zookeeper的快照文件,快照文件是指定時(shí)間間隔對(duì)數(shù)據(jù)的備份,所以快照文件中數(shù)據(jù)通常都不是最新的,多久抓一個(gè)快照這也是可以配置的snapCount配置項(xiàng)用于配置處理幾個(gè)事務(wù)請(qǐng)求后生成一個(gè)快照文件;  

與事務(wù)日志文件一樣快照文件也是使用ZXID作為快照文件的后綴,在FileTxnSnapLog類中的save方法中生成文件并調(diào)用FileSnap類序列化DataTree數(shù)據(jù)并且寫入快照文件中;

快照文件可視化  

與日志文件一樣Zookeeper也為快照文件提供了可視化的工具org.apache.zookeeper.server包中的SnapshotFormatter類,接下來(lái)就使用該工具輸出該事務(wù)日志文件,并解釋該數(shù)據(jù); 

SnapshotFormatter工具的使用方法: 

java -cp ../../zookeeper-3.4.6.jar;../../lib/slf4j-api-1.6.1.jar org.apache.zookeeper.server.SnapshotFormatter snapshot.17

快照分析  

快照文件就很容易看得懂了,這就是Zookeeper整個(gè)節(jié)點(diǎn)數(shù)據(jù)的輸出;

第一行:ZNode Details (count=11):  

ZNode節(jié)點(diǎn)數(shù)總共有11個(gè)

  /cZxid = 0x00000000000000
  ctime = Thu Jan 01 08:00:00 CST 1970
  mZxid = 0x00000000000000
  mtime = Thu Jan 01 08:00:00 CST 1970
  pZxid = 0x00000000000016
  cversion = 7
  dataVersion = 0
  aclVersion = 0
  ephemeralOwner = 0x00000000000000
  dataLength = 0

這么一段數(shù)據(jù)是說,根節(jié)點(diǎn)/:  

  • cZxid:創(chuàng)建節(jié)點(diǎn)時(shí)的ZXID  
  • ctime:創(chuàng)建節(jié)點(diǎn)的時(shí)間  
  • mZxid:節(jié)點(diǎn)最新一次更新發(fā)生時(shí)的zxid  
  • mtime:最近一次節(jié)點(diǎn)更新的時(shí)間  
  • pZxid:父節(jié)點(diǎn)的zxid  
  • cversion:子節(jié)點(diǎn)更新次數(shù)  
  • dataVersion:節(jié)點(diǎn)數(shù)據(jù)更新次數(shù)  
  • aclVersion:節(jié)點(diǎn)acl更新次數(shù)  
  • ephemeralOwner:如果節(jié)點(diǎn)為ephemeral節(jié)點(diǎn)則該值為sessionid,否則為0  
  • dataLength:該節(jié)點(diǎn)數(shù)據(jù)的長(zhǎng)度

快照文件的末尾:

Session Details (sid, timeout, ephemeralCount):   0x14f211584840000, 4000, 0   0x14f211399480001, 4000, 0  

這里是說當(dāng)前抓取快照文件的時(shí)間Zookeeper中Session的詳情,有兩個(gè)session超時(shí)時(shí)間都是4000毫秒ephemeral節(jié)點(diǎn)為0;

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Windows下使用IDEA搭建Hadoop開發(fā)環(huán)境的詳細(xì)方法

    Windows下使用IDEA搭建Hadoop開發(fā)環(huán)境的詳細(xì)方法

    這篇文章主要介紹了Windows下使用IDEA搭建Hadoop開發(fā)環(huán)境,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • java模擬實(shí)現(xiàn)斗地主發(fā)牌小程序

    java模擬實(shí)現(xiàn)斗地主發(fā)牌小程序

    這篇文章主要為大家詳細(xì)介紹了java模擬實(shí)現(xiàn)斗地主發(fā)牌小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • IDEA2022 提示更新 TKK失敗請(qǐng)檢查網(wǎng)絡(luò)連接的問題

    IDEA2022 提示更新 TKK失敗請(qǐng)檢查網(wǎng)絡(luò)連接的問題

    這篇文章主要介紹了IDEA2022 提示:更新 TKK 失敗,請(qǐng)檢查網(wǎng)絡(luò)連接,本文給大家分享解決方案,對(duì)idea2022提示更新TKK失敗感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • Java 如何調(diào)用long的最大值和最小值

    Java 如何調(diào)用long的最大值和最小值

    這篇文章主要介紹了Java 如何調(diào)用long的最大值和最小值的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • log4j詳細(xì)的常用配置說明介紹

    log4j詳細(xì)的常用配置說明介紹

    下面看我怎么一步步配置到控制臺(tái)的,log4j的輸出級(jí)別和輸出模式相信屌絲們都知道的
    2012-11-11
  • SpringBoot中各種Controller的寫法

    SpringBoot中各種Controller的寫法

    這篇文章主要介紹了SpringBoot中各種Controller的寫法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java中Optional的使用指南

    Java中Optional的使用指南

    這篇文章主要給大家介紹了關(guān)于Java中Optional使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • SpringCloud之Feign代理,聲明式服務(wù)調(diào)用方式

    SpringCloud之Feign代理,聲明式服務(wù)調(diào)用方式

    這篇文章主要介紹了SpringCloud之Feign代理,聲明式服務(wù)調(diào)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 對(duì)Java ArrayList的自動(dòng)擴(kuò)容機(jī)制示例講解

    對(duì)Java ArrayList的自動(dòng)擴(kuò)容機(jī)制示例講解

    今天小編就為大家分享一篇對(duì)Java ArrayList的自動(dòng)擴(kuò)容機(jī)制示例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-10-10
  • Java 過濾器實(shí)現(xiàn)敏感詞匯過濾功能

    Java 過濾器實(shí)現(xiàn)敏感詞匯過濾功能

    通過使用 Java 過濾器,我們可以輕松地實(shí)現(xiàn)敏感詞匯過濾的功能,以保護(hù)用戶免受不良內(nèi)容的侵害,讓我們通過一個(gè)簡(jiǎn)單的示例來(lái)演示我們的敏感詞匯過濾器是如何工作的,感興趣的朋友一起看看吧
    2024-01-01

最新評(píng)論