Sabtu, 11 Januari 2020

Instalasi Kafka Beserta Service Pada Ubuntu 18.04

Instalasi Kafka Pada Ubuntu 18.04

Download kafka

wget <link_download>

Ekstrak file instalasi Kafka

tar -xvf <nama_file> [-C <path_lokasi_tujuan>]

Copy folder instalasi Kafka ke /opt

sudo cp -R <nama_folder> /opt/

Buat symbolic link ke folder tersebut

sudo ln -s /opt/<nama_folder> /opt/kafka

Instalasi Service Kafka Pada Ubuntu 18.04

Buat file kafka.service pada systemd

sudo nano /etc/systemd/service/kafka.service

Masukkan konfigurasi berikut, sesuaikan dengan kebutuhan

[Unit]
Description=Kafka Daemon
Documentation=http://kafka.apache.org
Requires=network.target
After=network.target

[Service]
Type=forking
WorkingDirectory=/opt/kafka
User=root
Group=root
ExecStart=/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
ExecReload=/opt/kafka/bin/kafka-server-stop.sh && kafka-server-start.sh -daemon /opt/kafka/config/server.properties
TimeoutSec=30
Restart=on-failure
StartLimitInterval=60
StartLimitBurst=30


[Install]
WantedBy=default.target

Update .bashrc

source ~/.bashrc

Aktifkan service yang baru saja dibuat

sudo systemctl enable kafka

Untuk melakukan start/stop/reload, dapat menggunakan command

systemctl start kafka
service kafka start
systemctl stop kafka
service kafka stop
systemctl reload kafka
service kafka reload

Untuk mengecek status service

service kafka status
-----------------------------------------------------

Selasa, 07 Januari 2020

Catatan Pemrograman Android

Testing GPS Location

Konek ke simulator dengan telnet ke localhost port 5554
telnet localhost 5554
Jika menggunakan putty, gunakan method raw
putty -raw localhost 5554
Lalu lakukan autorisasi dengan auth_token simulator yang lokasinya dapat dilihat pada console yang muncul
auth <auth_token>
Untuk mengirimkan koordinat ke simulator
geo fix <longitude> <latitude>
Contoh
geo fix 103.32 -7.09

--

Rabu, 30 Oktober 2019

Konfigurasi Apache ZooKeeper Sebagai Service Pada Ubuntu 18.04

Pindahkan folder ZooKeeper ke dalam /opt/
sudo cp -R zookeeper_dir /opt/

Buat symbolic link ke direktori tersebut
sudo ln -s /opt/zookeeper_dir /opt/zookeeper

Buat file zookeeper.service di systemd
sudo nano /etc/systemd/system/zookeeper.service

Masukkan konten zookeeper.sevice berikut, sesuaikan jika perlu
[Unit]
Description=Zookeeper Daemon
Documentation=http://zookeeper.apache.org
Requires=network.target
After=network.target

[Service]
Type=forking
WorkingDirectory=/opt/zookeeper
User=zookeeperone
Group=zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg
ExecStop=/opt/zookeeper/bin/zkServer.sh stop/ opt/zookeeper/conf/zoo.cfg
ExecReload=/opt/zookeeper/bin/zkServer.sh restart /opt/zookeeper/conf/zoo.cfg
TimeoutSec=30
Restart=on-failure
StartLimitInterval=60
StartLimitBurst=30

[Install]
WantedBy=default.target
Pada kasus saya, tricky part ada di User dan Group, dimana saya harus memasukkan user yang digunakan pada waktu instalasi zookeeper, dalam hal ini zookeeperone.

Update .bashrc
source ~/.bashrc

Untuk mengaktifkan service
sudo systemctl enable zookeeper

Command lain terkait service zookeeper tersebut
systemctl start zookeeper
service zookeeper start
systemctl stop zookeeper
service zookeeper stop
systemctl reload zookeeper
service zookeeper reload


Catatan Command Ubuntu Server 18.04

Menjalankan aplikasi di background

Pause aplikasi dengan menekan  CTRL+Z  lalu jalankan command

bg

Mengecek hardware specs, brand

dmidecode | grep -A3 '^System Information'

Mengecek serial number

dmidecode -s system-serial-number 

Mengecek apakah system running di KVM

systemd-detect-virt

Mengecek hardware (CPU RAM dll) dan running processes

htop

Menambah maksimum heap JVM

sudo nano /etc/profile 
Tambahkan baris berikut: 
export _JAVA_OPTIONS=-Xmx2048m
Kemudian 
sudo reboot
Untuk mengecek heap JVM 
java -XshowSettings:vm

Menambah user kedalam sebuah group

sudo usermod -aG group username

Menghapus user dari sebuah group

sudo deluser username group

Mengecek apakah suatu port sedang digunakan

Dapat menggunakan salah satu command berikut: 
sudo lsof -i -P -n | grep LISTEN 
sudo netstat -tulpn | grep LISTEN 
sudo lsof -i:[port_number] 
sudo nmap -sTU -0 [ip_address]

Menambahkan directory ke dalam $PATH

sudo nano /etc/environment
Tambahkan directory ke dalam $PATH 
sudo reboot

Mengecek ketersediaan slot memory (RAM)

sudo lshw -class memory

Membuat file executable (misal: .sh bash script)

chmod +x path

Command cheatsheet

A ; B        # Run A then B, regardless of success of A 
A && B   # Run B if and only if A succeeded 
A || B       # Run B if and only if A failed 
A &         # Run A in background

Catatan Command Apache Kafka di Ubuntu Server 18.04

Hanya sebagai pengingat saja.

List all topic
kafka_dir/bin/kafka-topics.sh --list --zookeeper zklist:port

Detail topic
kafka_dir/bin/kafka-topics.sh --describe --zookeeper zklist:port --topic [topic-name]

Membuat topic
kafka_dir/bin/kafka-topics.sh --create --zookeeper zklist:port --replication-factor [x] --partitions [y] --topic [topic-name]

Menghapus topic
kafka_dir/bin/kafka-topics.sh --delete --zookeeper zklist:port --topic [topic-name]

Konfigurasi waktu rebalance
leader.imbalance.check.inverval.second
(default 5 menit)

Rebalance manual
kafka_dir/bin/kafka-preferred-replica-election.sh --zookeeper zklist:port

Melihat daftar broker di cluster
Melalui server dedicated zookeeper
zk_dir/bin/zkCli.sh -server addr:port
ls /brokers/ids # daftar broker aktif
ls /brokers/topics # daftar topic
get /brokers/id/[x] # detail broker dengan id [x]
deleteall /brokers/topics/[abc] # konfigurasi ulang topic [abc]

Mengaktifkan JMX Monitoring
$KAFKA_JMX_OPTS JMX_PORT=[your_port_number] ./kafka-server-start.sh -daemon ../config/server.properties

Selasa, 29 Oktober 2019

Mengatasi Kafka Error Group Coordinator Not Available

Saya melakukan instalasi Kafka pada 3 node. Untuk melakukan pengujian fault tolerance, saya melakukan pengujian dengan cara mematikan salah satu node untuk memastikan data tetap mengalir. Yang unik adalah, jika saya mematikan node 2 atau node 3, Consumer tetap dapat menerima data dengan baik. Dalam hal ini menunjukkan bahwa rebalance berhasil dilakukan dengan baik oleh ZooKeeper. Namun, jika node 1 dimatikan, Consumer gagal menerima pesan, dengan error GROUP COORDINATOR NOT AVAILABLE.

Setelah melalui beberapa tahap googling, akhirnya saya berhasil menemukan penyebabnya. Yaitu:
  1. Node 1 adalah GroupCoordinator, dimana itu berarti ia adalah node yang bekerja sebagai leader, mengatur node lainnya (follower) dalam menangani topic sebagai sebuah cluster, dalam hal ini adalah proses yang dilakukan oleh Producer dan Consumer.
  2. Seharusnya, pada saat sebuah GroupCoordinator mati, ZooKeeper akan melakukan reassignment tugas leader dari node tersebut ke node lainnya. Namun, hal ini tidak terjadi sehingga Consumer gagal mendapatkan data karena cluster tidak memiliki leader.
Pertanyaannya, bagaimana proses reassignment ini tidak terjadi?

Kafka memiliki sebuah topic yang di-generate secara otomatis, yaitu __consumer_offsets yang berada di GroupCoordinator dan topic ini diperlukan agar Kafka dapat bekerja dengan normal. Namun ternyata, secara default, replication factor Kafka Topic adalah 1. Termasuk dalam hal ini adalah topic __comsumer_offsets tersebut. Dengan demikian, apabila GroupCoordinator mati, maka Kafka tidak dapat bekerja karena tidak ada topic tersebut di node lainnya.

Untuk mengecek topic __consumer_offsets
kafka_dir/bin/kafka-topics.sh --describe --zookeeper ip_address:port --topic __consumer_offsets 

Oleh karena itu, untuk menangani error tersebut di atas, cukup dengan mereplikasi topic __consumer_offsets, langkahnya:
  1. Matikan semua node Kafka
    kafka_dir/bin/kafka-server-stop.sh
  2. Tambahkan konfigurasi default replication factor
    nano kafka_dir/config/server.properties
    Tambahkan baris berikut:
    offsets.topic.replication.factor=3
    default.replication.factor=3
  3. Konfigurasi ulang topic __consumer_offsetsMasuk ke server Zookeeper
    zookeeper_dir/zkCli.sh -server localhost:2181
    rmr /brokers/topics/__consumer_offsets

    Pada versi ZooKeeper terbaru
    deleteall /brokers/topics/__consumer_offsets
  4. Restart semua node Kafka
    kafka_dir/bin/kafka-server-start.sh kafka_dir/config/server.properties
Demikian.

Minggu, 27 Oktober 2019

Konfigurasi IP Statik Pada Ubuntu Server 18.04

Konfigurasi IP pada Ubuntu 18.04 berbeda dengan versi sebelumnya, yaitu mengunakan netplan. Langkah yang dilakukan adalah sebagai berikut:

1. Generate file yaml
sudo netplan generate

2. Edit file konfigurasi yaml
sudo nano /etc/netplan/01-xxxxxx.yaml
(sesuaikan nama file)

3. Tambahkan atau edit baris berikut
        addresses: [10.102.235.74/24]
        gateway4: 10.102.235.240
        nameservers:
            addresses: [8.8.8.8]
        dhcp4: false
(dhcp4 dirubah ke false)



4. Apply konfigurasi
sudo netplan apply

Demikian.