1、Kullanım senaryoları
1.RabbitMQ:
Kullanım kolaylığı ve esneklik gereksiniminin yüksek olduğu senaryolar için uygundur
Asenkron görev işleme: RabbitMQ, asenkron görevleri işlemeye uygun, güvenilir bir mesaj iletim mekanizması sunar. Örneğin, zaman alan görevler bir mesaj kuyruğuna konur ve ardından tüketiciler tarafından asenkron olarak işlenir; böylece sistemin yanıt hızı ve ölçeklenebilirliği artar.
Sistem bileşenlerini birbirinden bağımsızlaştırma: Mesaj aracısı olarak RabbitMQ kullanıldığında farklı sistem bileşenleri mesajlar üzerinden birbirinden bağımsızlaştırılabilir. Böylece gevşek bağlı bir mimari oluşturularak sistemin bakım kolaylığı ve esnekliği artırılır.
Olay güdümlü mimari: RabbitMQ'nun yayınla-abone ol modeli, olay güdümlü bir mimari oluşturmak için kullanılabilir. Sistemdeki olaylar ilgili konulara mesaj olarak yayımlanır; farklı tüketiciler ilgilendikleri konulara abone olarak gerekli işlemleri gerçekleştirebilir.
2.RocketMQ:
Büyük ölçekli veri işleme ve yüksek işlem hacmi gerektiren senaryolar için uygundur
Dağıtık işlemler: RocketMQ, birden fazla iş sistemini içeren dağıtık işlem senaryolarına uygun dağıtık işlem mesajlarını destekler; mesajların tutarlılığını ve güvenilirliğini sağlarken yüksek aktarım kapasiteli mesaj iletimi de sunar.
Gerçek zamanlı günlük işleme:RocketMQ, yüksek işlem kapasitesi ve düşük gecikme özellikleri sayesinde günlük toplama ve analizi, günlük birleştirme gibi gerçek zamanlı günlük işleme senaryolarında kullanılabilir。
Akış işleme:RocketMQ, akış işleme modelini destekler; üretilen veri akışları mesaj kuyruğu aracılığıyla akış işleme çerçevelerine(Flink, Spark Streaming gibi)aktarılabilir ve böylece gerçek zamanlı veri işleme ve analiz yapılabilir.
3.Kafka:
Yüksek veri hacimli gerçek zamanlı veri akışı işleme ve akış işleme senaryolarına uygundur
Veri hatları ve gerçek zamanlı veri işleme: Kafka’nın yüksek işleme kapasitesi ve kalıcı depolama özellikleri, onu akış verilerinin toplanması, iletilmesi ve işlenmesi için güvenilir veri hatları ve gerçek zamanlı veri işleme sistemleri kurmada ideal bir seçenek hâline getirir.
Günlük ve olay akışı işleme: Kafka’nın bölümleme ve sıralamayı koruma özellikleri, onu uygulama günlüklerinin toplanması, olay kaynaklama ve iş süreçlerinin izlenmesi gibi günlük ve olay akışı işleme senaryoları için ideal bir çözüm hâline getirir.
Gerçek zamanlı akış analizi ve makine öğrenmesi:Kafka, akış işleme çerçeveleriyle(Flink, Spark Streaming gibi)birlikte kullanılarak gerçek zamanlı akış analizini ve makine öğrenmesi görevlerini destekler; gerçek zamanlı veri akışlarını işleyerek anlık içgörüler ve karar desteği sağlar.
2、Servis mimarisi
RabbitMQ
Channel(kanal):Channel, RabbitMQ ile uygulama arasındaki sanal bağlantıdır. Uygulama, fiziksel bir bağlantı (connection) üzerinde birden fazla kanal oluşturarak mesajlaşma işlemlerini eşzamanlı gerçekleştirebilir. Kanal, mesaj göndermekten ve almaktan sorumludur; ayrıca kuyruk bildirme, mesaj değişim noktaları tanımlama ve bağlama gibi mesajlarla ilgili işlemleri yürütür. Kanal, tek bir fiziksel bağlantı üzerinden RabbitMQ ile etkileşime giren hafif bir oturum olarak düşünülebilir。
Exchange(değişim birimi):Exchange, mesajların alındığı ve iletildiği merkezdir. Mesajlar RabbitMQ'ya gönderildiğinde Exchange üzerinden yönlendirilir. Exchange, türüne ve bağlama kurallarına göre mesajları bir veya daha fazla kuyruğa yönlendirir. Yaygın Exchange türleri arasında doğrudan(direct), konu(topic), dağıtım(fanout)ve başlık(headers)bulunur.
Queue(Kuyruk): Kuyruk, RabbitMQ'nun mesajları saklamak için kullandığı tampon alandır. Mesajlar hemen tüketiciye yönlendirilemediğinde, tüketicinin onları alıp işlemesini beklemek üzere kuyrukta saklanır. Her kuyruğun benzersiz bir adı vardır ve mesajların teslimi ile tüketimi FIFO(ilk giren ilk çıkar)sırasıyla gerçekleşir.
Virtual Host(Sanal konak):Sanal konak, RabbitMQ sunucusunu birden çok bağımsız bölüme ayırmak için kullanılan mantıksal bir yalıtım ortamıdır. Her sanal konağın kendi exchange'leri, kuyrukları, bağlamaları ve izin ayarları vardır. Sanal konaklar farklı uygulama veya hizmetleri birbirinden yalıtmaya yardımcı olur; güvenlik ve kaynak yönetimi üzerinde denetim sağlar.
Broker(aracı):Broker, RabbitMQ mesaj kuyruğu sunucusunun mesajları alma, saklama ve yönlendirmeden sorumlu bir örneğidir. Üreticinin gönderdiği mesajları tüketiciye aktararak aracılık eder. Bir RabbitMQ örneği birden fazla Broker içerebilir; her Broker birden fazla sanal ana makine ve kuyruk barındırabilir.
RocketMQ
NameServer(Ad sunucusu):NameServer, RocketMQ'nun Broker yönlendirme bilgilerini yönetmek ve sağlamak için kullanılan adlandırma hizmeti bileşenidir. Meta verilerin merkezi olarak çalışır; Broker kayıtlarını, Topic yönlendirme bilgilerini ve benzer verileri tutar. Producer ve Consumer, mesaj göndermeden ve almadan önce doğru Broker bilgilerini edinmek için NameServer ile iletişim kurmalıdır.
Controller(Denetleyici): Controller, RocketMQ'nun tüm RocketMQ kümesinin çalışmasını koordine etmekten ve yönetmekten sorumlu denetleyici bileşenidir. Broker durumundaki değişiklikleri izler, kümenin büyütülmesini ve küçültülmesini yönetir, yük dengeleme gibi işlemleri gerçekleştirir. Controller, RocketMQ kümesinin temel bileşenlerinden biridir ve kümenin güvenilir çalışmasını ve otomatik yönetimini sağlar.
Broker(aracı):Broker, RocketMQ'nun mesaj depolama ve işleme düğümüdür. Producer'dan gelen mesajları almak ve diskte saklamakla sorumludur. Broker ayrıca Consumer'ın mesaj çekme isteklerini işler ve tüketilmek üzere mesajları Consumer'a iter. Bir RocketMQ kümesi birden fazla Broker içerebilir; her Broker, Topic mesaj verilerinin bir bölümünü saklamakla sorumludur.
KafkaMQ
Broker (aracı): Broker, Kafka kümesinde mesajları depolamak ve işlemekle görevli bir düğümdür. Her Broker, bağımsız bir Kafka sunucusu örneğidir. Ayrı bir fiziksel sunucu, sanal makine veya konteyner olabilir. Bir Kafka kümesi, yüksek erişilebilirlik ve yüksek aktarım kapasiteli mesaj iletimini sağlamak için birlikte çalışan birden fazla Broker içerebilir.
Topic(konu):Topic, mesajların mantıksal sınıfı veya konusudur. Mesaj yayımlama ve abonelik birimidir. Producer, mesajları belirli bir Topic'e yayımlar; Consumer ise mesaj almak için ilgilendiği Topic'e abone olur. Topic, ilgili mesajları sınıflandırmak ve gruplamak için kullanılan bir mesaj kapsayıcısı olarak düşünülebilir.
Partition(Bölüm):Bir Topic, bir veya daha fazla bölüme ayrılabilir; her bölüm Topic'in bir alt kümesidir. Bölüm, mesajların depolanması ve iletilmesindeki en küçük birimdir. Her bölüm fiziksel olarak bağımsız bir günlük dosyasına karşılık gelir ve bunlar farklı Broker'lara dağılır. Bölümler, Kafka'nın yatay ölçekleme ve paralel işleme yapmasını sağlarken daha yüksek aktarım kapasitesi sunar. Her bölümdeki mesajlar ilk giren ilk çıkar sırasıyla depolanır ve iletilir.
3、Kalıcılık ve güvenilirlik:
RabbitMQ:RabbitMQ, mesajları diske kalıcı olarak kaydeden bir mesaj kalıcılığı mekanizması kullanarak mesaj güvenilirliğini sağlar. Birden fazla mesaj onay mekanizmasını ve işlemleri destekleyerek mesajların güvenilir biçimde iletilmesini sağlayabilir.
RocketMQ:RocketMQ güçlü kalıcılık ve güvenilirlik özelliklerine sahiptir; eşzamanlı diske yazmayı ve eşzamansız çoğaltmayı destekleyerek son derece güvenilir mesaj iletimi garantisi sunabilir.
Kafka:Kafka, mesajları kalıcı olarak saklar; mesajlar diskteki günlük dosyalarına yazılır. Bölümleme ve çoğaltma mekanizmaları sayesinde yüksek güvenilirlik ve kalıcı depolama olanağı sağlar.
4、İşleme kapasitesi
RabbitMQ: RabbitMQ'nun işlem hacmi genellikle daha düşüktür ve küçük ile orta ölçekli uygulama senaryolarına uygundur. RabbitMQ, küçük ile orta ölçekli uygulama senaryolarına uygundur ve genellikle on binlerce ile yüz binlerce mesajı işleyebilir. Temel odağı mesajların güvenilir biçimde iletilmesi ve kalıcı olarak saklanmasıdır; yüksek işlem hacmi gereksinimleri için optimizasyon ve ayarlamalar gerekebilir.
RocketMQ:RocketMQ yüksek aktarım kapasitesine sahiptir ve milyon düzeyinde mesaj işleme kapasitesine ulaşabilir. Dağıtık işlemler ve büyük ölçekli mesaj iletimi senaryolarında üstün performans gösterir.
Kafka: Kafka, yüksek aktarım kapasitesiyle tanınan ve milyonlarca, hatta daha fazla mesajı işleyebilen bir mesaj kuyruğu sistemidir. Kafka; büyük ölçekli veri işleme, gerçek zamanlı akış işleme ve günlük işleme gibi yüksek aktarım kapasitesi gerektiren senaryolara uygundur.
5、Yanıt süresi
6、Topluluk ve ekosistem
RabbitMQ:RabbitMQ zengin bir eklenti ve araç ekosistemine, ayrıca geniş bir geliştirici topluluğunun desteğine sahiptir.
RocketMQ:RocketMQ Çin'de yaygın olarak kullanılmaktadır ve zengin bir Alibaba ekosistemi ile topluluk desteğine sahiptir.
Kafka: Kafka, etkin bir açık kaynak topluluğuna ve geniş bir ekosisteme sahiptir; birçok büyük şirket tarafından yaygın olarak kullanılır.
Github Yıldızı
Github Katkıda Bulunanlar
Genel olarak:rabbitmq<rocketmq<kafka
7、Tasarım anlayışı
RabbitMQ:RabbitMQ, AMQP(Gelişmiş Mesaj Kuyruğu Protokolü)temelli açık kaynaklı bir mesaj ara yazılımıdır; kullanım kolaylığına ve esnekliğe odaklanır, çeşitli mesajlaşma modellerini ve güvenilir mesaj iletimini destekler.
RocketMQ:RocketMQ, Alibaba'nın açık kaynaklı dağıtık mesajlaşma ara yazılımıdır. Başlangıçta Alibaba'nın kendi bünyesindeki devasa veri işleme ihtiyaçlarını karşılamak üzere tasarlanmıştır; yüksek işlem hacmi ve düşük gecikmeyle öne çıkar. Alibaba, 2016 yılında RocketMQ'yu Apache Yazılım Vakfı'na bağışladı。
Kafka: Kafka, LinkedIn tarafından geliştirilen dağıtık bir akış işleme platformudur. Esas olarak yüksek işlem hacimli gerçek zamanlı veri akışlarını işlemek için kullanılır; verileri kalıcı biçimde depolar ve işler. Kafka, 2011 yılında Apache'nin açık kaynak projelerinden biri oldu.
8、Veri modeli
RabbitMQ:RabbitMQ, kuyruk (Queue) modelini kullanır; mesajlar kuyruğa gönderilir, tüketiciler mesajları kuyruktan alır ve işler.
RocketMQ:RocketMQ, konu(Topic)ve etiket(Tag)modelini kullanır; mesajlar konulara yayımlanır, tüketiciler konu ve etikete göre abone olabilir ve mesajları filtreleyebilir.
Kafka:Kafka, yayınla-abone ol modelini kullanır; mesajlar konulara yayımlanır, birden fazla tüketici aynı konuya abone olabilir ve mesajları birbirinden bağımsız olarak tüketebilir.
9、Web yönetim aracı
RabbitMQ
RabbitMQ web yönetim arayüzü: RabbitMQ, tarayıcı üzerinden erişilebilen bir web yönetim arayüzüyle gelir. Kuyruklar, exchange'ler, bağlamalar ve kullanıcı izinleri dahil RabbitMQ sunucusunun çeşitli yönlerini görüntüleyip yönetmenizi sağlayan sezgisel bir kullanıcı arayüzü sunar. Varsayılan olarak web yönetim arayüzü 15672 portunda çalışır.
RokcetMQ
RocketMQ Console: RocketMQ'nun resmî olarak sunduğu Web konsoluna RocketMQ Console adı verilir. Topic'ler, tüketici grupları, mesaj sorgulama ve performans istatistikleri dâhil olmak üzere RocketMQ kümesinin çeşitli yönlerini yönetmek ve izlemek için görsel bir arayüz sağlar. Bu aracı, konsolun URL'sine erişerek kullanabilirsiniz.
Kafka
Kafka Manager: Kafka Manager, Yahoo tarafından Apache Kafka kümelerini yönetmek için geliştirilen açık kaynaklı bir grafik yönetim aracıdır. Küme durumunun gerçek zamanlı izlenmesi, konuların ve bölümlerin yönetimi, tüketici gruplarının yönetimi gibi özellikler sunar.
10、Mesajlaşma modeli
Yaygın mesaj ara yazılımlarının iletim modelleri esas olarak noktadan noktaya modeli ile yayımla-abone ol modelidir。Ayrıntıları şöyle:
RabbitMQ:
Yayınlama-abonelik modeli:RabbitMQ, üreticilerin mesajları bir değişim noktasına (Exchange) yayınladığı, değişim noktasının da mesajları kendisine bağlanmış (Binding) birden fazla kuyruğa ilettiği yayınlama-abonelik modelini destekler. Tüketiciler kuyruklardan bağımsız olarak mesaj alabilir.
Noktadan noktaya model:RabbitMQ, üreticinin mesajları belirli bir kuyruğa gönderdiği ve tüketicinin mesajları bu kuyruktan aldığı noktadan noktaya modeli de destekler. Her mesaj yalnızca tek bir tüketici tarafından alınabilir ve işlenebilir.
2.RocketMQ:
Yayınlama-abonelik modeli: RocketMQ, üreticilerin mesajları belirli bir konuya (Topic) gönderdiği, tüketicilerin ise ilgilendikleri konulara abone olduğu yayınlama-abonelik modelini destekler. RocketMQ'nun abonelik modeli, yayın ve küme modları gibi farklı abonelik biçimlerini destekleyerek mesajların çok noktaya iletilmesini veya yük dengeli tüketimini sağlar.
Kuyruk modeli: RocketMQ, üreticilerin mesajları belirli bir kuyruğa gönderdiği, tüketicilerin de mesajları bu kuyruktan aldığı kuyruk modelini de destekler. Birden fazla tüketici, aynı kuyruktaki mesajları paralel olarak tüketebilir.
3.Kafka:
Yayınlama-abonelik modeli:Kafka, üreticilerin mesajları belirli bir konuya (Topic) yayınladığı, tüketicilerin de ilgilendikleri konulara abone olduğu yayınlama-abonelik modelini kullanır. Kafka’nın abonelik modeli birden fazla tüketici grubunu destekler; her grup mesajları bağımsız olarak tüketebilir. Böylece yüksek iş hacmi ve yatay ölçeklenebilirlik sağlanır.
Bölümleme modeli: Kafka, bir konuyu birden fazla bölüme ayırır; her bölüm fiziksel olarak bağımsız bir günlük dosyasına karşılık gelir. Üreticiler mesajları belirli bölümlere gönderir, tüketiciler ise bölümler üzerinden paralel tüketim yapabilir. Bu bölümleme modeli, Kafka’nın yatay ölçekleme ve yüksek işleme kapasitesi sağlamasını mümkün kılar.