Apache Kafka Nedir? Yapısı Ve Kavramları Nelerdir?

SezerKahraman
5 min readMar 19, 2021

--

Bu yazıda dağıtık bir veri akış platformu olan Apache Kafka’nın yapısını ve kavramlarını anlatmaya çalışacağım.

Apache Kafka Nedir?

Apache Yazılım Vakfı tarafından geliştirilen Scala ve Java ile yazılmış açık kaynaklı bir akış işleme yazılım platformu. Proje, gerçek zamanlı veri akışlarının işlenmesi için birleşik, yüksek verimli, düşük gecikme süreli bir platform sağlamayı amaçlamaktadır. Kafka, Kafka Connect aracılığıyla harici sistemlere bağlanabilir ve Java akış işleme kitaplığı olan Kafka Streams’i sağlar. Kafka, verimlilik için optimize edilmiş ikili TCP tabanlı bir protokol kullanır ve ağ gidiş dönüşünün ek yükünü azaltmak için mesajları doğal olarak bir araya getiren bir “mesaj kümesi” soyutlamasına dayanır. Sadece bir kaynak sisteminiz ve bir hedef sisteminiz olduğunda, bu sistemler arası veri transferi yapmanız gerektiğinde çözüm basittir. Ancak birçok kaynak, birçok hedef sisteminiz olduğunda ve hepsinin birbirleriyle veri transferi yapması gerektiğinde işler gerçekten karmaşık hale gelecek ve her bir sistemin birbiri ile entegrasyonu gerekecektir. Bu entegrasyonlar . protokol seçimi, verilerin nasıl aktarılacağı (TCP, HTTP, FTP, JDBC, REST, SOAP vb), veri formatı, verilerin nasıl parse edileceği (JSON, CSV, XML, Avro, Thrift vb) gibi birçok zorluğu beraberinde getirir. Bunlara ek olarak bir kaynak sisteme yapılan her entegrasyon o sistem üzerinde ek yük yaratacaktır. Apache Kafka bu sorunları aşmak için doğru çözüm olacaktır. Sistemlerin birbirlerine bağımlıklıklarını ortadan kaldırarak, üzerlerindeki yüklerini de düşürür. Apache Kafka, LinkedIn tarafından geliştirilmiş, şu an Apache yönetiminde açık kaynak olarak çoğunlukla Confluent şirketi tarafından bakımı ve geliştirimi yapılan bir projedir. Dağıtık (distrubuted) bir veri akış (streaming) platformudur.

Apache Kafka ile İlgili Temel Kavramlar

Topic:Topicler kullanıcı tarafından isimlendirilebilen verilerin(mesajların) depolandığı alandır.Topicler Partitionlardan oluşur bu kavramı ilerde inceleyeceğiz.

Producer:Topiclere mesaj gönderebilen Apache Kafka’nın Publish-Subscribe yapısına baktığımızda Publisher konumundadır.Topicler içerisine veri yani mesaj gönderebilirler ve aynı anda birden fazla konuya bağlı olabilirler.

Consumer:Consumerlar ise Producerlar tarafından Topiclere gönderilen mesajları tüketen SUBSCRİBER’lardır.Bir konuya(topic) birden fazla producer mesaj gönderebilir ve yine bir konuya birden fazla Consumer dahil olabilir Topic içerisine gönderilen verileri okuyabilir.Producerların gönderdiği bu mesajları bir Consumer okuduktan sonra bu veriler Topic içerisinden silinmez.

Kafka Yapısı
Kafka Yapısı

Partition:Topicler partitionlardan oluşur ve Topic içerisindeki veriler bu Partitionlarda sıralı ve değiştirilemez olarak eklenirler.Artan şekilde bir offset değeri alırlar.Topic’in depolanacağı bu Partition sayısı kullanıcı tarafından belirlenir.

Brokers:Brokerlar,Topic ve Partitionları tutan sunuculardır.Brokerlar, Topiclerin depolandığı Partitionları içerir ve eğer aynı sayıda Broker ve Partition varsa her Broker bünyesinde bir Partition bulundurur.Partition sayısı Broker sayısını geçtiğinde ise bu sayı eşit olarak Brokerlar arasında dağıtılır.Bir Kafka Broker grubuna ise Kafka Cluster denir.Her broker içerisinde bir Lider seçelir diğer Partitionlarda Fallower olarak adlandırılır ve içerisinde verilerin kopyasını tutar.Herhangi bir sorun durumunda fallowerların kendisini lider olarak atama yeteneği vardır ve bu sayede veri akışı kesintisiz olarak devam eder.

Zookeeper:Apachi lisanslı açık kaynak kodlu bir yazılımdır.Kafka bunu tüm brokerları yönetmesi için kullanır.

Şimdi ise sizlere Broker ve Replikasyon(Çoğaltma) mantığından bahsetmek istiyorum.

Replication:3

Yukarıda gördüğünüz gibi 5 tane Brokerdan oluşan bir Kafka Clusterımız var.

Replication:Bir verinin istenilen sayı kadar çoğaltılmasına denir.

Biz şimdi yukarıdaki Örnekte’de görüldüğü gibi Replikasyon Faktörü=3 kullanacağız. Şimdi bir veri geliyor ve Kafka bunu 3 kere Replikasyon yapıyor (yani çoğaltıyor) 3 ayrı Brokera bu veri yazılıyor ardından bir başka veri geliyor bu veri de 3 ayrı Brokera yazılıyor. Şimdiye kadar her şey sorunsuz çalışıyor ve her veri 3 kere Replikasyon işlemine uğruyor.Şimdi bir anda Broker 5 çöküyor bu durumda Replikasyon=3 olduğu için Kafka hemen Broker 5'de saklanan her veriyi belirliyor ve başka Brokerlara replikasyon yapıyor.

Replication:3

Şuan tekrardan her şey normale döndü şimdi ise bir anda Broker 2 çöküyor ve Kafka aynı işleri tekrarlayıp Broker 2'nin içindeki verileri diğer Brokerlara dağıtıyor.

Replication:3

Verilerimiz hala diğer Brokerların içinde sorunsuz bir şekilde tutuluyor PEKALA ŞİMDİ Broker 3 ÇÖKERSE SİZCE NE OLUR?

Çalışmakta olan Server(Broker)sayısı 2 kaldığından,Replikasyon sayısı ise 3 olduğundan bunu yerine getiremez ve hata verir. Bu durumda şunu söyleyebiliriz ki;

Broker Sayısı ≥ Replication Factor

Split Brain(Bölünmüş Beyin):

2 Brokerdan oluşan bir Clusterımız var ve Replikasyon sayımız =1 bir nedenden dolayı arada ki bağlantıda sorun çıkıyor o ana kadar senkronize işlemi gerçekleşiyor sonra birden arada ki bağlantı kopuyor ve her Broker diğer Broker’ın devre dışı kaldığını düşünerek işlemlerini yapmaya devam ediyor (mesela yeni veri replike ediyor).Veriler yazılıyor fakat birbirleriyle bağlantı halinde olmadıkları için senkronize işlemi gerçekleşmiyor.Belli bir süre sonra bağlantı tekrar sağlanıyor ve Brokerlar tekrardan senkronize oluyor fakat bir sorun var. Hangisini temel olarak almak lazım? Hangisi doğru? İşte burada SPLİT BRAİN(Bölünmüş Beyin) ortaya çıkıyor.Split Brain bu sorunu Quorum Sayısı ile çözüyor peki bu Quorum Sayısı Nedir?

Quorum Sayısı:Bir futbol maçı hayal edin takımlar 11'er kişilik bir ekiple sahaya çıkıyor takımların birisinde 5 oyuncunun hakem tarafından atıldığını düşünelim fakat futbolda bir kural var takımların en az 7 kişi olarak sahada bulunması gerekiyor aksi taktirde 7 kişinin altında kalan takım veya 7 kişinin altında sahaya çıkmaya çalışan takım müsabakadan men ediliyor yani kilit sayı burada 7.İşte bir futbol maçında ki Quorum Sayısı=7 olmalıdır ki müsabaka devam etsin.İşte dağıtık sistemlerdeki Quorum mantığıda aynen böyledir.Düşünün 5 Brokerdan oluşan bir sistem var burada diyelim ki Quorom Sayısı=2 bu demek oluyor ki belli zamanda aktif halde olan 2 Broker olursa bu sistem devam ediyor anlamındadır.

En Optimum Quorum Sayısını biz nasıl belirleriz?

İşte bunun için hazır bir formül var.

(N/2)+1 Buradaki N:Server yani Broker Sayısı

Servers:3,Quorum=2 , 1 çöken Server tolere edilebilir.

Bu yazımda sizlere Apache Kafka ile ilgili temelde bilmeniz gereken yapıları ve methodları anlatmaya çalıştım.Diğer yazımda Apache Kafka’ya veri nasıl yazılır veri yazarken hangi yöntemleri kullanırız,dosya nasıl okunur dosya okurken nelere dikkat etmeliyiz bunlardan bahsedeceğim.

--

--