Zookeeper Cli
zookeeper 폴더 안 bin폴더를 찾아 아래 명령어로 우선 cli 실행한다.
./bin/zkCli.sh -server $host:$clientPort
우선 간단한 실습을 위해 로컬호스트로 띄웠다.
Create
Get
Set ( Update)
Delete
Watch
-m 로 level을 조정할 수 있다. persistent는 해당 노드 자신만, persistent_recursive는 해당 노드 + 자식 노드까지 알려준다.
Java API
Setting
우선 zookeeper 연결을 위해 build.gradle에 depedency를 추가한다.
dependencies {
implementation 'org.apache.zookeeper:zookeeper:3.7.2'
}
클래스를 만들고 아래 코드로 연결한다.
Zookeeper zk = new ZooKeeper(connectionString, sessionTimeout, new Watcher() {
public void process(WatchedEvent we) {
if (we.getState() == KeeperState.SyncConnected) {
// do your first job
}
}
});
connectionString 는 서버 host:port를 String 타입으로 준다. 여러대면 쉼표로 구분한다. 예) “1.1.1.1:2181,2.1.1.1:2181,3.1.1.1:2181”
SessionTimeout은 connection 시도에 대한 timeout 설정이다.
Watcher는 Watcher 등록을 위한 콜백함수를 등록할 수 있다.
Create
zk.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
이외에 공식문서를 보면 여러 함수를 등록할 수 있는 기능들이 많다.
CreateMode 종류
CONTAINER
EPHEMERAL
EPHEMERAL_SEQUENTIAL
PERSISTENT
PERSISTENT_SEQUENTIAL
PERSISTENT_SEQUENTIAL_WITH_TTL
PERSISTENT_WITH_TTL
sequential이 붙으면 incremental number가 붙어서 자동으로 지정된다.
Get
zk.getData(path, watcher, stat);
설정하고 싶지 않으면 null을 넣으면 된다.
Set (update)
int version = zk.exists(path, true).getVersion();
zk.setData(path, data, version);
version에 -1을 주면 버전과 상관없이 업데이트된다.
addWatch
zk.addWatch(path, mode)
mode 종류
PERSISTENT : 자신만
PERSISTENT_RECURSIVE : children까지