Apache Kafka - Part 1
Tags: kafka, apache, programming, messagebroker
Published: 2023-12-22 02:43:49


Apache Kafka merupakan salah satu aplikasi message broker yang banyak digunakan saat ini.

Apache Kafka adalah sebuah publish-subscribe messaging system. Messaging system yaitu sistem yang bisa digunakan untuk mengirimkan message antar proses, aplikasi dan server.
Pada apache Kafka terdapat Publisher dan ada Subscriber. Publisher dan Subscriber ini berjalan secara mandiri, dimana publisher bisa mengirim pesan ketika subscribernya belum jalan. Begitupun subscriber, bisa mengkonsumsi pesan kapanpun meskipun producernya tidak sedang berjalan, selama pesannya masih tersedia didalam broker.

Peran kafka yaitu menyimpan pesan yang dikirimkan oleh publisher kedalam broker, dan menyediakan pesan dari broker untuk subscriber kapanpun dia membutuhkannya.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kpowcfsa9e9wnw1m2v2e.png)

# Kafka Broker
Pada setiap pub-sub sistem, pesan harus disimpan kedalam sebuah tempat/wadah. Dimana publisher harus bisa mengirim pesan ke tempat tersebut dan subscriber harus bisa membaca dari tempat tersebut. Di apache kafka, broker bertanggung jawab untuk menyimpan dan menjalankan tugas-tugas tersebut.

Pada Apache Kafka Publisher disebut juga sebagai Producer, aplikasi yang mengirim pesan ke Broker. Subscriber disebut juga sebagai Consumer, aplikasi yang mengkonsumsi pesan dari Broker.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/akjlu85n9msk5kw6k1vr.png)

Jadi Kafka Broker itu bertugas untuk:

1. Menerima pesan dari producer
2. Menyimpan pesan tersebut
3. Memberi pesan ke consumer

Kafka Broker akan menyimpan pesan-pesan tersebut pada file khusus yang disimpan pada hardisk. perlu di ingat bahwa dalam apache kafka ini hanya ada append (menambahkan) pesan ke broker, tidak ada edit ataupun delete pesan.

Kafka Broker juga dapat menghandle multiple Producer dan multiple Consumer seperti gambar dibawah ini

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lg8lqkzqu9tfr10kxz72.png)

Producer akan mengirim terus pesan ke Broker, begitupun dengan Consumer akan terus mengkonsumsi pesan dari Broker, dan keduanya berjalan secara Asyncrhonous.

# Kafka Broker Cluster
Tapi bagaimana jika Broker tersebut failed/mati? maka Producer dan Consumer juga akan berhenti berfungsi. Maka dari itu dibuatlah Broker Cluster. Kita asumsikan Kafka Broker adalah sebuah kafka server dan Kafka Broker Cluster adalah sebuah kumpulan dari beberapa kafka server/broker.

Producer dan Consumer dapat berkomunikasi dengan broker yang berbeda pada cluster tersebut. Artinya setiap producer mungkin akan mengirim pesan ke broker yang berbeda, lalu broker akan menyimpan pesan tersebut di masing-masing drive mereka, sehingga pesan yang kirim oleh producer akan tersebar di antara broker yang berbeda. Begitupun dengan Consumer akan membaca pesan dari kafka broker yang berbeda.

Jika salah satu broker mati di cluster tersebut, maka broker lain akan mengambil alih tugas dari kafka broker sebelumnya. Bagaimana jika dalam satu cluster ada 100 broker? bagaimana mereka berkomunikasi? bagaimana mereka membagi tugas? itu merupakan tugas dari Zookeeper.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9g80quu30574idxcj6nt.png)

# Zookeeper
Zookeeper dikembangkan oleh Apache dimana produknya bernama Apache Zookeeper. Tidak hanya untuk menopang Apache Kafka, Zookeeper juga digunakan untuk mengembangkan Apache Hadoop ataupun Apache Solr. Apache Kafka Broker tidak akan berjalan jika belum terkoneksi ke Zookeeper, itu alasan mengapa Zookeeper adalah bagian yang sangat diperlukan dalam Kafka Broker ekosistem.

Tugas dari Zookeeper yaitu:
1. Memelihara list broker yang aktif: memastikan broker tetap aktif dan menhandle jika ada broker yang mati.
2. Memilih pengontrol broker diantara broker didalam cluster
3. Mengatur konfigurasi topics dan partitions

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/obsbf4h6egwhz7fr0c5e.png)

# Zookeeper Cluster (Ensemble)
Jika broker cluster pada sistem sudah sangat besar, maka tidak aman jiga hanya menggunakan 1 Zookeeper. Karena itu biasanya Zookeeper Cluster dibuat. Dalam menentukan banyaknya Zookeeper direkomendasikan menggunakan angka ganjil seperti 3,5,7 dst. Mengapa? karena disetiap setup Zookeeper Cluter itu harus menentukan Quorum.

Quorum merupakan minimal banyaknya server/zookeeper yang harus aktif dan running didalam Cluster. Jika jumlah server/zookeeper kurang dari minimal Quorum, maka Zookeeper Cluster akan mati dan Broker Cluster juga akan otomatis ikut mati.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/svqs5xvbhxreqpr3vz36.png)

Contoh pada gambar diatas terdapat 3 Zookeeper Server, kita set Quorum = 2. Jika salah satu dari tiga zookeeper diatas down ,maka Ensemble/CLuster akan tetap aktif. Tetapi jika dua dari tiga zookeeper diatas down maka Ensemble/Cluster akan down yang mengakibatkan Apache Kafka juga down.

Mengapa harus angka ganjil dalam menentukan Zookeeper server? dan bagaimana menentukan Quorum?

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cgz2ugzu5h6xig4mv5mq.png)

Kita ambil kasus dari gambar diatas, terdapat 4 server Zookeeper (misalnya 2 server di USA dan 2 lainnya di Singapore) dan kita set Quorum = 2. Dari kasus ini kita bisa asumsikan server di USA itu down, maka Ensemble akan menganggap bahwa Cluster masih baik-baik saja karena masih dalam batas Quorum, padahal jika dilihat akan ada kekacauan data karena server di USA sedang down. Dari sini kita bisa lihat, jika jumlah server Zookeeper itu berjumlah genap, maka Ensemble akan kebingungan dalam menentukan Up atau Down Cluster tersebut. Serta untukmenentukan jumlah Quorum tidak bisa asal-asalan.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q3ole7zumrcsbf58hwi8.png)

Maka dari itu sangat direkomendasikan menentukan jumlah Server Zookeeper itu bernilai ganjil (1,3,5 dst), agar Cluster tidak bingung dalam mengambil keputusan. Perhitungan dalam menentukan Quorum, yaitu setengah dari jumlah server zookeeper ditambah 1 atau dengan rumus (n+1)/2. Contoh: 9 Server = 5 Quorum, 15 Server = 8 Quorum.

# Kafka Topic
Topik adalah kategory pesan yang ada didalam kafka. Producer akan mengirim pesan ke sebuah topik tertentu, dan Consumer akan membaca pesan yang dikirim ke sebuah topik.

Topik harus memiliki nama yang unik disetiap kafka cluter. Pesan yang ada di setiap topik memiliki spesifik nomor, yaitu nomor offset. Nomor ini akan dimiliki setiap pesan yang masuk ke spesifik broker. Seiring berjalannya waktu Producer akan terus mengirim pesan ke topik dan pesan baru tersebut akan ditempatkan setelah pesan terakhir. Misalnya pada gambar dibawah ini pesan terakhir adalah offset 10, makan pesan baru akan masuk dengan offset 11.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/linh8r52y4txkbf9caat.png)

Setiap pesan dan nomor offset yang sudah ditetapkan tidak bisa diubah atau bersifat immutable. Tapi disisi lain broker dapat menghapus pesan yang sudah lama atau sudah expired, ketentuan expired ini disebut dengan Log Retention Period. Secara default waktu expired pesan yaitu 168 jam atau 7 hari.

# Message Structure
Sebelumnya kita tahu bahwa pesan di kafka broker bersifat immutable atau tidak bisa diubah. Adapun struktur dari pesan yang di simpan ke kafka broker seperti berikut:

1. Timestamp
2. Offset Number (unik antar partisi)
3. Key (Opsional)
4. Value

Perlu diingat juga bahwa pesan yang dikirim dari Producer ke kafka broker sebisa mungkin berukuran kecil, tidak direkomendasikan 1 file film dikirim ke kafka broker. Ini berguna untuk meningkatkan efisiensi komunikasi antara producer dan consumer.

---

Tidak terasa sudah cukup banyak yang kita bahas mengenai komponen Apache Kafka, selanjutnya kita akan bahas mengenai keterkaitan Topik dan Partisi. Apa itu partisi? bagaimana pesan tersebar ke partisi-partisi yang terdapat dibroker? serta bagaimana Producer menulis pesan ke topik dan Consumer membaca pesan dari topik? Kita akan bahas di part selanjutnya.
Terimakasih sudah menyempatkan membaca artikel ini, semoga bermanfaat.

Referensi:
https://www.udemy.com/course/apache_kafka/
https://medium.com/@tulus.tobing90/introduction-to-kafka-bdd3727bec5a