23 Mayıs 2025 Cuma

Kafka

Kafka Cluster içerisinde Broker ismi verilen iç sunucular yer alır. Bu sunucular birbirleriyle entegre olabilen paralel çalışabilen küçük sunuculardır. Hem iş yükünü azaltmak hemde kapasiteyi ve performansı arttırmak için kafka cluster içerisine ihtiyaç halinden birden fazla broker eklenir. Bu brokerların birleşmesiyle oluşan yapıya da kafka cluster diyoruz. Kafka cluster içerisindeki bu brokerların birbirlerinden haberdar olabilmeleri, organize olabilmeleri, yeni brokerler geldiğinde onlarında sisteme dahil olabilmesi için bu sistemin yönetilmesi gerekir. Kafka Cluster içerisindeki brokerların yönetilmesi ve organize edilmesi(Her hangi bir brokerin down olması durumunda sistemden çıkarılması ve o broker üzerindeki dataların kaybolmaması, bir broker down olduğunda ana sistemin devam etmesi vb.)  sağlayan yapıda dışarından entegre edilen ZooKeeper'dır. Burada dikkat edilmesi gereken nokta Kafkanın yeni versiyonlarında ZooKeeper yerine Kafka Kraft kullanılmaya başladı. Kraft, kafkanın clusterın içerisinde var olan bir yapıdır. Yani ZooKeeper gibi dışarıdan dahil etmemiz gereken bir yapı değildir. Böylelik kafka cluester, zookeeper olmadan daha lighweight bir yapıya ulaşmış oluyor. Brokerlar'a gelen veriler bir kuyruk sistemine yerleştirilir aynı şekilde rabbitmq'da da gelen mesejlar kuyrukta tutulur. RabbitMQ da gelen mesajlar cachelenir, önbellekte tutulur ve consumerlar tarafından okunduktan sonra silinir. Kafka Clusterda bilgiler storage'da tutulur. Bilgi okunduğunda silinmez kalır. İsteğe göre silinedebilir. 




Broker'a bilgi gönderen Producer ve bu bilgiyi okuyan Consumer olmak üzere iki taraf vardır. Producer bilgiyi broker'a gönderir ve broker bu bilgiyi alır,işler ve belli bir sıraya koyup diske yazar.  Consumer subscrine olduğu topic(kuyruk)'i dinlemeye başlar. Subscribe olduğu topic'e bir mesaj düştüğünde o mesajı alır ve yapması gereken işlemleri yapar. Kafka'da topic, mesajların kategorize edildiği bir "konu"dur. Üreticiler (producers) bu topic'e mesaj (event) gönderir, tüketiciler (consumers) bu topic'ten mesajları okur.



Her topic’in kendine ait bir adı vardır (örneğin: user-created, order-events gibi). Topicler, Güvenliği ve performansı(paralel okuma/yazma için) sağlamak için partition denilen parçalara bölünür.  Bu partitionlar Kafka cluster içerisinde bulunan brokerlara üzerine replikalarıyla birlikte dağıtılır. Böylece her bir partititon birden fazla broker üzerinde bulunur.(aynı şekilde her partitionun replikasıda diğer brokerlara dağıtılır). Herhangi bir broker down olduğunda diğer broker üzerinde bulunan partition replikalar görev alır. 



APACHE KAFKA KURULUM

Apache Kafka kurulumu yaparken bir tane node'un tüm istekleri karşılaması ve bunu diğer nodelara dağıtması gerekiyor. Bütün istekler tek bir noktadan girecek ve tek bir noktadan çıkacak şekilde ayarlanması gerekir. Bunu sağlamak içinde Kafka Cluster içerisindeki node'lardan bir tanesinin master olması gerekiyor ve yapıyı yönetmesi gerekiyor. Gelen istekler hangi brokerlara nasıl dağıtılacak,replikaları nasıl olacak, partitionlara giden bilgiler nasıl toplanacak gibi konfigurasların bir broker tarafından yönetilmesi gerekir. Burada Zookeeper yada Kraft'ın yaptığı şey kafta cluesrer'ın içerisindeki brokerların bir birleriyle aynı networkd üzerinde haberleşebilmesi, ayaktalar mı, çökmüşler mi, hangisi primary,hangisi replika olmalı gibi durumları yönetiyorlar. 

1- Single Node

Bir tane broker ve bir tanede bu broker'ı görüntüleyebileceğimiz UI olacak. Bu UI zorunlu değil. Connection işlemleri, bir topic'e bilgi gönderildiği durumları vs. görebilmemizi sağlıyor. Ayrıca bu brokerin yönetilmeye ihtiyacı olduğu için zookeeper yada kraft bir tanesinin olması gerekiyor

1- Multi Node

Birden fazla broker olacak  ve bu brokerların organize edilebilmesi için mutlaka bir zookeeper yada kraft gerekmektedir. 


Not:

Kafkada bir producer tarafından gönderilen mesajlar topic denen kuyruklara yazılır. Bu topiclerde bir den fazla partitiona bölünüp farklı brokerlara dağıtılır. 
Kafka da Group mantığı vardır. Bir grup altında oluşturulan consumerlar aynı partitionı dinleyemez. Her partition sadece bir consumer tarafından dinlenebilir. Fakat diyelimki 2 adet partition var ve tek bir consumer var. Bu tek consumer bu iki partition altındaki mesajları tüketebilir. 

örneğin 3 adet consumer var 3 adette partion varsa her bir partition sadece bir consumer tarafından dinlenir.

örneğin 4 adet consumer var 3 adette parttion varsa 3 tane consumer kendilerine bir tane partitionı alır ve onu dinler. 4. kalan consumer ise boşta bekler. Diğer partitionlardan okuma yapamaz

Diyelimkli 2 farklı group oluşturduk. Bu iki grupta bir birinden bağımsız olarak aynı partitionları dinleyebilir. Yani broadcast mantığı devreye girer.


Hiç yorum yok:

Yorum Gönder