Kafka ve Redis OSS arasındaki fark nedir?

Redis OSS, bellek içi bir anahtar-değer veri deposuyken Apache Kafka ise bir akış işleme altyapısıdır. Ancak her ikisini de bir yayınla-abone ol (pub/sub) mesajlaşma sistemi oluşturmak için kullanabileceğinizden bu iki teknolojiyi karşılaştırabilirsiniz. Modern bulut mimarisinde uygulamalar, hizmetler adı verilen daha küçük ve bağımsız yapı taşlarına ayrılır. Pub/sub mesajlaşma, bu dağıtılan sistemler için anlık olay bildirimleri sağlar. Kafka, yayıncıların ve abonelerin, abonelerin gerektiğinde mesaj aldığı ortak bir mesaj kuyruğunu paylaştığı, alma tabanlı bir sistemi destekler. Redis OSS, bir olay gerçekleştiğinde yayıncının mesajları tüm abonelere dağıttığı gönderme tabanlı bir sistemi destekler.

Kafka hakkında bilgi edinin »

Çalışma yöntemleri: Kafka ve Redis OSS pub/sub

Apache Kafka, birden fazla uygulamanın birbirinden bağımsız veri akışı yapmasını sağlayan bir olay akış platformudur. Üreticiler ve tüketiciler olarak adlandırılan bu uygulamalar, konu adı verilen belirli veri bölümlerine ve veri bölümlerinden bilgi yayınlar ve bilgileri kaydeder.

Bu arada Redis OSS, uygulamalar arasında düşük gecikmeli veri aktarımını destekleyen bir bellek içi veri tabanı olarak tasarlanmıştır. Veri okuma ve yazma süresini azaltmak için tüm mesajları sabit disk yerine RAM'de saklar. Kafka gibi, birden fazla tüketici de mesajları almak için bir Redis OSS akışına abone olabilir.

Her ikisini de pub/sub mesajlaşması için kullanabilirsiniz ancak Kafka ve Redis OSS farklı çalışır.

Kafka iş akışı

Apache Kafka, üreticileri ve tüketicileri işlem kümeleri aracılığıyla birbirine bağlar. Her küme, farklı sunucularda bulunan çeşitli Kafka aracılarından oluşur.

Kafka bu amaçlar için konular ve bölümler oluşturur:

  • İlgilendiğiniz bir konuya ait e-posta, ödeme, kullanıcılar ve satın alma gibi benzer verileri gruplandırmaya yönelik konular
  • Veri çoğaltma ve hata toleransı için farklı aracılardaki bölümler

Üreticiler aracıya mesajları yayınlar. Aracı bir mesaj aldığında verileri bir konuya kategorize eder ve verileri bir bölümde saklar. Tüketiciler ilgili konuya bağlanır ve bölümünden verileri ayıklar.

Redis OSS iş akışı

Redis OSS, NoSQL veri tabanı sistemi olarak bir istemci-sunucu mimarisiyle çalışır. Üreticiler ve tüketiciler esnek bağlantılıdır ve mesaj gönderirken birbirlerini tanımak zorunda değildir.

Redis OSS, şu amaçlar için anahtarları ve birincil-ikincil düğümleri kullanır:

  • Benzer mesajları gruplandırmak için anahtarlar. Örneğin, "e-posta", yalnızca e-posta iletilerini tutan veri deposuna işaret eden bir anahtardır. 
  • Mesaj çoğaltma için birincil-ikincil düğümler.

Bir üretici belirli bir düğüme mesaj gönderdiğinde Redis OSS, mesaj anahtarını kontrol ederek mesajı bağlı olan tüm abonelere iletir. Tüketici, mesajları almak için her zaman Redis OSS sunucusuyla etkin bir bağlantı başlatmalı ve sürdürmelidir. Bu, bağlantılı teslim semantiği olarak bilinir.

Pub/sub mesajlaşma hakkında bilgi edinin »

Mesaj işleme: Kafka ve Redis OSS pub/sub

Apache Kafka, geliştiricilere yüksek oranda ölçeklenebilir dağıtılmış mesajlaşma sistemlerini sağlar. Bu arada Redis OSS, bir uygulamanın verileri birden fazla düğüme hızlı bir şekilde göndermesini sağlayan zengin veri yapıları sunar. Her iki sistemin de mesaj sıraya alma mekanizmalarında birkaç farklılığı vardır.

Mesaj boyutu

Kafka ve Redis OSS, tüketiciler ve aboneler arasında küçük boyutlu veri paketleri gönderdiklerinde en iyi şekilde çalışır.

Özellikle Redis OSS, aktarım hızından ödün vermeden büyük veri boyutlarını işlemek için tasarlanmamıştır. Ayrıca, RAM disk depolamasından daha düşük bir kapasiteye sahip olduğundan yüksek miktarda veri depolayamaz. 

Bu arada Kafka, bunu yapmak için özel olarak tasarlanmamış olmasına rağmen çok büyük mesajları destekleyebilir. Kafka mesajı sıkıştırırsa ve siz de katmanlı depolama için yapılandırırsanız 1 GB'ye kadar olan mesajları işleyebilir. Tüm mesajları yerel depolama alanında depolamak yerine, tamamlanan günlük dosyalarını depolamak için uzak depolama alanı kullanır. 

Mesaj teslimi

Kafka tüketicileri verileri mesaj kuyruğundan alır. Her Kafka tüketicisi, okuduğu mesajı bir sonraki mesajı alacak şekilde güncellediği bir ofsetle takip eder. Tüketiciler yinelenen mesajları algılayabilir ve izleyebilir.

Öte yandan Redis OSS, mesajı otomatik olarak bağlı olan abonelere gönderir. Redis OSS aboneleri, sunucudan kendilerine yönlendirilen gelen mesajları pasif olarak bekler. En fazla bir kerelik bir teslim kurulumu olduğu için Redis OSS aboneleri yinelenen mesajları algılayamaz.

Mesaj saklama

Kafka, mesajları tüketiciler okuduktan sonra saklar. Bu nedenle bir istemci uygulaması, alınan verileri kaybederse bu verileri abone olduğu bölümden tekrar isteyebilir. Kullanıcılar, mesaj saklama politikasını ayarlayarak Kafka'nın verileri ne kadar süre saklayacağına karar verebilir. 

Bunun tersine Redis OSS, mesajları teslim edildikten sonra saklamaz. Hiçbir abone akışa bağlı değilse Redis OSS mesajları iptal eder. Abone daha sonra Redis OSS'ye bağlansa bile iptal edilen mesajlar kurtarılamaz.  

Hata işleme 

Hem Kafka hem de Redis OSS, uygulamaların güvenilmez mesaj dağıtımını azaltmasına izin verir ancak bunu farklı şekilde yaparlar.

Redis OSS'de hata işleme, istemci uygulaması ile Redis OSS hizmetleri arasındaki etkileşime odaklanır. Redis OSS ile geliştiriciler, istemci zaman aşımları, arabellek aşımı ve maksimum istemci sınırları gibi durumları ele alabilir. Redis OSS, anahtar-değer çifti veri tabanı mimarisi nedeniyle Kafka'nın yaptığı gibi güçlü mesaj hatası işleme özelliğini sağlayamaz. 

Kafka geliştiricileri, hatalı olayları bir teslim edilemeyen mesaj kuyruğunda saklayabilir, yeniden deneyebilir veya bunları istemci uygulamalarına tutarlı mesaj teslimi sağlamak için yeniden yönlendirebilir. Geliştiriciler, bazı hatalarda bağlayıcı görevlerini otomatik olarak yeniden başlatmak için Kafka Connect API'sini de kullanabilir.

Teslim edilemeyen mesaj kuyrukları hakkında bilgi edinin »

Performans farklılıkları: Kafka ve Redis OSS pub/sub

Kafka veri akışı için özel olarak tasarlandığından Apache Kafka, genel olarak pub/sub mesajlaşmada Redis OSS'yi geride bırakır. Redis OSS için Kafka'nın kullanılamadığı birkaç farklı kullanım örneği vardır. 

Paralellik

Paralellik, birden fazla tüketicinin aynı mesajı aynı anda alabilmesidir.

Redis OSS paralelliği desteklemez.

Öte yandan Kafka, aynı mesajın aynı anda birden fazla tüketiciye dağıtılmasına izin verir. Kafka tüketici gruplarındaki tüketiciler genellikle bir bölümden yeni mesajları sırayla alır. Birden fazla tüketici grubunda tek bir tüketici varsa tüm mesajları o tüketici alır. Bu kurulum ve bölüm çoğaltmasından yararlanarak her bir bölüm çoğaltmasındaki her tüketici grubuna bir tüketici atayabilirsiniz. Bu, tüm tüketicilerin benzer bir mesaj sırası almasını sağlar. 

Aktarım Hızı

Aktarım hızı, her sistemin bir saniyede işleyebileceği mesaj sayısını ölçer.

Kafka genellikle Redis OSS pub/sub'dan daha yüksek aktarım hızına sahiptir. Kafka, her abonenin bir diğerine geçmeden önce mesajı almasını beklemek zorunda olmadığından çok daha büyük veri hacimlerini işler. Bunun yerine, güncel mesajları okuma hızını optimize eden bir önbellekte ve depolama alanında saklar. 

Ancak önbellekteki okunmamış mesajlar en sonunda kaldırıldığı için tüketiciler mesajı yeterince hızlı almıyorsa Kafka'nın performansı düşebilir. Bu durumda, tüketiciler diskten okuma yapmalıdır ve bu da daha yavaştır.

Bu arada, Redis OSS her tüketici için onay beklemelidir. Bu da daha fazla bağlı düğümle aktarım hızını önemli ölçüde düşürür. Geçici bir çözüm olarak işlem hattı oluşturma adı verilen bir süreçle birden fazla istek gönderilir. Ancak bu da mesajlaşma gecikme süresini azaltır. 

Gecikme süresi

Hem Kafka hem de Redis OSS, düşük gecikme süreli veri işleme için uygundur. Redis OSS milisaniye cinsinden değişkenlik gösteren daha düşük bir mesajlaşma süresi sunar, Kafka'nın ortalaması ise on milisaniyedir.

Redis OSS'nin öncelikle RAM'de veri okuduğu ve yazdığı düşünüldüğünde doğal olarak hızda Kafka'yı küçük bir farkla geride bırakır. Ancak Redis OSS, daha büyük mesajları işlediğinde ultra düşük gecikme süreli veri işlemlerini sürdürmeyebilir. Bu arada, Kafka'nın veri kalıcılığı için farklı fiziksel sürücülerdeki bölümleri çoğaltmak üzere daha fazla zamana ihtiyacı vardır. Bu da mesaj teslim süresine işletim yükü getirir.

Redis OSS ve Kafka için gecikme süresi optimize edilebilir ancak bunu dikkatli bir şekilde yapmalısınız. Örneğin, gecikme süresini azaltmak için Kafka mesajlarını sıkıştırabilirsiniz, ancak üreticilerin ve tüketicilerin bunları açmak için daha fazla zamana ihtiyacı vardır.

Redis OSS'deki gecikme; çalışma ortamı, ağ işlemleri, yavaş komutlar veya çatallaşma gibi çeşitli faktörlerden etkilenebilir. Redis OSS, çatallaşma gecikme sürelerini azaltmak için bir Donanım Sanal Makinesi (HVM) tabanlı modern EC2 bulut sunucularında pub/sub teslim sisteminin çalıştırılmasını önerir.

Hata toleransı

Kafka, tüm verileri önde gelen bir aracının depolama diskine yazar ve farklı sunucularda çoğaltır. Bir sunucu hata verdiğinde birden fazla abone verileri yedekleme bölümlerinden alır. 

Kafka'nın aksine Redis OSS, verileri varsayılan olarak yedeklemez ve kullanıcıların özelliği manuel olarak etkinleştirmesi gerekir. Redis OSS, bellek içi veri deposunu kullanır ve bu da kapatıldığında tüm verileri kaybeder. Geliştiriciler, bunu engellemek için RAM verilerinin anlık görüntülerini periyodik olarak yakalamak ve diskte saklamak için Redis OSS Veri Tabanı (RDB) kalıcılığını açar. 

Kullanım zamanı: Kafka ve Redis OSS pub/sub

Apache Kafka, büyük veri kümeleri akışı yapan ve yüksek kurtarılabilirlik gerektiren uygulamalar oluşturmak için daha iyi bir seçimdir. İlk başta, içinden geçen trilyonlarca mesajı işleyebilecek tek bir dağıtılmış veri işlem hattı olarak geliştirildi. Kafka, bir düğüm başarısız olduğunda veri kaybını önlemek için bölümleri farklı sunucular arasında çoğaltır. Kuruluşlar Kafka'yı uygulamalar, mobil Nesnelerin İnterneti (IoT) cihazları ve mikro hizmetler arasındaki gerçek zamanlı iletişimi desteklemek amacıyla kullanır. Ayrıca günlük toplama, akış işleme ve diğer bulut tabanlı veri entegrasyonu görevleri için daha iyi seçimdir.

Bu arada Redis OSS, anlık veri aktarımı gerektiren ancak küçük veri kaybına tolerans gösteren uygulamalar için ultra düşük gecikme süreli olay dağılımı sağlar. Redis OSS, sık erişilen verileri depolamak veya acil mesajları teslim etmek için genellikle oturum önbelleği olarak kullanılır. Daha sorunsuz bir kullanıcı deneyimi sağlamak üzere oyun, e-ticaret veya sosyal medya verilerini depolamak için de uygundur.

Farklılıkların özeti: Kafka ve Redis pub/sub

 

Apache Kafka

Redis OSS

Mesaj boyutu

Sıkıştırma ve katmanlı depolama ile 1 GB'ye kadar mesajları destekler.

Daha küçük boyutlu mesajları destekler.

Mesaj teslimi

Aboneler mesajları kuyruktan çeker.

Redis OSS sunucusu mesajları bağlı abonelere iletir.

Mesaj saklama

Mesajları aldıktan sonra saklar. 

Mesajları saklamaz.

Hata işleme

Mesajlaşma düzeyinde güçlü hata işleme. Teslim edilemeyen mesaj kuyruğu, olay yeniden deneme ve yeniden yönlendirme.

Redis OSS özel durumlarını uygulama düzeyinde zaman aşımları, istemci sınırları ve arabellek kapasitesi ile işlemeniz gerekir. 

Paralellik

Kafka paralelliği destekler. Birden fazla tüketici aynı mesajı aynı anda alabilir. 

Paralelliği desteklemez.

Aktarım Hızı

Zaman uyumsuz okuma/yazma nedeniyle aktarım hızı daha yüksektir. 

Redis OSS sunucusunun başka bir aboneye mesaj göndermeden önce yanıt beklemesi gerektiğinden aktarım hızı daha düşüktür. 

Gecikme Süresi

Düşük gecikme süresi. Varsayılan olarak veri çoğaltması nedeniyle Redis OSS'den biraz daha yavaş. 

Daha küçük boyutlu mesajları dağıtırken ultra düşük gecikme süresi.

Hata toleransı

Bölümleri otomatik olarak farklı aracılara yedekler. 

Varsayılan olarak yedekleme yapmaz. Kullanıcılar Redis OSS kalıcılığını manuel olarak etkinleştirebilir. Düşük veri kaybı riski. 

AWS, Kafka ve Redis OSS gereksinimlerinizi nasıl destekleyebilir?

Amazon Web Services (AWS), yayınla-abone ol (pub/sub) mesajlaşma gereksinimlerinizi desteklemek için ölçeklenebilir ve yönetilen altyapı sağlar. 

Büyük hacimli verileri gerçek zamanlı olarak kolayca almak ve işlemek için Apache Kafka için Amazon Yönetilen Akışını (Amazon MSK) kullanın. Uygun ölçekte yüksek oranda erişilebilir akış düğümleri sağlamak için özel olarak erişilen bir veri yolu oluşturabilirsiniz. Ayrıca AWS IoT Core, Amazon Sanal Özel Bulut (Amazon VPC) ve Apache Flink İçin Amazon Yönetilen Hizmet gibi diğer AWS hizmetleriyle de sorunsuz bir şekilde bağlantı kurabilirsiniz.

Redis OSS iş yükleriniz için yüksek oranda erişilebilir bellek içi depolama sağlamak üzere Amazon MemoryDB'yi kullanın. Kullanıcı etkinliğini almak için yüksek eş zamanlılığa sahip akış verisi beslemelerini çalıştırabilirsiniz. Medya ve eğlence uygulamaları için günde milyonlarca isteği destekleyebilirsiniz.

Bir pub/sub mesajlaşma sistemi oluşturmak için Redis OSS veya Kafka yerine Amazon Simple Notification Service (Amazon SNS) hizmetini de kullanabilirsiniz. Doğrudan uygulamalarınızdan müşterilere veya diğer uygulamalara ölçeklenebilir ve uygun maliyetli bir şekilde mesajlar gönderebilirsiniz. Amazon SNS birkaç farklı özellik sunar. Örneğin:

  • Dağıtılmış sistemler, mikro hizmetler ve olay tabanlı sunucusuz uygulamalar arasında yüksek aktarım hızlı, gönderme tabanlı, çoğa çok mesajlaşma.
  • Mesaj şifreleme ve trafik gizliliği.
  • AWS kategorilerinde yayma özellikleri. Bu kapsamda analiz, işlem, container'lar, veritabanları, Nesnelerin İnterneti (IoT), makine öğrenimi (ML), güvenlik ve depolama bulunur.

Hemen bir hesap oluşturarak AWS'de pub/sub, Redis OSS ve Kafka'yı kullanmaya başlayın.