Kafka mı RabbitMQ mü? Doğru soru bu değil
Kafka ile RabbitMQ arasındaki seçim throughput değil, mimari modeldir. Kuyruk mu log mu sorusu, replay ve tekrar işleme ihtiyacına göre netleşir.
Backend mühendisliğinde en çok sorulan ama en kötü cevaplanan sorulardan biri Kafka mı RabbitMQ mü kullanılmalı sorusudur. Çoğu tartışma throughput karşılaştırmasına dönüşse de asıl karar, iki aracın temelde ne olduğunu anlamaktan geçer: RabbitMQ mesajı teslim edip unutan bir kuyruk, Kafka ise mesajları saklayıp tekrar oynatmaya izin veren bir log'dur.
RabbitMQ, exchange ve ack mekanizmasıyla çalışan klasik bir mesaj broker'ıdır; her mesaj bir görevdir ve bir kez işlenip onaylandıktan sonra silinir. Bu model, resim boyutlandırma veya e-posta gönderimi gibi "bir işçi bir görevi bir kez yapsın" senaryoları için idealdir. Kafka ise partition'lara eklenen, silinmeyen bir commit log'dur; her tüketici grubu kendi offset'ini tutar ve mesajlar retention süresi boyunca tekrar okunabilir. Bu fark, replay ihtiyacında en net şekilde ortaya çıkar: analytics kodunda hata varsa Kafka'da offset'i geri alıp geçmişi yeniden işleyebilirsiniz, RabbitMQ'da ise onaylanan mesaj kalıcı olarak kaybolmuştur.
Yazı, throughput benchmarklarının kararın kendisi değil sonucu olduğunu vurguluyor ve basit bir karar ağacı öneriyor: görev tek seferlik ve tek işçiye özelse RabbitMQ, olay birden fazla sistemin ilgilenebileceği bir gerçekse ve geçmişin tekrar işlenmesi gerekiyorsa Kafka. Aynı sistemde komut tarzı görevler için RabbitMQ, olay omurgası için Kafka'yı birlikte kullanmak da tamamen normal kabul ediliyor. Asıl hata, bildiğin aracı her yere zorla uydurmaya çalışmaktır.