새소식

Data Engineering/Distributed System

Zookeeper Cli & java API 사용하기

  • -

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까지
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.