Site icon Freddy Munandar Personal Website

Kafka oooh Kafka

Siapakah Kafka?

Franz Kafka (1883โ€“1924)

Franz Kafka adalah seorang novelis bahasa Jerman yang bepengaruh pada abad 20.

Kafka dilahirkan dalam keluarga kelas menengah Jerman-Yahudi di Praha, ibu kota Kerajaan Bohemia, yang saat itu merupakan bagian dari Kekaisaran Austro-Hongaria, sekarang ibu kota Republik Ceko.

Stop! cukup sampai disitu. Sebenarnya yang kita mau bahas adalah Apache Kafka .

Apache Kafka adalah implementasi kerangka software bus menggunakan stream-processing. Apache Kafka juga merupakan proyek open-source yang dikembangkan oleh Apache Software Foundation yang ditulis menggunakan bahasa pemrograman Scala dan Java.

Kafka awalnya dikembangkan di LinkedIn, dan kemudian dijadikan open-source pada awal 2011. Jay Kreps, Neha Narkhede dan Jun Rao membantu menciptakan Kafka yang kemudian meninggalkan LinkedIn untuk membangun Confluent.

Jay Kreps memilih untuk menamai perangkat lunak tersebut dengan nama penulis Franz Kafka karena itu adalah โ€œsistem yang dioptimalkan untuk penulisanโ€, dan dia menyukai karya Kafka.

Kafka oooh Kafka, begitu ternyata kisah dibalik nama Kafka .

Konsep Dasar Kafka

Perhatikan tulisan tebal diatas? yang ini โ€œsistem yang dioptimalkan untuk penulisanโ€.

Ya, ujung-ujungnya untuk menyimpan data juga ya . Yang harus diketahui adalah data seperti apa dan bagaimana datanya disimpan dan diambil.

Kafka akan menyimpan data secara berkelanjutan dan tidak ada proses hapus data. Data yang disimpan didalam Kafka akan memiliki ID masing-masing dengan timestamp yang incremental.

Tipe data yang bisa disimpan di Kafka itu bisa teks atau binary. Tipe data teks bisa menyimpan berbagai macam format seperti JSON, CSV, dan lain sebagainya.

Kafka adalah suatu platform event streaming terdistribusi yang memungkinkan kita untuk membaca, menulis, menyimpan dan memproses suatu events (records atau messages) dari berbagai mesin.

Tapi, sebenernya buat apa sih kita pakai Kafka? harus ya?

Menurut dokumentasi resmi Kafka. Kafka bisa digunakan untuk berbagai macam hal sebagai berikut:

Mari kita coba memahami konsep dasar Kafka dengan memperhatikan hirarki berikut:

Suatu aplikasi bisa berperan sebagai producer sekaligus consumer.

Praktek Dasar Kafka

Install Apache Kafka menggunakan docker pull bitnami/kafka:latest. Bagi yang belum mengenal Docker silahkan baca dulu artikel tentang Docker disini. Katanya belajar Kafka kok malah pake Docker , sekalian aja ya belajarnya biar gak repot install dependency server Kafka.

Menjalankan Server Kafka dengan Konfigurasi Default

Untuk memulai menyalakan server Kafka, kita perlu menjalankan perintah berikut secara berurutan:

docker run -it --rm \
--network app-tier \
-e KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-server:2181 \
bitnami/kafka:latest kafka-topics.sh --list --zookeeper zookeeper-server:2181

Pada gambar tersebut tidak terlihat daftar topik karena memang kita belum menambahkan topik apapun. Di Kafka sumber data yang dimasukan ke dalam topik biasanya berasal dari suatu kejadian (event) dimana disetiap kejadian ini ada suatu catatan (records) atau pesan (messages) yang harus dikirim atau disimpan. Istilah topik di Kafka bisa dianalogikan seperti folder pada sistem operasi dan event adalah file di dalam folder tersebut. Jadi sebelum Kafka bisa merekam suatu kejadian maka topik harus dibuat untuk bisa menampungnya.

Sekarang kita coba buat topic baru:

Yay!, kita sudah berhasil membuat topic baru bernama berita . Jika kita perhatikan argumen --bootstrap-server, dari manakah kita tau bahwa server Kafka berada di IP address 172.19.0.3? sedangkan untuk port 9092 merupakan port default dari server Kafka.

Caranya dengan menggunakan perintah docker network inspect app-tier. Perhatikan kembali bahwa nama network app-tier sudah dibuat di langkah pertama. Masih bingung? tenang baca artikel tentang Docker Network disini.

docker network inspect app-tier

Sebetulnya disini sudah tersedia juga docker compose filenya jadi tidak perlu eksekusi perintah di terminal satu-satu, namanya juga belajar ya, kita coba satu-satu .

Sekarang kita cek proses container yang sedang berjalan dengan perintah docker ps untuk memastikan server Zookeeper dan server Kafka masih hidup.

Yay! itโ€™s still alive

Kafka Producer

Klien Kafka berkomunikasi dengan Kafka Broker melalui jaringan untuk menulis (atau membaca) event. Setelah event diterima oleh Kafka Broker, selanjutnya event akan disimpan secara persistent dan fault-tolerant dengan durasi waktu selama yang kita butuhkanโ€”bahkan selamanya.

Klien Kafka adalah program yang mengakses server Kafka untuk menyimpan data. Persistent artinya disimpan ke dalam disk. Sedangkan fault-tolerant artinya Kafka akan berusaha menyimpan event sekalipun ada kendala di salah satu cluster asalkan selama masih ada cluster yang berfungsi.

Untuk menjalankan Kafka Producer ketikan perintah berikut ini pada terminal:

docker run -it --rm --network app-tier -e KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-server:2181 bitnami/afka:latest kafka-console-producer.sh --bootstrap-server 172.19.0.3:9092 --topic berita

Jika tidak ada masalah, maka selanjutnya kita bisa mengetikan teks apapun untuk dikirim ke server Kafka. Disitu saya mengirim pesan sebagai berikut:

> Hi
> Saya producer
> apakah ada consumer yang mendengarkan
โ€ฆ

Selanjutnya pesan tersebut bisa diambil oleh consumer.

Kafka Consumer

Because events are durably stored in Kafka, they can be read as many times and by as many consumers as you want. You can easily verify this by opening yet another terminal session and re-running the previous command again.

docker run -it --rm --network app-tier -e KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-server:2181 bitnami/kafka:latest kafka-console-consumer.sh --bootstrap-server 172.19.0.3:9092 --topic berita --group reader

Catatan Penting

  1. Perhatikan konfigurasi durasi waktu data disimpan, defaultnya adalah 7 hari
  2. Saat ini server Kafka masih bergantung dengan server Zookeeper untuk menyimpan metadata dari server Kafka. Selanjutnya ketergantungan ini akan hilang, sehingga server Kafka dapat berdiri sendiri tanpa server Zookeeper. Di versi selanjutnya server Kafka akan menyimpan sendiri metadatanya di dalam Topic khusus. Semoga versi Kafka terbaru ini segera rilis, lumayan mengurangi biaya dan beban pemeliharaan server
  3. Pahami bagaimana Kafka di desain melalui dokumentasi resminya atau disini
  4. Perhatikan ekosistem Kafka agar kita bisa mendapatkan banyak ide ketika menggunakan Kafka. Seperti Kafka Connect, Kafka Streams, kSQL, dan lain sebagainya
  5. Baca sampai selesai buku The Definitive Guide Kafka versi 2.0 dari Confluent

Konsep Kafka Dalam Satu Diagram

Conceptual Kafka Essential

Referensi lain yang layak dibaca:
โ€“ https://kafka.apache.org/quickstart
โ€“ https://kafka.apache.org/documentation/#quickstart
โ€“ Download eBook https://www.confluent.io/resources/kafka-the-definitive-guide-v2/
โ€“ https://www.confluent.io/resources

Photo by Ross Sokolovski on Unsplash