Back to IF4031 Arsitektur Aplikasi Terdistribusi
Apache Kafka - Arsitektur Log Terdistribusi
Questions/Cues
Apa tujuan desain Kafka?
Apa itu arsitektur Dumb Broker?
Apa itu Topic?
Apa itu Partition?
Apa itu Offset?
Apa jaminan urutan di Kafka?
Apa itu Consumer Group?
Bagaimana Kafka mendukung P2P dan Pub/Sub?
Apa peran Zookeeper?
Bagaimana Kafka mencapai fault tolerance?
Reference Points
- 10a-IF4031-07a-2024-Message-Publish-Subscribe-Kafka.pdf
Tujuan dan Arsitektur Apache Kafka
Kafka dirancang sebagai platform streaming terdistribusi yang fault-tolerant dengan throughput sangat tinggi. Ini lebih dari sekadar message broker; ia adalah sebuah log komit terdistribusi.
Kafka mengikuti filosofi “Dumb Broker, Smart Client”:
Dumb Broker: Broker Kafka tidak melacak pesan mana yang telah dibaca oleh consumer. Tugas utamanya adalah menerima pesan, menuliskannya ke log, dan menyimpannya untuk periode waktu tertentu (retention period).
Smart Client (Consumer): Setiap consumer bertanggung jawab penuh untuk melacak pesan mana yang sudah dibacanya. Ia menyimpan “penanda” atau pointer yang disebut offset.
Komponen Inti Kafka
Topic: Sebuah nama kategori atau feed di mana pesan dipublikasikan. Contoh: user-logins, order-updates.
Partition: Setiap topic dipecah menjadi satu atau lebih partisi. Partisi adalah log yang terurut dan immutable (tidak dapat diubah). Pesan baru selalu ditambahkan di akhir partisi.
Offset: Setiap pesan di dalam sebuah partisi diberi ID sekuensial unik yang disebut offset. Offset ini berfungsi sebagai koordinat pesan di dalam partisi.
Jaminan Urutan (Ordering Guarantee): Kafka hanya menjamin urutan pesan di dalam satu partisi. Tidak ada jaminan urutan pesan di antara partisi-partisi yang berbeda dalam satu topic.
Consumer Group
Consumer Group adalah konsep kunci yang memungkinkan Kafka untuk mendukung dua model messaging sekaligus:
Satu Label Grup: Sebuah consumer group adalah sekelompok consumer yang bekerja sama untuk mengonsumsi satu topic. Kafka akan mendistribusikan partisi-partisi dari topic tersebut secara merata di antara consumer yang aktif dalam grup. Setiap partisi hanya akan dibaca oleh satu consumer dalam grup.
Implementasi Model Messaging:
Point-to-Point (Queue): Semua consumer Anda berada dalam satu consumer group yang sama. Ini akan menyeimbangkan beban pembacaan partisi di antara mereka.
Publish-Subscribe (Broadcast): Setiap consumer berada dalam consumer group nya sendiri-sendiri. Dengan demikian, setiap consumer akan mendapatkan semua pesan dari semua partisi di topic tersebut.
Fault Tolerance dan Zookeeper
Replikasi: Setiap partisi dapat direplikasi ke beberapa broker. Satu replika akan menjadi Leader (menangani semua operasi baca/tulis) dan yang lainnya menjadi Follower (menyalin data dari leader). Jika leader gagal, salah satu follower akan secara otomatis dipromosikan menjadi leader baru.
Zookeeper: (Pada versi lama, perannya semakin berkurang) Layanan eksternal yang digunakan Kafka untuk mengelola metadata cluster, seperti daftar broker, konfigurasi topic, dan melacak leader dari setiap partisi.
Apache Kafka adalah platform streaming terdistribusi yang beroperasi sebagai log komit, mengadopsi arsitektur “Dumb Broker, Smart Client”. Pesan diorganisir dalam Topic yang dipecah menjadi beberapa Partition, di mana setiap pesan memiliki Offset unik dan urutannya terjamin per partisi. Konsep Consumer Group memungkinkan Kafka untuk secara fleksibel mendukung model messaging Point-to-Point (satu grup) dan Publish-Subscribe (banyak grup), sementara fault tolerance dicapai melalui replikasi partisi antar broker.
Additional Information
Replayability Pesan
Karena broker Kafka tidak menghapus pesan setelah dibaca, dan consumer yang mengelola offset-nya sendiri, Kafka secara alami mendukung replayability. Seorang consumer dapat dengan mudah di-reset untuk mulai membaca pesan dari awal log (offset 0) atau dari titik waktu manapun di masa lalu. Fitur ini sangat kuat untuk beberapa kasus:
Pemulihan dari Bug: Jika Anda menemukan bug di logika consumer Anda, Anda bisa memperbaikinya, me-reset offset, dan memproses ulang semua data historis dengan logika yang benar.
Sistem Analitik Baru: Anda dapat menambahkan layanan analitik baru kapan saja dan membuatnya memproses seluruh riwayat data dari awal untuk membangun state-nya.
Partitioner dan Kunci Pesan
Bagaimana producer memutuskan ke partisi mana sebuah pesan akan dikirim?
Tanpa Kunci: Secara default, producer akan mendistribusikan pesan secara round-robin ke semua partisi yang tersedia untuk menyeimbangkan beban.
Dengan Kunci: Producer dapat menyertakan sebuah kunci bersama pesan (misalnya,
user_id). Kafka akan menggunakan hash dari kunci ini untuk secara konsisten memetakan pesan ke partisi yang sama. Ini menjamin bahwa semua pesan dengan kunci yang sama (misalnya, semua event dariuser_idyang sama) akan selalu masuk ke partisi yang sama dan diproses secara berurutan.