Tüm Notlar
System Design2025-12-15

Kafka vs RabbitMQ: Mimari Bir Seçim, Altyapı Değil

Her ikisi de 'mesaj kuyruğu' sanılır ama dünyaları farklıdır. Yanlış seçim yaparsanız sisteminiz ya çok yavaşlar ya da operasyonel bir kabusa döner.

Alet Çantasındaki İki Farklı Çekiç

Danışmanlık yaptığım şirketlerde en sık gördüğüm hata, "Popüler olanı seçelim" mantığıyla 50 mesajlık bir kuyruk için Kafka cluster'ı kurmaya çalışmak veya milyonlarca log verisini RabbitMQ'ya tıkmaya çalışmaktır.

RabbitMQ: "Akıllı Broker, Aptal Consumer"

RabbitMQ, mektup dağıtan bir postacı gibidir. Mektubu (mesajı) alır, doğru kutuya (queue) koyar ve alıcı (consumer) mektubu aldığında "işim bitti" der, mektup yok olur.

  • Senaryo: E-ticarette "Sipariş Alındı" maili atmak.
  • Neden: Karmaşık routing yapabilirsiniz. "Hata oluşursa Dead Letter Queue'ya at, 5 dakika sonra tekrar dene" gibi lojikler RabbitMQ'nun uzmanlık alanıdır.
  • Sınır: Mesaj sayısı çok artarsa ve consumer'lar yetişemezse, RabbitMQ belleği şişer ve patlar.

Apache Kafka: "Aptal Broker, Akıllı Consumer"

Kafka bir postacı değil, devasa bir Log Defteridir. Gelen her şeyi sırayla yazar ve asla silmez (retention süresi bitene kadar). Consumer, "Ben 5. sayfada kaldım" diye kendi yerini (offset) kendisi takip eder.

  • Senaryo: Kullanıcı tıklama verilerini analiz etmek veya CDC (Change Data Capture) ile veritabanı replikasyonu.
  • Neden: Saniyede 1 milyon mesajı diske yazabilir. Consumer çökse bile geri geldiğinde kaldığı yerden (veya en baştan) okuyabilir. Event Sourcing için biçilmiş kaftandır.
  • Bedel: Kurulumu ve bakımı (ZooKeeper/KRaft) zordur. Tekil mesaj silme veya "Priority Queue" gibi kavramlar yoktur.

Benim Tercihim

Mikroservisler arası "Komut" (Command - "Fatura Kes") iletişimi için RabbitMQ (veya bulutta SQS) kullanırım. Çünkü işlemin sonucundan emin olmam gerekir.

Ancak "Durum" (Event - "Sipariş Oluştu") dağıtımı ve veri akışı için Kafka (veya Redpanda) vazgeçilmezdir.

İkisini aynı kefeye koymayın; biri yönlendirici (Router), diğeri depolayıcıdır (Storage).