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 #

AspekRabbitMQKafka
Model dasarQueue FIFOAppend-only log
Setelah dibacaDihapusTetap ada
Tracking posisiBrokerConsumer
Cocok untukTask queueEvent 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 #

PerspektifRabbitMQKafka
FilosofiMessage brokerDistributed log
FokusDeliveryStreaming
DeletionSetelah ackBerdasarkan retention
ReplayTidak nativeNative
Cocok untukTask distributionEvent 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.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact