Apache Kafka adalah platform distributed event streaming yang digunakan untuk memproses, menyimpan, dan mendistribusikan data secara real-time dalam skala besar. Kafka banyak digunakan pada arsitektur microservices, sistem event-driven, dan aplikasi yang membutuhkan throughput tinggi serta fault tolerance.
- Masalah pada Arsitektur Microservices Tanpa Kafka
- Dampak Negatif Pendekatan Ini
- Apache Kafka sebagai Solusi
- Konsep Dasar Apache Kafka
- 1. Event
- 2. Producer
- 3. Topic
- 4. Consumer
- 5. Consumer Group
- 6. Partition
- 7. Broker
- Apache Kafka Bukan Database
- Kafka vs Message Broker Tradisional
- Kafka Streams dan Real-Time Processing
- ZooKeeper dan KRaft
- Contoh Penerapan Apache Kafka
- Kapan Sebaiknya Menggunakan Kafka?
Artikel ini akan membahas Apache Kafka secara lengkap dengan bahasa yang mudah dipahami, mulai dari pengertian, masalah yang diselesaikan Kafka, cara kerja, komponen utama, hingga contoh penerapan nyata di dunia industri.
Masalah pada Arsitektur Microservices Tanpa Kafka
Dalam aplikasi modern seperti e-commerce, biasanya terdapat banyak layanan (microservices), misalnya:
-
Order Service
-
Payment Service
-
Inventory Service
-
Notification Service
-
Analytics Service
Pada arsitektur sederhana, layanan-layanan ini sering saling memanggil secara langsung (synchronous). Ketika sebuah order dibuat, Order Service akan memanggil layanan lain satu per satu.
Dampak Negatif Pendekatan Ini
-
Tight Coupling
Setiap layanan saling bergantung. Jika satu layanan bermasalah, layanan lain ikut terhambat. -
Single Point of Failure
Jika Inventory Service down selama 10 menit, proses order bisa terhenti berjam-jam. -
Tidak Skalabel
Saat traffic tinggi (misalnya Black Friday), sistem tidak mampu menangani lonjakan request. -
User Experience Buruk
Pengguna melihat loading lama karena semua proses berjalan sinkron.
Masalah-masalah inilah yang melatarbelakangi kebutuhan akan Apache Kafka.
Apache Kafka sebagai Solusi
Apache Kafka bekerja dengan pendekatan event-driven architecture. Alih-alih service saling memanggil, setiap kejadian penting akan diubah menjadi event dan dikirim ke Kafka.
Kafka berperan sebagai perantara (broker) yang menerima, menyimpan, dan mendistribusikan event ke layanan-layanan yang membutuhkan.
Analogi sederhananya, Kafka seperti kantor pos:
-
Pengirim tidak perlu tahu siapa penerima
-
Pesan dikirim ke satu tempat
-
Penerima mengambil pesan sesuai kebutuhan
Konsep Dasar Apache Kafka
1. Event
Event adalah representasi dari suatu kejadian yang sudah terjadi, misalnya:
-
Order dibuat
-
Pembayaran gagal
-
Stok barang berkurang
Event biasanya berisi:
-
Key
-
Value (payload)
-
Metadata (timestamp, partition, offset)
2. Producer
Producer adalah aplikasi atau service yang mengirim event ke Kafka.
Contoh:
-
Order Service mengirim event
OrderCreated -
Payment Service mengirim event
PaymentFailed
Producer hanya mengirim data dan tidak menunggu respon dari consumer.
3. Topic
Topic adalah kategori atau channel tempat event disimpan di Kafka.
Contoh topic:
-
orders -
payments -
inventory
Topic berfungsi untuk mengelompokkan event berdasarkan jenisnya, mirip seperti tabel dalam database, tetapi bersifat append-only (data hanya ditambah).
4. Consumer
Consumer adalah service yang membaca event dari topic.
Satu topic bisa memiliki banyak consumer, misalnya:
-
Notification Service membaca topic
orders -
Inventory Service membaca topic
orders -
Analytics Service membaca topic
orders
Setiap consumer memproses event sesuai kebutuhannya masing-masing.
5. Consumer Group
Consumer Group adalah kumpulan consumer dengan group.id yang sama.
Fungsinya:
-
Membagi beban pemrosesan
-
Memungkinkan scaling horizontal
-
Menangani failover otomatis
Jika satu consumer mati, Kafka akan mengalihkan partisi ke consumer lain dalam group yang sama.
6. Partition
Partition adalah pembagian data di dalam topic.
Manfaat partition:
-
Memungkinkan parallel processing
-
Meningkatkan throughput
-
Mendukung scaling Kafka
Satu topic bisa memiliki banyak partition, dan setiap partition diproses oleh satu consumer dalam satu consumer group.
7. Broker
Broker adalah server Kafka yang:
-
Menyimpan data event di disk
-
Menangani request dari producer dan consumer
-
Melakukan replikasi data untuk fault tolerance
Satu cluster Kafka biasanya terdiri dari beberapa broker.
Apache Kafka Bukan Database
Walaupun Kafka menyimpan data, Kafka bukan pengganti database.
Perbedaannya:
-
Database menyimpan state saat ini
-
Kafka menyimpan riwayat kejadian (event log)
Kafka digunakan untuk:
-
Distribusi data
-
Streaming
-
Realtime analytics
Sedangkan database tetap digunakan untuk penyimpanan data utama aplikasi.
Kafka vs Message Broker Tradisional
Perbedaan utama Kafka dengan message queue biasa (seperti RabbitMQ):
-
Kafka menyimpan pesan dalam waktu lama (retention)
-
Consumer bisa membaca ulang data
-
Kafka cocok untuk data streaming dan analytics
Analogi sederhana:
-
Kafka seperti Netflix (on-demand)
-
Message Queue seperti TV live
Kafka Streams dan Real-Time Processing
Kafka menyediakan Kafka Streams API untuk pemrosesan data real-time.
Digunakan untuk:
-
Agregasi data
-
Perhitungan real-time
-
Deteksi kondisi tertentu (contoh: stok menipis)
Contoh penerapan:
-
Dashboard penjualan real-time
-
Tracking lokasi driver
-
Fraud detection
ZooKeeper dan KRaft
Pada versi lama, Kafka membutuhkan ZooKeeper untuk koordinasi cluster.
Sejak Kafka 3.0, diperkenalkan KRaft (Kafka Raft) yang:
-
Menghilangkan ketergantungan ZooKeeper
-
Lebih sederhana
-
Lebih mudah dikelola
ZooKeeper kini dianggap legacy.
Contoh Penerapan Apache Kafka
Apache Kafka banyak digunakan oleh perusahaan besar seperti:
-
Netflix (streaming data)
-
Uber (tracking lokasi)
-
LinkedIn (activity stream)
-
E-commerce (order & inventory)
Kafka sangat cocok untuk sistem dengan traffic tinggi dan kebutuhan real-time.
Kapan Sebaiknya Menggunakan Kafka?
Gunakan Kafka jika:
-
Sistem membutuhkan scalability tinggi
-
Menggunakan microservices
-
Memproses data real-time
-
Membutuhkan event replay
Tidak disarankan jika:
-
Aplikasi sederhana
-
Traffic rendah
-
Tidak membutuhkan streaming
kanalesia.com | Bringing the knowledge you need