İşlerimizi
halletmek için giderek daha fazla veriye güvendiğimiz bir zamanda
çalışıyor ve yaşıyoruz. Uygulamalar, hizmetler, yazılımlar,
mobil cihazlar ve diğer unsurlar, hayatımızın çoğu alanına
dokunan ve etkileyen karmaşık ve geniş kapsamlı bir ağ
oluşturmak için bir araya geliyor.
Sonuç
olarak, bu farklı unsurlar arasındaki bilgi akışını yönetme
ihtiyacı artmıştır. Cihazlar ve uygulamalar birbirleriyle
konuşmalıdır ve hataya yer yoktur. Bu nedenle programcılar, bilgi
alışverişinde bulunmak ve birbirleriyle iletişim kurmak için
mesaj aracıları(broker) ve benzeri araçları kullanırlar.
Mesaj Broker ile Yayınla/Abone Ol (Pub/Sub) Mesajlaşma Sistemi
Arasındaki Fark Nedir?
Mesaj
aracıları (Broker), uygulamaların, hizmetlerin ve sistemlerin iletişim
kurmasını ve bilgi alışverişinde bulunmasını sağlayan yazılım
modülleridir. Mesaj aracıları bunu, resmi mesajlaşma protokolleri
arasında mesajları çevirerek, birbirine bağımlı hizmetlerin
farklı dillerde yazılmış veya başka platformlarda çalışıyor
olsalar bile birbirleriyle doğrudan "konuşmasını"
sağlayarak yapar.
Mesaj
aracıları mesajları doğrular, yönlendirir, depolar ve belirlenen
alıcılara iletir. Aracılar diğer uygulamalar arasında aracı
olarak çalışır ve göndericilerin tüketicilerin konumlarını,
aktif olup olmadıklarını veya hatta kaç tane olduklarını
bilmeden mesaj göndermelerine olanak tanır.
Ancak
yayınla/abone ol, üreticilerin istedikleri her mesajı
yayınlamalarına olanak tanıyan bir mesaj dağıtım örüntüsüdür.
Veri
mühendisleri ve bilim insanları pub/sub'u, yayıncı ile
tüketiciler arasında bire-çok ilişkisi bulunan bir yayın tarzı
dağıtım yöntemi olarak adlandırıyor.
Kafka
Nedir?
- Kafka
açık kaynaklıdır dağıtılmış
olay akışı platformu, ham verimi kolaylaştırır. Java ve
Scala'da yazılan Kafka, akışlara ve yüksek girişli veri
tekrarına yönelik bir pub/sub mesaj veri yoludur. Kafka, bir mesaj
kuyruğuna güvenmek yerine mesajları günlüğe ekler ve tüketici
okuyana veya saklama sınırına ulaşana kadar orada kalırlar.
Kafka,
kullanıcıların belirli konumlardan mesaj grupları talep etmesine
izin veren "çekme tabanlı" bir yaklaşım kullanır.
Kullanıcılar, daha yüksek verim ve etkili mesaj teslimi için
mesaj gruplamasından yararlanabilir.
Kafka
yalnızca bir Java istemcisiyle birlikte gelse de, programcıların
kendi benzersiz sistem entegrasyonlarını oluşturmalarına olanak
tanıyan bir adaptör SDK'sı sunar. Ayrıca, büyüyen bir topluluk
ekosistemi projeleri ve açık kaynaklı istemciler kataloğu da
vardır.
Kafka
2011'de yayınlandı, bu yüzden yeni gelen. Kafka'ya dair daha
detaylı bir giriş burada bulabilirsiniz. Ayrıca bu Kafka eğitimi
aracılığıyla nasıl kullanılacağı hakkında daha fazla bilgi
edinebilir ve bunun mimarisine bakabilirsiniz
RabbitMQ
Nedir?
RabbitMQ,
karmaşık yönlendirme senaryolarında verimli mesaj teslimatını
kolaylaştıran açık kaynaklı dağıtılmış bir mesaj
aracısıdır. "Dağıtılmış" olarak adlandırılır
çünkü RabbitMQ genellikle kuyrukların düğümler arasında
dağıtıldığı bir düğüm kümesi olarak çalışır — yüksek
kullanılabilirlik ve hata toleransı için çoğaltılır.
RabbitMQ
bir push modeli kullanır ve tüketici tarafından yapılandırılan
ön getirme sınırı yoluyla kullanıcıları bunaltmayı önler. Bu
model düşük gecikmeli mesajlaşma için ideal bir yaklaşımdır.
Ayrıca RabbitMQ kuyruk tabanlı mimarisiyle de iyi çalışır.
RabbitMQ'yu posta alan, depolayan ve teslim eden bir postane olarak
düşünün, oysa RabbitMQ ikili veri mesajlarını kabul eder,
depolar ve iletir.
RabbitMQ,
AMQP 0.9.1'i doğal olarak uygular ve AMQP 1.0, HTTP, STOMP ve MQTT
gibi ek protokoller sunmak için eklentiler kullanır. RabbitMQ,
Elixir, Go, Java, JavaScript, .NET, PHP, Python, Ruby, Objective-C,
Spring ve Swift'i resmi olarak destekler. Ayrıca topluluk
eklentilerini kullanarak çeşitli geliştirme araçlarını ve
istemcileri destekler.
Kafka
Ne İçin Kullanılır?
Kafka,
karmaşık yönlendirmelere başvurmadan A'dan B'ye akış için en
iyi şekilde kullanılır, ancak maksimum verimle. Ayrıca olay
kaynaklama, akış işleme ve bir sistemde bir olay dizisi olarak
modelleme değişiklikleri gerçekleştirmek için de idealdir. Kafka
ayrıca çok aşamalı veri hatlarında veri işleme için de
uygundur.
Özetle,
akış verilerini depolamak, okumak, yeniden okumak ve analiz etmek
için bir çerçeveye ihtiyacınız varsa Kafka kullanın. Rutin
olarak denetlenen sistemler veya mesajlarını kalıcı olarak
depolayan sistemler için idealdir. Daha da ayrıntılı olarak
açıklamak gerekirse, Kafka gerçek zamanlı işleme ve veri
analizinde parlıyor.
Kafka'da
Akış Veriniz Var. Sırada ne var?
İlk
adım, Kafka'daki verilere sahip olduğunuzda tamamlanır. Ancak,
bunlardan herhangi bir yararlı bilgi çıkarmaya çalışıyorsanız,
akışlarınızı depolamak, yönetmek ve analiz etmek için çok
daha gelişmiş bir mekanizmaya ihtiyacınız olacak. Bunun dışında,
bir diğer öneri de SQLake'i ücretsiz (erken erişim) olarak test
etmenizdir. Tamamen SQL ortamı kullanarak akış ve toplu veriler
üzerinde güvenilir veri hatları oluşturmanızı ve yürütmenizi
sağlar. Ücretsiz olarak deneyebilirsiniz. Kredi kartı gerekmez.
RabbitMQ
Ne İçin Kullanılır?
Geliştiriciler,
RabbitMQ'yu yüksek verimli ve güvenilir arka plan işlerini
işlemek, ayrıca uygulamalar arasında ve içinde entegrasyon ve
iletişim kurmak için kullanır. Programcılar ayrıca, tüketicilere
karmaşık yönlendirme yapmak ve birden fazla uygulamayı ve hizmeti
önemsiz olmayan yönlendirme mantığıyla entegre etmek için
RabbitMQ'yu kullanır.
RabbitMQ,
hızlı istek-yanıt gerektiren web sunucuları için mükemmeldir.
Ayrıca, yüksek yük altında (saniyede 20K+ mesaj) işçiler
arasında yükleri paylaşır. RabbitMQ ayrıca arka plan işlerini
veya PDF dönüştürme, dosya tarama veya görüntü ölçekleme
gibi uzun süreli görevleri de halledebilir.
Özetle,
RabbitMQ'yu uzun süren görevlerde, arka plan işlerinin güvenilir
bir şekilde çalıştırılmasında ve uygulamalar arası ve
içindeki iletişim/entegrasyonda kullanın.
RabbitMQ
ile Kafka Arasındaki Farkları Anlamak
Bu
mesajlaşma çerçeveleri mesajlaşmaya tamamen farklı açılardan
yaklaşır ve yetenekleri büyük ölçüde değişir. Başlangıç
için, bu grafik en önemli farklardan bazılarını açıklar.
Kafka
ve RabbitMQ
|
RabbitMQ
|
Kafka
|
Performans
|
Saniyede
4K-10K mesaj
|
Saniyede
1 milyon mesaj
|
Mesaj
Saklama
|
Teşekkür
temelli
|
Politika
bazlı (örneğin, 30 gün)
|
Veri
Türü
|
İşlemsel
|
Operasyonel
|
Tüketici
Modu
|
Akıllı
komisyoncu/aptal tüketici
|
Aptal
komisyoncu/akıllı tüketici
|
Topoloji
|
Değişim
türü: Doğrudan, Fan out, Konu, Başlık tabanlı
|
Yayınla/abone
ol tabanlı
|
Yük
Boyutu
|
Hiçbir
kısıtlama yok
|
Varsayılan
1MB sınırı
|
Kullanım
Örnekleri
|
Basit
kullanım durumları
|
Büyük
veri/yüksek verimli vakalar
|
Kafka
ile RabbitMQ arasındaki başlıca farklar hakkında daha fazla
bilgi:
RabbitMQ
ayrı, sınırlı bir veri akışı kullanır. Mesajlar üretici
tarafından oluşturulur ve gönderilir ve tüketici tarafından
alınır. Apache Kafka, anahtar-değer çiftlerinin sürekli olarak
atanan konuya aktığı sınırsız bir veri akışı kullanır.
RabbitMQ,
sipariş oluşturma ve yerleştirme ve kullanıcı istekleri gibi
işlemsel veriler için en iyisidir. Kafka, işlem operasyonları,
denetim ve günlük istatistikleri ve sistem etkinliği gibi
operasyonel verilerle en iyi şekilde çalışır.
RabbitMQ
kullanıcılara mesajlar gönderir. Bu mesajlar işlenip
onaylandıktan sonra kuyruktan kaldırılır. Kafka bir günlüktür.
Saklama süresi dolana kadar kuyrukta kalan sürekli mesajları
kullanır.
RabbitMQ
akıllı aracı/aptal tüketici modelini kullanır. Aracı,
tüketicilere sürekli olarak mesajlar iletir ve durumlarını takip
eder. Kafka aptal aracı/akıllı tüketici modelini kullanır.
Kafka her kullanıcının okuduğu mesajları izlemez. Bunun yerine,
yalnızca okunmamış mesajları saklar ve tüm mesajları belirli
bir süre boyunca korur. Tüketiciler her günlükteki konumlarını
izlemelidir.
RabbitMQ,
değişim kuyruğu topolojisini kullanır — tüketicinin kullanımı
için çeşitli kuyruk bağlamalarına yönlendirildikleri bir
değişime mesajlar gönderir. Kafka, yayınla/abone ol topolojisini
kullanır, mesajları akış boyunca doğru konulara gönderir ve
ardından farklı yetkili gruplardaki kullanıcılar tarafından
tüketilir.
Apache
Kafka ile RabbitMQ arasında seçim yaparken, iç işlemler ve temel
tasarım önemli hususlar olabilir.
RabbitMQ'nun
Mimarisi bileşenleri şunlardan oluşur:
Kuyruk:
Alınan mesajların takibinden sorumludur ve bir mesajla ne
yapabileceğini belirten yapılandırma verilerine sahip olabilir.
Değişim:
Bir değişim, RabbitMQ'ya gönderilen mesajları alır ve nereye
iletileceğini belirler. Değişimler, mesajlar için kullanılan
yönlendirme stratejilerini tanımlar, çoğunlukla mesajla birlikte
iletilen veya özniteliklerinin içinde yer alan veri özelliklerini
inceleyerek.
Üretici:
Mesajlar üretir ve bunları bir aracı sunucuya gönderir
(yayınlar). Bir yük ve bir etiket, bir mesajın iki bileşenidir.
Kullanıcının iletmek istediği veri yüktür. Etiket, mesajın
bir kopyasını kimin alması gerektiğini belirtir ve yükü
açıklar.
Tüketici:
Bir kuyruğa abone olur ve bir broker sunucusuna bağlanır.
Broker:
Uygulamalar, bir broker aracılığıyla bilgi alışverişinde
bulunabilir ve birbirleriyle iletişim kurabilir.
Bağlama:
Bir borsaya hangi kuyrukların mesajları dağıtacağını söyler.
Ek olarak, bağlama borsaya belirli borsa türleri için hangi
mesajların bir kuyruğa eklenmesine izin verildiğini
filtrelemesini söyler.
Şimdi
ikisini karşılaştırmak için Apache Kafka'nın mimarisine
bakalım.
Kafka'nın
mimarisi aşağıdaki bileşenler kullanılarak tasarlanmıştır:
Ayna
Yapıcı: Kafka'nın en önemli unsurlarından biri replikasyondur;
bu, aracının bir sorunla karşılaşması durumunda bile
mesajların yayınlanmasını ve tüketilmesini sağlar.
ZooKeeper:
Tüketiciler ve Kafka broker'ı arasında bir bağlantı görevi
görür. Yapılandırma, konum ve durum ayrıntıları gibi
koordinasyon verilerini korur.
Üretici:
Üreticiler, Kafka broker'ında oluşturulan bir Kafka konusuna
mesajlar gönderir veya yayınlar. Üreticiler ayrıca, bir broker'a
senkron veya asenkron bir şekilde mesaj gönderme seçeneğine de
sahiptir.
Tüketiciler:
Bir Kafka konusuna abone olan ve ondan mesajlar çeken kişiler.
Kafka Varsayılan olarak, tüketiciler mesajları ZooKeeper'da
depolar. Ancak, Kafka ayrıca verilerin çevrimiçi işlem işleme
(OLTP) için programlar tarafından kullanılan ek depolama
platformlarında depolanmasına da izin verir.
Broker:
Kafka sunucusu veya broker olarak görev yapar. Her mesaj için
bölüm sayısı, mesajların broker tarafından depolanma sırasına
göre tanımlanır.
Şimdi
RabbitMQ ile Kafka arasındaki Ölçeklenebilirlik ve Yedeklilik
farklarına bakalım.
Şimdi
bu ikisinin Ölçeklenebilirlik ve Yedeklilik açısından
birbirleriyle nasıl karşılaştırıldığına bakalım.
Ölçeklenebilirlik
ve Yedeklilik
RabbitMQ,
mesajları tekrarlamak için bir sıralı sıra kullanır. Verimi
artırmak ve yükü dengelemek için mesajlar sıralar arasında
bölünür. Ayrıca, çok sayıda tüketicinin çeşitli sıralardan
mesajları aynı anda okumasını sağlar.
Ölçeklenebilirlik
ve yedeklilik Kafka bölümleri tarafından sağlanır. Bölüm çok
sayıda broker arasında çoğaltılmıştır. Brokerlardan birinin
arızalanması durumunda, müşteriye yine de başka bir broker
hizmet verebilir.
Tüm
bölümleri tek bir broker'da depolarsak, o broker'a olan
bağımlılığımız artacaktır, bu da tehlikelidir ve başarısız
olma olasılığını artırır. Ayrıca, bölümleri dağıtmak
verimi büyük ölçüde artıracaktır.
Şimdi
bu ikisinin Mesaj Silme açısından birbirleriyle nasıl
karşılaştırıldığına bakalım.
Sıradan
çıkmak için RabbitMQ, tüketici aracılığıyla başarılı bir
onay gönderir.
Olumsuz
ACK durumunda mesajlar kuyruğa geri döndürülür ve olumlu ACK
durumunda tüketiciye kaydedilir.
Kafka
bir saklama süresi kullanırken, bu süreye göre saklanan tüm
iletiler bu süre geçtikten sonra silinir.
Şimdi
bu ikisinin Mesaj Silme konusunda birbirleriyle nasıl
karşılaştırıldığına bakalım.
Bir
mesajın RabbitMQ'nun brokerlarından biri tarafından müşteriye
iletilmesi gerekir ve bu mesajlar gruplar halinde iletilir.
Kafka
Tüketicileri aracıdan bir mesaj okur ve kuyruk sayacı ofsetini
izlenebilir tutar. Mesaj okunur okunmaz ofset artar.
Şimdi
Mesaj Önceliği açısından nasıl farklılaştıklarına bakalım.
RabbitMQ'da
öncelik kuyruğu yardımıyla mesajlara öncelik verilebilir.
Kafka'da
tüm iletilerin önceliği aynıdır ve bu değiştirilemez.
Kafka
ve RabbitMQ'nun sunduğu Kütüphaneler ve Dil Desteği nelerdir?
Şimdi bunlara bakalım.
Kütüphaneler
ve Dil Desteği
RabbitMQ,
Python, Ruby, Elixir, PHP, Swift, Go, Java, C, Spring, .Net ve
JavaScript'i destekler.
Kafka,
Node js, Python, Ruby ve Java'yı destekler.
Şimdi
RabbitMQ ile Kafka'yı karşılaştırdığımızda Sıralı
Sıralama'dan bahsedeceğiz.
Sıralı
Sıralama
Broker
kuyruğundaki mesajların sırası RabbitMQ tarafından tutulur.
Konular,
Kafka tarafından mesajlar arasında ayrım yapmak için kullanılır
ve Zookeeper, herhangi bir konuyu okumak isteyen tüketici tarafından
kullanılabilmesi için ofseti takip eder.
Daha
sonra, bu iki teknolojiyi takip eden Çekme ve İtme Yaklaşımlarına
bakacağız.
Çekme
ve İtme Yaklaşımı
RabbitMQ'nun
push mekanizması tüketicinin herhangi bir mesaj alımından
haberdar olmasını engeller. Broker müşterinin mesajı aldığından
emin olur.
Ayrıca,
mesajların müşteriye ulaştığından emin olmak için verileri
işledikten sonra bir onay döndürür. Olumsuz bir yanıt olduğunda,
mesaj kuyruğa eklenerek bir kez daha gönderilir.
Kafka,
istemcilerin aracıdan toplu olarak veri talep etmesini sağlayan bir
çekme mekanizması sağlar. Akıllıca, tüketici en son mesaj
karşılaşmasının ofsetini takip eder. Ofseti kullanarak, verileri
bölümlerin sırasına göre düzenler.
Şimdi
bu ikisinin mesajlaşmayı nasıl ele aldığını karşılaştıralım.
Mesajlaşmayı
Nasıl Yönetiyorlar?
Bu
iki teknolojinin mesajlaşmayı nasıl ele aldıklarına ilişkin
farklar aşağıdaki tabloda özetlenmiştir
Şim
Alet
|
RabbitMQ
|
Apaçi
Kafka
|
Teslimat
Garantisi
|
Özellikle
tek bir kuyruğu kullanan işlemlerde atomiklik garanti edilmez.
|
Sadece
bir bölüm içinde düzeni korur. Kafka, bir bölümdeki her
mesajın başarılı veya başarısız olmasını sağlar.
|
Mesaj
siparişi
|
Desteklenmiyor.
|
Mesaj
sıralaması, bölümlenmesi yoluyla sağlanır. Mesaj anahtarıyla
mesajlar konulara gönderilir.
|
Mesaj
öncelikleri
|
RabbitMQ'da
mesaj önceliklerini ayarlayabilir ve mesajları en yüksek
öncelik sırasına göre tüketebilirsiniz.
|
Mevcut
değil
|
Mesaj
ömrü
|
RabbitMQ
bir kuyruk olduğundan, mesajlar okunduktan sonra atılır ve bir
onay verilir.
|
Kafka
bir günlük olduğundan, mesajlar varsayılan olarak dosyada
tutulur. Bu, bir saklama politikası tanımlanarak kontrol
edilebilir.
|
di
Apache Kafka ve RabbitMQ'nun temel özelliklerini inceleyeceğiz.
Kafka'nın
Özellikleri
Gerçek
zamanlı veri depolama ve analizini mümkün kılmak için Apache
Kafka şu işlevleri sunar: mesaj iletişimi ve akış işleme.
Apache
Kafka'nın başlıca özellikleri aşağıdadır:
Dağıtılmış
olay akışı platformu: Kafka, Kafka sunucuları arasında mesaj
bölümlendirmesini kolaylaştırırken ve tüketimi bir tüketici
sistemleri kümesine dağıtırken bölüm başına sıralama
semantiğini etkinleştirir.
Yüksek
Verim: Kafka, saniyede milyonlarca mesajı işleyecek ve çok büyük
miktarda veriyi idare edecek şekilde tasarlanmıştır.
Gerçek
zamanlı çözümler: Tüketici iş parçacıklarının, üretici iş
parçacıkları tarafından üretilen mesajlara anında erişebilmesi
gerekir.
Kalıcı
Mesajlaşma: Büyük verilerden gerçek anlamda faydalanmak için
hiçbir tür bilgi kaybı kabul edilemez. Apache Kafka'nın
inşasında kullanılan O(1) Disk Yapıları, aşırı büyük mesaj
depolama yoğunluklarında (TB'lerde) bile sabit zamanlı performans
sağlar. Karmaşık Olay İşleme gibi olay tabanlı sistemlerde bu
kalite çok önemlidir (CEP).
RabbitMQ'nun
Özellikleri
RabbitMQ'nun
bazı temel özellikleri şunlardır:
Güvenilirlik:
RabbitMQ'nun performans üzerinde anında etkisi olan temel
özellikleri arasında kalıcılık, teslimat geri bildirimi,
yayıncı onayları ve yüksek kullanılabilirlik yer alır.
Dahili
Kümeleme: RabbitMQ'daki kümeleme iki amaç düşünülerek
oluşturulmuştur. Bir düğümün arızalanması durumunda
tüketicilerin ve üreticilerin çalışmaya devam etmesini sağlar
ve yeni düğümler ekleyerek mesajlaşma verimini doğrusal olarak
genişletir.
Güvenlik:
RabbitMQ tarafından farklı düzeylerde sunulur. İstemci
Sertifikası Denetimi ve yalnızca SSL iletişimi gerektirilerek
güvenli istemci bağlantıları elde edilebilir. Sanal ana
bilgisayar, yüksek düzeyde ileti izolasyonunu sağlamak için
kullanıcı erişim denetimlerine sahip olabilir.
Esnek
Yönlendirme: Yönlendirme için RabbitMQ, bir dizi yerleşik
değişim türüyle birlikte gelir. Mesajlar, geleneksel
yönlendirmede kuyruklara ulaşmadan önce genellikle değişimler
aracılığıyla yönlendirilir. Kullanıcılar ayrıca karmaşık
yönlendirme için değişimleri birbirine bağlayabilir veya hatta
değişim türlerini bir eklenti olarak geliştirebilirler.
Gereksinimler
ve Kullanım Örnekleri
İlk
aşamalarda, RabbitMQ ve Kafka arasında tasarımda önemli bir fark
ve gereksinimler ve kullanım durumları arasında bir fark vardı.
RabbitMQ'nun mesaj aracısı tasarımı, belirli yönlendirme
gereksinimleri ve mesaj öncesi garantileri olan kullanım durumları
için mükemmel bir seçim olsa da, Kafka'nın yalnızca ekleme
günlüğü, geliştiricilerinakış geçmişi ve daha doğrudan akış
işleme. İki teknoloji tarafından yerine getirilen kullanım
durumlarının Venn diyagramı oldukça sıkıydı. Birinin
diğerinden açıkça daha iyi bir seçim olduğu durumlar vardı.
Ancak
bu denge yakında değişecek. RabbitMQ, geleneksel kuyruk modelini
sağlamanın yanı sıra, yıkıcı olmayan tüketen semantiklerle
yalnızca eklemeli bir günlük modelleyen yeni bir veri yapısı
sunacak. Bu yeni veri yapısı, akış kullanım durumlarını
geliştirmek isteyen RabbitMQ kullanıcıları için ilginç bir
ekleme olacak.
RabbitMQ
ve Kafka'nın geliştirici deneyimi oldukça benzerdi, istemci ve
kütüphane listesi ilgili topluluklarının çalışmaları
nedeniyle sürekli olarak artıyordu. Her ikisinin de istemci
kütüphane listelerinde istikrarlı bir büyüme oldu. Daha fazla
dil ve çerçeve popülerleştikçe, RabbitMQ ve Kafka için iyi
desteklenen ve eksiksiz bir kütüphane bulmak daha kolay hale geldi.
Kafka
akışlarının istemci kütüphanesi uygulaması önemli ölçüde
büyüdü ve geliştiricilerin akış verilerini işlemesini
kolaylaştırdı. Uygulama, Kafka'dan veri okumak, işlemek ve başka
bir Kafka kuyruğuna yazmak için kullanılır. Ayrıca, ksqlDB,
ilişkisel veritabanlarına aşinalıklarını kullanarak akış
uygulamaları geliştirmek isteyen geliştiricilere yardımcı
olabilir.
Geliştiriciler
RabbitMQ ile güçlü akış ve toplu işleme için Spring Cloud Data
Flow'un yardımını alabilirler.
Hem
RabbitMQ hem de Kafka, güvenlik ve işlemleri yönetmek için
yerleşik araçlar sunar. Ayrıca, her iki platform da düğümlerden,
kümelerden, kuyruklardan vb. izleme ölçümlerini geliştiren
üçüncü taraf araçları sunar.
Son
zamanlarda Kubernetes'in ortaya çıkması, altyapı operatörlerinin
hem Kafka'yı hem de RabbitMQ'yu Kubernetes üzerinde çalıştırmasına
olanak sağladı.
RabbitMQ,
kullanıcıları ve kuyrukları yönetmek için tarayıcı tabanlı
bir API ile gelirken, Kafka Taşıma Katmanı Güvenliği (TLS)
şifrelemesi ve JAAS (Java Kimlik Doğrulama ve Yetkilendirme
Hizmeti) gibi özellikler sunar. Hem Kafka hem de RabbitMQ, rol
tabanlı erişim denetimi (RBAC) ve Basit Kimlik Doğrulama ve
Güvenlik Katmanı (SASL) kimlik doğrulamasını destekler.
Kafka'da, güvenlik politikalarını komut satırı arayüzü (CLI)
aracılığıyla bile kontrol edebilirsiniz.
Hizmetin
nasıl yapılandırıldığı, kodun onunla nasıl etkileşime
girdiği ve donanım gibi çok sayıda değişkenin dahil olduğu bir
ortamda performansı ölçmek zor olabilir. Ağ, bellek ve disk hızı
gibi şeyler bile hizmet performansını önemli ölçüde
etkileyebilir. RabbitMQ ve Kafka performans için optimize edilmiş
olsa da, kullanım senaryonuzu maksimum verimlilik için
yapılandırdığınızdan emin olun.
RabbitMQ
için maksimum performans için nasıl yapılır kılavuzlarına
bakın. Kümeler oluştururken dikkate alınması gereken şeyleri,
kümenizi nasıl kıyaslayıp boyutlandıracağınızı, kodunuzun
optimize edilmiş performans için onlarla nasıl etkileşime
gireceğini, kuyruk boyutunu ve bağlantıları nasıl yöneteceğinizi
ve son kullanıcının mesajları nasıl tükettiğine dikkat etmeyi
aklınızda bulundurun.
Benzer
şekilde, Kafka'yı üretim kılavuzlarında çalıştırma, Kafka
kümesinin nasıl yapılandırılacağı, Kafka'yı JVM'de
çalıştırmak için akılda tutulması gereken şeyler ve daha
fazlası hakkında temel noktaları kapsar.
Kafka
ve RabbitMQ Arasında Karar Vermek
Kafka
ve RabbitMQ arasında karar vermek zor olabilir, özellikle de her
iki platform da her geçen gün gelişiyor ve avantaj marjları
daralıyor. Ancak kararınız belirli kullanıcı durumunuza bağlı
olacaktır.
Kafka büyük veri için en uygunudur. En
iyi verimi gerektiren kullanım durumlarında, RabbitMQ düşük
gecikmeli mesaj iletimi için mükemmeldir.
Hem
Kafka hem de RabbitMQ için bazı yaygın kullanım durumları
vardır. Her ikisi de üreten ve tüketen uygulamalar arasında
bağlantı sağlayan mikroservis mimarisinin bileşeni olarak
kullanılabilir. Başka bir yaygın kullanım durumu, mesaj
arabelleği olarak, tüketen uygulamalar kullanılamadığında mesaj
depolama için geçici bir konum sağlamak veya üretici tarafından
oluşturulan mesajlardaki artışları düzeltmek olabilir.
Hem
Kafka hem de RabbitMQ teknolojileri büyük miktarda mesajı farklı
şekillerde işleyebilir ve her biri farklı kullanım durumları
için uygundur.
RabitMQ
Ne Zaman Kullanılır?
Programınızın
bir kullanıcısı, video veya ses gibi başka biçimlere
dönüştürülmesi gereken belirli dosyaları gönderir. Bir arka
plan işlemi veya kuyruğu ayarlamazsanız, kullanıcı bir sonraki
adıma geçmeden önce işlemin bitmesini beklemek zorunda
kalacaktır. Bu, video durumunda çok uzun bir süre olabilir.
Mevcut
eklentileri kullanarak (veya kendi eklentilerinizi tasarlayarak)
tüketici uygulamalarını eski uygulamalarla bağlamak için
RabbitMQ'yu kullanabilirsiniz. Örneğin, JMS uygulamalarına
bağlanmak için JMS istemci kitaplıkları ve Java Mesaj Hizmeti
eklentileri mevcuttur.
Esnek
ve güvenilir bir mesaj aracısına ihtiyacınız varsa RabbitMQ
harika bir seçimdir. RabbitMQ topluluğu aktif ve genişliyor ve
çok sayıda belge ve yardım mevcut. Bir konu hakkında mesajları
tekrar oynatma yeteneğine ihtiyaç duymadığınızda, RabbitMQ
faydalı olabilir. RabbitMQ olayları tekrar oynatamasa da, iletilen
mesajlar yine de korunur; dolayısıyla, mesajı tekrar oynatmak
için üreticiyi kullanabilirsiniz.
Uygulamanızda
belirli bir eylem gerçekleştiğinde, kullanıcıyı bilgilendirmek
isteyebilirsiniz. Uyarıları göndermekle (e-posta, SMS vb.)
ilgilenen kodunuzu ayırarak değerleri kullanıcıya
iletebilirsiniz. RabbitMQ (ve diğerleri(karmaşık ileti
kuyrukları) ayrıca, kaç tane kuyruk, tüketici ve bağlamanın
oluşturulacağı gibi ileti akışını yönetmek için oldukça
karmaşık sistem kuralları sağlamak amacıyla da kullanılabilir.
Mesajların
birden fazla tüketici uygulaması arasında yönlendirilmesi
gerektiğinde, RabbitMQ en iyi seçim olabilir. Sürekli karma
değişimi, yük işlemeyi dağıtılmış bir izleme hizmeti
üzerinden yaymak için kullanılabilir.
Kullanıcılar,
virüslere karşı taranacakları ve diğer kullanıcılara
dağıtılmadan önce dosya hakkında bilgi toplanacakları Softonic
platformuna dosya yükleyebilirler. Yükleme tamamlandığında,
kullanıcı bir bildirim alır. Bu, RabbitMQ'nun Mikro Hizmet
Mimarisi özelliğinin web sunucularının sorgulara hızla yanıt
vermesine izin vermesi sayesinde başarılabilir.
Apache
Kafka Ne Zaman Kullanılır?
Etkinlik
Takibi, Kafka'nın ilk kullanım örneğiydi. LinkedIn'in kullanıcı
etkinliği takibi boru hattı, bir dizi gerçek zamanlı
yayınlama-abone olma akışı olarak yeniden oluşturulmalıdır.
Her kullanıcı sayfa görünümü birkaç etkinlik mesajı (olay)
oluşturduğundan: kullanıcı tıklamaları, beğeniler, kayıtlar,
siparişler, belirli sayfalarda harcanan zaman, çevresel
değişiklikler vb., etkinlik takibi sıklıkla oldukça yüksek bir
hacimdedir. Bu olaylar belirli Kafka temalarına atanabilir
(yayınlanabilir). Her akış, çevrimdışı işleme ve raporlama
için bir veri gölüne veya deposuna koymak gibi çeşitli amaçlar
için kullanılabilir (tüketilebilir).
Kafka,
daha yüksek verim, yerleşik bölümlendirme, çoğaltma ve hata
toleransı ve gelişmiş ölçeklenebilirlik yetenekleri sağladığı
için geleneksel mesaj aracılarına iyi bir alternatiftir.
Mesajları tekrar oynatmak gerektiğinde, tüketici bunu doğrudan
yapabilir. Tekrar oynatma, tüketici bir hata içeriyorsa, aşırı
yüklenmişse veya başka bir şekilde hazır değilse hiçbir
olayın kaybolmamasını sağlar. Sorunu düzeltin, müşteriyi
hızlandırın ve mesajları tekrar oynatın.
Kafka,
operasyonel izleme verilerini depolamak için sıklıkla kullanılır.
Bu, operasyonel verilerin merkezileştirilmiş beslemelerini
oluşturmak için uzak uygulamalardan istatistik toplamayı
gerektirir.
Olay
akışı, bir boru hattının birden fazla aşamasından gelen
verileri işlemek için kullanıldığında, olay akışındaki veri
akışının grafiklerini oluşturarak, çok aşamalı boru
hatlarındaki gerçek zamanlı trafiği izlemek mümkündür.
Birçok
işletme günlükleri toplamak için Kafka'yı kullanır. Günlük
toplama genellikle sunuculardan fiziksel günlük dosyalarını
toplamayı ve bunları işleme için tek bir depoda (örneğin bir
dosya sunucusu veya veri gölü) depolamayı gerektirir. Kafka dosya
özelliklerini kaldırır ve verileri bir mesaj akışı olarak
soyutlar. Bu, daha düşük gecikmeli işleme ve birçok veri
kaynağı ve dağıtılmış veri tüketimi için daha basit destek
sağlar. Scribe veya Flume gibi günlük merkezli sistemlerle
karşılaştırıldığında, Kafka karşılaştırılabilir hız,
çoğaltma sayesinde daha yüksek dayanıklılık garantileri ve
önemli ölçüde azaltılmış uçtan uca gecikme sağlar.
Apache
Kafka Kullanım Örnekleri
Yüksek
Verimli Aktivite Takibi – Kafka'yı web sitesi aktivitesini takip
etme, IoT sensörlerinden veri toplama, sevkiyatları takip etme,
hastanelerdeki hastaları izleme vb. gibi farklı yüksek hacimli,
yüksek verimli aktivite takibi için kullanabilirsiniz.
Akış
İşleme – Olay akışlarına dayalı uygulama mantığını
uygulamak için Kafka'yı kullanın. Örneğin, birkaç dakika süren
bir olay için, olayın süresi boyunca ortalama değeri izleyebilir
veya olay türlerinin sürekli bir sayısını tutabilirsiniz.
Olay
Kaynağı – Kafka, bir uygulama durumundaki herhangi bir
değişikliğin olay dizisi biçiminde depolandığı olay kaynağını
destekler. Örneğin, bir bankacılık uygulaması için Kafka
kullanırken, hesap bakiyesi bir şekilde bozulursa, bakiyeyi
yeniden hesaplamak için depolanan işlem geçmişini
kullanabilirsiniz.
Günlük
toplama – Kafka ayrıca günlük dosyalarını toplamak ve bunları
merkezi bir konumda depolamak için de kullanılabilir.
RabbitMQ
Kullanım Örnekleri
Karmaşık
Yönlendirme – Mikroservis mimarisinde olduğu gibi birçok
tüketen uygulama arasında mesajları yönlendirmek istiyorsanız,
RabbitMQ sizin için en iyi seçim olabilir. RabbitMQ tutarlı karma
değişimi, dağıtılmış bir izleme hizmeti genelinde yük
işlemeyi dengeleyebilir. Ayrıca, A/B testi için olayların
belirli bir bölümünü belirli hizmetlere yönlendirmek için
alternatif değişimleri kullanabilirsiniz.
Eski
Uygulamalar – RabbitMQ'nun bir diğer kullanım durumu, tüketici
uygulamalarını eski uygulamalara bağlamak için mevcut
eklentileri kullanarak (veya kendi eklentinizi oluşturarak)
dağıtmaktır. Örneğin, Java Mesaj Servisi (JMS) eklentisini ve
JMS istemci kitaplığını kullanarak JMS uygulamalarıyla iletişim
kurun.
Hangisini
Öğrenmelisiniz - Kafka mı RabbitMQ mu?
Bu
bir kaçamak gibi görünse de, cevap şudur: İhtiyaçlarınızın
ne olduğuna bağlıdır. İşleminiz aşağıdaki kullanım
durumlarından herhangi birini gerektiriyorsa Apache Kafka'yı
öğrenin ve kullanın:
Olay
kaynağı veya sistem modellemesi, bir dizi olay olarak değişir
Çok
aşamalı veri hatlarında veri akışı ve işlenmesi
"En
az bir kez" bölümlenmiş sırayla teslim edilen bir akış
geçmişine ihtiyaç duyan uygulamalar
En
az 110K/sn olay verimine sahip akışlar, karmaşık yönlendirme
veya "en az bir kez" bölümlenmiş sıralama
Ve
eğer aşağıdaki kullanım durumlarından herhangi biri
kuruluşunuzda geçerliyse RabbitMQ'yu öğrenmeli ve
kullanmalısınız:
Tutarlılık/mesaj
bazında garanti kümesi üzerinde ayrıntılı kontrol
Kullanıcılara/tüketicilere
karmaşık yönlendirme
Çeşitli
yayınlama/abone olma veya noktadan noktaya istek/yanıt mesajlaşma
yetenekleri gerektiren uygulamalar
STOMP,
MQTT, AMQP, 0-9-1 gibi eski protokolleri desteklemesi gereken
uygulamalar
Kariyerinizin
sizi nereye götüreceğinden emin değilseniz, her ikisini de
öğrenmeyi düşünebilirsiniz. Bu strateji, beceri setinizi
güçlendirir, yeni bir iş ortamında esnekliğinizi artırır ve
gelecekteki olası işverenlere pazarlanabilirliğinizi artırır.
Zaman ve kaynaklar izin verdiğinde, hem RabbitMQ hem de Kafka'da
sertifika almayı düşünün ve her şeye hazır olun.
Apache
Kafka sertifika sınavına girmeye hazır olduğunuzda, bunlara göz
atınKafka
pratik sorularıilk
önce, sonra kontrol edebilirsinizKafka
röportaj sorularıiş
görüşmesine hazırlanmak için.
Veri
Mühendisi Olarak Kariyer Fırsatlarına mı Bakıyorsunuz?
Veri
bilimcisi ve veri mühendisi becerileri şunlardır:2021'de
en çok talep gören.
Veri mühendisliği kariyeriyle ilgileniyorsanız, Simplilearn size
doğru yönde bir ivme kazandırmak için veri mühendisliği
kursları sunar. Veri Mühendisliği alanındaki bu Yüksek Lisans
Programı, Hadoop çerçevesini kullanarak dağıtılmış işleme,
Spark kullanarak büyük ölçekli veri işleme, Kafka ile veri
hatları ve veri işleme üzerine odaklanır.AWS
ve Azure bulut altyapısı.Bu
veri mühendisliği sertifika kursunu tamamladığınızda, Veri
Mühendisliği rolü için kariyerinize hazır olacaksınız.
Veri
mühendisliği sertifikasını aldıktan sonra Simplilearn'inVeri
Mühendisliğinde Profesyonel Sertifika ProgramıBu
kurs size mimari, kurulum, yapılandırma ve Kafka açık kaynaklı
mesajlaşma arayüzlerinde nasıl ustalaşacağınızı öğretir.
Merkezi bir hizmet olarak Apache ZooKeeper'ın temellerini öğrenecek
ve gerçek zamanlı mesajlaşma için Kafka'yı dağıtma
becerilerini geliştireceksiniz.
Payscale'e
göre veri mühendisleri yıllık ortalama 92.325 ABD doları
kazanabiliyor, üst sınır ise 132.000 ABD doları civarında.
Simplilearn'ün
veri odaklı kariyer hayallerinizi gerçekleştirmenize yardımcı
olmasına izin verin. Bugün kurslara göz atın ve cömert faydalar
ve istikrar sunan bir kariyer yoluna girin.