What and How ZooKeeper Threading Model

What and How ZooKeeper Threading Model

Ketika Zookeeper dijalankan maka fungsi utama akan dijalankan pada main thread (Thread Utama), ketika objek zookeeper dibuat dua thread tambahan akan dibuat yaitu :

  • Event Thread
  • IO Thread

Fungsi IO Thread pada Zookeeper

  • IOThread berguna untuk melakukan komunikasi jaringan antara aplikasi dengan zookeeper server.
  • IOThread Berguna untuk menghandle Zookeeper Request dan Response
  • IOThread Melakukan Ping pada Zookeeper
  • IOThread Menghandel Session (Session Management)
  • IOThread Menghandel Sesi Time Out (Session Time Out)

Fungsi Even Thread pada Zookeeper

  • Mengatur event pada zookeeper, event yang diatur adalah untuk melakukan koneksi yang diatur oleh class KeeperState.SyncConected dan memutuskan koneksi pada class KeeperState.Disconected
  • Custom Znode Watchers dan Trigger
  • Mengeksekusi Event

Membuat Aplikasi Sistem Terdistribusi

Selanjutnya kita akan membuat aplikasi menggunakan bahasa java untuk melakukan koneksi dan memutus koneksi Aplikasi Sistem Terdistribusi menggunakan Editor IntelliJ IDEA jika anda belum memiliki aplikasi tesebut silahkan download terlebih dahulu pada link berikut:
  • Buatlah project baru pada IntelliJ IDEA
  • Lakukan konfigurasi project baru seperti pada gambar dibawah ini.

What and How ZooKeeper Threading Model
  • Tekan tombol create untuk membuat project baru.
  • buka file pom.xml kemudian sesuaikan isi dari file tersebut seperti berikut 
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>distributed.systems</groupId>
    <artifactId>leader.election</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.12</version>
        </dependency>
    </dependencies>

</project>
  • Setelah menyesuaikan pom.xml selanjutnya kita perlu mengatur settingan plugin agar library yang dibutuhkan dapat terdownload secara otomatis, settingan tersebut berada di menu file-setting-Build,Execution,Deployment-Build Tools-Maven Kemudian ceklis pilihan use plugin registry. lihat pada gambar dibawah kemudian tekan tombol OK.
  • Klik menu Build-Build Project  agar library dapat terdownload kedalam komputer, pastikan internet terkoneksi dengan baik.
    What and How ZooKeeper Threading Model
    Ceklis use plugin registry
  • Buat class baru pada folder main/java kemudian berikan nama LeaderElection.java
  • Masukan Short Code sebagai berikut
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;

import java.io.IOException;


/**
 * Zookeeper Client Threading Model & Zookeeper Java API
 */
public class LeaderElection implements Watcher {
    private static final String ZOOKEEPER_ADDRESS = "localhost:2181";
    private static final int SESSION_TIMEOUT = 3000;
    private ZooKeeper zooKeeper;

    public static void main(String[] arg) throws IOException, InterruptedException, KeeperException {
        LeaderElection leaderElection = new LeaderElection();

        leaderElection.connectToZookeeper();
        leaderElection.run();
        leaderElection.close();
        System.out.println("Disconnected from Zookeeper, exiting application");
    }

    public void connectToZookeeper() throws IOException {
        this.zooKeeper = new ZooKeeper(ZOOKEEPER_ADDRESS, SESSION_TIMEOUT, this);
    }

    private void run() throws InterruptedException {
        synchronized (zooKeeper) {
            zooKeeper.wait();
        }
    }

    private void close() throws InterruptedException {
        this.zooKeeper.close();
    }

    @Override
    public void process(WatchedEvent event) {
        switch (event.getType()) {
            case None:
                if (event.getState() == Event.KeeperState.SyncConnected) {
                    System.out.println("Successfully connected to Zookeeper");
                } else {
                    synchronized (zooKeeper) {
                        System.out.println("Disconnected from Zookeeper event");
                        zooKeeper.notifyAll();
                    }
                }
        }
    }
}


  • Sebelum kita menjalankan aplikasi kita perlu menambahkan sebuah file baru pada folder main/resources Klik kanan pada folder resources kemudian klik new-file Berikan nama log4j.properties.
  • Masukan coding berikut pada file tersebut
log4j.rootLogger=WARN, zookeeper

log4j.appender.zookeeper=org.apache.log4j.ConsoleAppender
log4j.appender.zookeeper.Target=System.out
log4j.appender.zookeeper.layout=org.apache.log4j.PatternLayout
log4j.appender.zookeeper.layout.ConversionPattern=%d{HH:mm:ss} %-5p %c{1}:%L - %m%n

  • Jika sudah saatnya kita menjalankan aplikasi namun kita perlu menjalankan Apache ZooKeeper Server terlebih dahulu lihat perintah menjalankan zookeeper pada link berikut Cara menjalankan ZooKeeper server
Jika sudah running buka kembali file LeaderElection.java kemudian jalankan klik run pada menu kemudian pilih run 'LeaderElection.java', Jika berhasil maka tampilannya sebagai berikut :

What and How ZooKeeper Threading Model