Queue Comparison #
RabbitMQ dan Kafka sering dibandingkan sebagai message broker.
Keduanya mampu:
- Mengirim event
- Menghubungkan producer dan consumer
- Menangani beban besar
Namun di level paling fundamental, cara keduanya mengimplementasikan konsep queue sangat berbeda.
Artikel ini membahas perbandingan RabbitMQ vs Kafka dari sudut pandang queue model, karena di sinilah perbedaan arsitektural terbesar terjadi.
“Dua sistem bisa sama-sama mengirim pesan, tetapi cara mereka menyimpan dan mengantrikan pesan menentukan seluruh perilaku arsitekturnya.”
Konsep Queue di RabbitMQ #
Dalam RabbitMQ:
- Queue adalah struktur FIFO
- Message masuk ke queue
- Message dihapus setelah di-ack
Alurnya sederhana:
Producer → Exchange → Queue → Consumer → Ack → Hapus
Queue di RabbitMQ bersifat destructive read:
- Setelah consumer meng-ack
- Message tidak lagi tersedia
RabbitMQ dirancang untuk work distribution.
Konsep Log di Kafka (Bukan Queue Tradisional) #
Kafka tidak benar-benar menggunakan model queue tradisional.
Kafka menggunakan append-only log.
Alurnya:
Producer → Topic Partition (Log) → Consumer membaca berdasarkan offset
Perbedaan besar:
- Message tidak dihapus setelah dibaca
- Message tetap disimpan berdasarkan retention policy
- Consumer menyimpan offset sendiri
Kafka menggunakan model immutable log dengan consumer offset tracking.
Perbedaan Fundamental: Destructive vs Non-Destructive #
| Aspek | RabbitMQ | Kafka |
|---|---|---|
| Model dasar | Queue FIFO | Append-only log |
| Setelah dibaca | Dihapus | Tetap ada |
| Tracking posisi | Broker | Consumer |
| Cocok untuk | Task queue | Event streaming |
RabbitMQ berfokus pada distribusi pekerjaan. Kafka berfokus pada distribusi data event.
Multiple Consumer Behavior #
RabbitMQ #
Jika satu queue memiliki banyak consumer:
- Message dibagi di antara mereka
- Setiap message hanya diproses satu consumer
Ini disebut competing consumer pattern.
Kafka #
Dalam satu consumer group:
- Setiap partition dibaca oleh satu consumer
- Message tetap tersedia untuk consumer group lain
Kafka memungkinkan banyak consumer group membaca data yang sama secara independen.
RabbitMQ tidak memiliki konsep offset replay bawaan seperti Kafka.
Replay dan Time Travel #
Kafka:
- Bisa membaca ulang message lama
- Bisa rewind offset
- Cocok untuk event sourcing
RabbitMQ:
- Setelah di-ack, message hilang
- Replay hanya bisa jika message disimpan ulang secara eksplisit
Kafka dirancang untuk event history. RabbitMQ dirancang untuk message delivery.
Storage Model #
RabbitMQ #
- Message disimpan di memory/disk
- Bisa menggunakan quorum queue
- Dioptimalkan untuk latency rendah
Kafka #
- Log disimpan di disk secara sequential
- Optimized untuk throughput tinggi
- Retention berbasis waktu atau ukuran
Kafka lebih unggul dalam throughput besar dan long-term retention.
RabbitMQ lebih unggul dalam latency rendah dan routing kompleks.
Ordering Behavior #
RabbitMQ:
- FIFO per queue
- Bisa berubah jika requeue atau priority
Kafka:
- Ordering dijaga per partition
- Tidak global ordering kecuali single partition
Keduanya memiliki batasan ordering, tetapi dengan pendekatan berbeda.
Scaling Model #
RabbitMQ:
- Scale dengan menambah consumer
- Bisa scale queue dengan sharding manual
- Quorum queue untuk HA
Kafka:
- Scale dengan menambah partition
- Consumer group otomatis membagi partition
- Rebalancing otomatis
Kafka memiliki model scaling horizontal yang lebih terstruktur untuk streaming besar.
Use Case yang Tepat #
Gunakan RabbitMQ Jika: #
- Membutuhkan routing kompleks (direct, topic, headers)
- Work queue / task processing
- Request-reply pattern
- Latency rendah penting
- Kontrol ack dan retry granular
Gunakan Kafka Jika: #
- Event streaming besar
- Event sourcing
- Audit log
- Replay historis
- Data pipeline dan analytics
RabbitMQ cocok untuk workflow. Kafka cocok untuk data stream.
Misleading Comparison yang Sering Terjadi #
Banyak orang berkata:
“Kafka lebih modern dari RabbitMQ.”
Padahal keduanya menyelesaikan masalah yang berbeda.
Membandingkan keduanya tanpa memahami model queue vs log adalah kesalahan arsitektural.
Ringkasan #
| Perspektif | RabbitMQ | Kafka |
|---|---|---|
| Filosofi | Message broker | Distributed log |
| Fokus | Delivery | Streaming |
| Deletion | Setelah ack | Berdasarkan retention |
| Replay | Tidak native | Native |
| Cocok untuk | Task distribution | Event history |
Penutup #
RabbitMQ dan Kafka sama-sama mengirim pesan.
Namun cara mereka memperlakukan pesan setelah dikirim sangat berbeda.
RabbitMQ melihat pesan sebagai pekerjaan yang harus diselesaikan. Kafka melihat pesan sebagai fakta yang harus disimpan.
Memahami perbedaan model queue ini adalah kunci memilih teknologi yang tepat.
Karena dalam sistem terdistribusi, cara kita menyimpan pesan sering kali lebih menentukan daripada cara kita mengirimkannya.