ZooKeeper 명령줄 인터페이스에 대해 알아봅니다.
zookeeper 접속
아래 명령어로 로컬 ZooKeeper 서버에 접속합니다.
bin/zkCli.sh -server 127.0.0.1:2181
아래와 같이 CONNECTED 프롬프트가 나오면 정상입니다.
Connecting to 127.0.0.1:2181
...
...
[zk: 127.0.0.1:2181(CONNECTED) 0]
혹시,
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
메시지 상태에 멈추어 있으면 엔터키를 칩니다.
위 프롬프트에서 help 명령어를 입력하고 엔터를 칩니다. 그럼 아래와 같이 표시됩니다.
[zk: 127.0.0.1:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
stat path [watch]
set path data [version]
... ...
close
connect host:port
ls 명령으로 전체 znode를 확인할 수 있습니다.
[zk: 127.0.0.1:2181(CONNECTED) 21] ls /
[admin, brokers, cluster, config, consumers,... ... zookeeper]
1. Create Znodes
주어진 경로로 znode를 생성합니다. znode 명은 대소문자를 구분합니다.
플래그는 생성할 Znode가 임시(flag:e), 영구 또는 순차(flag:e)인지를 지정합니다. 모든 znode는 기본적으로 영구입니다.
임시 znode(flag:e)는 세션이 만료되거나 클라이언트 연결이 끊어지면 자동으로 삭제됩니다.
순차 znode는 znode 경로에 10자리로 시퀀스 번호를 추가합니다. 예를 들어, znode 경로 /myapp를 순차노드로 생성하게 되면 /myapp0000000001로 변환되되어 생성됩니다.
플래그가 지정되지 않은 znode는 영구로 간주합니다.
flag
-s : 순차 znode
-e : 임시 znode
참고로 한글 znode도 생성할 수 있습니다. data는 공백이 있는 경우 " " 로 묶어줍니다.
1.1 영구 znode를 생성합니다.
a. Syntax(문법) : create /path data
b. Sample(예제)
create /zk_test my_data를 실행하여 새 znode를 만듭니다. 그러면 새 znode가 생성되고 "my_data" 문자열이 노드와 연결됩니다.
[zk: 127.0.0.1:2181(CONNECTED) 22] create /zk_test my_data
Created /zk_test
1.2 순차 znode를 생성합니다. 순차 znode를 생성하기 위해 -s 플래그를 추가합니다.
a. Syntax : create -s /path data
b. Sample
[zk: 127.0.0.1:2181(CONNECTED) 6] create -s /FirstZnode second-data
Created /FirstZnode0000000041
a. Syntax : create -e /path data
b. 예제
[zk: 127.0.0.1:2181(CONNECTED) 7] create -e /SecondZnode "Ephemeral-data"
Created /SecondZnode
클라이언트 연결이 끊어지면 임시 znode가 삭제되는지 확인하려면 ZooKeeper CLI를 종료한 다음 CLI를 다시 열면 확인할 수 있습니다.
2. Get Data
znode의 관련 데이터와 지정된 znode의 메타데이터를 가져오기 위해 이 명령어를 사용합니다. 데이터가 마지막으로 수정된 시간, 수정된 위치 및 데이터에 대한 모든 정보와 같은 정보를 얻을 수 있습니다.
이 명령으로 데이터에 대한 알림을 표시하도록 합니다.
2.1 영구노드 조회
a. Syntax : get -s /path
b. Sample
get -s /FirstZnode 명령어로 /FirstZnode 에 있는 데이터에 대한 정보를 보여줍니다.
[zk: 127.0.0.1:2181(CONNECTED) 14] get -s /FirstZnode
Myfirstzookeeper-app
cZxid = 0x877
ctime = Sun Jan 09 21:23:53 KST 2022
mZxid = 0x877
mtime = Sun Jan 09 21:23:53 KST 2022
pZxid = 0x877
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 20
numChildren = 0
a. Syntax : get -s /path
b. Sample
get -s /FirstZnode0000000041 명령어로 /FirstZnode0000000041 에 있는 데이터에 대한 정보를 보여줍니다.
[zk: 127.0.0.1:2181(CONNECTED) 20] get -s /FirstZnode0000000041
second-data
cZxid = 0x878
ctime = Sun Jan 09 21:24:52 KST 2022
mZxid = 0x878
mtime = Sun Jan 09 21:24:52 KST 2022
pZxid = 0x878
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0
a. Syntax : getEphemerals -s /path
b. Sample
getEphemerals / 명령어로 임시노드를 조회합니다.
[zk: 127.0.0.1:2181(CONNECTED) 22] getEphemerals /
[/SecondZnode]
3. Watch
지정된 znode 또는 znode의 자식 데이터가 변경되면 "Watches" 오퍼레이터가 알림을 표시합니다. get 명령에서만 감시를 설정할 수 있습니다. -w 옵션입니다.
a. Syntax : get -w /path
b. Sample
[zk: 127.0.0.1:2181(CONNECTED) 2] get -w /FirstZnode
Myfirstzookeeper-app
watch가 설정되면 znode 변경 시 get 으로 data를 가져오면 아래와 같은 메시지가 출력됩니다.
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/zk_test
4. Set Data
이 명령은 znode의 데이터를 설정합니다. 이 ZooKeeper 설정 작업을 마치면 ZooKeeper에서 get CLI 명령을 사용하여 데이터를 확인할 수 있습니다.
a. Syntax : set /path /data
b. Sample
다음과 같이 set 명령을 실행하여 zk_test와 관련된 데이터를 변경합니다. get 으로 변경된 데이터를 확인합니다.
[zk: 127.0.0.1:2181(CONNECTED) 18] set /zk_test junk
[zk: 127.0.0.1:2181(CONNECTED) 34] get -s /zk_test
junk
cZxid = 0x890
ctime = Sun Jan 09 23:06:22 KST 2022
mZxid = 0x891
mtime = Sun Jan 09 23:06:24 KST 2022
pZxid = 0x890
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
set data 명령 시 znode에 watch 옵션이 설정되어 있으면 아래와 같이 메시지가 같이 출력됩니다.
WatchedEvent state:SyncConnected type:NodeDataChanged path:/zk_test
5. 자식 znode 생성(subznode or children znode)
자식 znode를 만드는 것은 새 znode를 만드는 것과 같습니다. 둘의 차이점은 자식 znode의 경로에 부모 경로가 있다는 것입니다.
a. Syntax : create /parent/subnode data
b. Sample : create /FirstZnode/Child1 firstchildren 명령어로 자식 노드를 생성합니다.
[zk: 127.0.0.1:2181(CONNECTED) 61] create /FirstZnode/Child1 "firstchildren"
Created /FirstZnode/Child1
[zk: 127.0.0.1:2181(CONNECTED) 62] create /FirstZnode/Child2 "secondchildren"
Created /FirstZnode/Child2
6. 노드 조회
ls 명령어로 znode를 조회합니다.
a. Syntax : ls /path
b. Sample
[zk: 127.0.0.1:2181(CONNECTED) 63] ls /FirstZnode
[Child1, Child2]
7. 상태 체크
Status는 지정된 znode의 메타데이터를 조회합니다. 타임스탬프, 버전 번호, ACL, 데이터 길이 및 하위 znode와 같은 여러 세부 정보를 보여줍니다.
a. Syntax : stat /path
b. Sample
stat /FirstZnode 명령어로 /FirstZnode 에 대한 세부 정보를 조회합니다.
[zk: 127.0.0.1:2181(CONNECTED) 64] stat /FirstZnode
cZxid = 0x89e
ctime = Sun Jan 09 23:32:55 KST 2022
mZxid = 0x89e
mtime = Sun Jan 09 23:32:55 KST 2022
pZxid = 0x8a0
cversion = 2
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2
8. Znode 삭제
a. Syntax : delete /path
b. Sample
[zk: 127.0.0.1:2181(CONNECTED) 49] delete /zk_test
[zk: 127.0.0.1:2181(CONNECTED) 51] get /zk_test
Node does not exist: /zk_test
단, delete 명령은 자식이 없는 znode에서만 작동합니다. 자식이 있는 znode를 삭제하려면 deleteall 명령을 사용합니다.
[zk: 127.0.0.1:2181(CONNECTED) 56] delete /FirstZnode
Node not empty: /FirstZnode
자식이 있는 znode를 삭제하려면 deleteall 명령을 사용합니다.
[zk: 127.0.0.1:2181(CONNECTED) 56] deleteall /FirstZnode
[zk: 127.0.0.1:2181(CONNECTED) 58] get /FirstZnode
Node does not exist: /FirstZnode
'Apache Kafka' 카테고리의 다른 글
카프카 Connect (0) | 2022.01.12 |
---|---|
AWS MSK (0) | 2022.01.11 |
아파치 주키퍼 설치 및 실행 (0) | 2022.01.09 |
주키퍼 Cluster 구성 (0) | 2022.01.08 |
아파치 주키퍼란 (0) | 2022.01.08 |