Apache Kafka’ya Veri Yazma ve Okuma

SezerKahraman
4 min readMar 23, 2021

--

Bu yazımda sizlere Kafka’da verileri yazma ve okumada kullandığımız yapıları stratejileri ve methodları anlatacağım.

Apache Kafka Verileri Nasıl Saklar:

Kafka bunları Topicleri kullanarak yapıyor her Topicin kendine ait ismi vardır bu Topicler Brokerlarda saklanır.Kafkaya veri yazmak veya okumak için Topicler kullanılır.

Peki Kafka Verileri Ne Kadar Saklar:

Bunun için 2 yöntem kullanılır.

1-Zaman Bazlı (Örnek:7 gün ve üstündeki verileri sil)

2-Veri Boyutu Büyüklüğü (Örnek:100Gb üstündeki verileri sil)

Daha önce söylediğim gibi veriler topiclerin içerisindeki Partitionlara yazılır.Şimdi Partition kavramını biraz daha ayrıntılı ele alalım.

Neden Partition Oluştururuz?

-Producer’ların verilerinin belirlenen özelliklere göre toplanması (Aggregation)

-Verilerin sıralı bir şekilde toplanması (Sorting-Event Sourcing)

-Daha hızlı okumak (Parallelism)

-Verileri daha verimli saklamak (Efficiency)

Şimdi Partitionlara Veri Nasıl Yazılır? Bunu inceleyelim:

Yukarıda gördüğümüz görselde 3 Partition var ve bir veri göndermek istiyoruz Peki Hangisine Yazacağımızı Nasıl Belirleyeceğiz?

Gönderdiğimiz mesajları bir key(Anahtar Değeri) değeri verebiliriz Kafka bu key değerini kullanarak aynı olan key değerini aynı Partitionlara yazıyor.

Bu 3 Json mesajını gönderirken hiçbir şey belirtmessek Kafka “Round-Robin” yöntemi uygular bunun anlamıda gelen mesajları sırasıyla tüm Partitionlara bölüştürmektir.Yani ilk mesaj Partition 0,ikinci mesaj Partition 1,üçüncü mesaj Partition 3'e gider

Şimdi ise farklı 3 mesaj göndereceğiz key olarak category değeri vereceğiz (record.key=“category”) bu sayede aynı kategori değerine sahip mesajlar aynı Partitionlara yazılır.İşte bu sayede “Aggregation” yapmış oluyoruz.

Sorting-Event Sourcing:Bu yöntemde ise key olarak customer-id kullanılır (record.key=“customer_id”) yani bir kullanıcının yaptığı işlemler aynı Partitiona sırayla yazılmış olur gerçeği çıkıyor.

Kafkaya veri yazılımı 3 aşamadan oluşmaktadır.

1-)Kafkaya veri göndermek

2-)Verinin Leader partitiona ulaşıp saklanması

3-)Leader partitionun kopya partitionlara aktarması ve böylelikle tam senkronlama durumunun gerçekleşmesi

Siz Kafkaya veri gönderdiğinizde yukardaki 3 aşamadan hangilerinin bitmesi gerektiğini Kafkaya gönderiyoruz buna “Acknowledgment” deniyor.3 farklı seçenek var.

acks=0(En hızlı ve en riskli olan,mesaj kaybolma şansı yüksek):Kafkaya veriyi gönder ve cevaba bak sonra devam et.

acks=1(Orta derece hızlı ve güvenli,mesaj kaybolma şansı çok az):Kafkaya veriyi gönder ve sadece Leader yazana kadar bekler.

acks=all,-1(En yavaş ve en güvenlisi,mesaj kaybolma riski yok):Kafkaya veriyi gönder,Leader yazmasını ve Leader diğer partitionlara yazmasını bekler

Apache Kafka’da Veri Nasıl Okunur?

  • Yukarıda bir okuyucumuz var ve Partitionları okumaya başlıyoruz.
  • Kafka’nın ilk belirlediği şey hangi pozisyondan (offset) okumaya başlanacağıdır.

1-)Event oku (offset 0)

2-)İşlemini yap

3-)Diğer mesajı okuyabilmek için mesaj ile işimizin bittiğini belirtmemiz gerekiyor yani “commit” ediyoruz.Böylelikle Kafka offset pozisyonu bir sonraki mesaja getiriyor.

4-)Bir sonraki okunacak offset 1 oluyor.

Kafka’dan Veri Okuma Stratejileri:

  • At Most Once:

Mesajı okuduk hemen okur okumaz commit ettik işlemi sonra bu mesajı process işlemine gönderdik ama process işlemi yaparken burada sorun oluştu ve okuyucumuz çöktü okuyucumuzu tekrar çalıştırdığımızda bir sonraki mesaj ile devam ederiz bir önceki mesaj gitmiştir çünkü okuyup okumaz “commit” ettik.

  • At Least Once(En Az Bir Kere):Burada mesajı okuyoruz ve hemen “commit” etmiyoruz processi çağırıp işlem tamamlandıktan sonra commit ediyoruz
  • Exactly Once(Tam Bir Kere):Mesajı okuyoruz sonra hemen Transactional çağırıyoruz bunun içinde yapılan işlemler sadece bir kere yapılıyorBu durumun Performansa büyük etkisi olur.

Consumer Groups:

  • Consumerlar yani okuyucular bir Consumer Grubuna bağlıdır.Her zaman bir isim verirler kendilerine böylelikle Kafka hangi okuyucu olduğunu bilir ona göre offset pozisyonu belirler.

Sizce bir okuyucu aynı anda kaç Partitiondan okuma yapabilir?

  • Hepsinden aynı anda okuma yapabilir ama performanslı olmaz.

Eğer okuyucu eklersek Kafka hepsine eşit şekilde bölüştürür.

Bu yazımda sizlere Kafka’daki verilerin nasıl yazılıp okunacağını anlatmaya çalıştım başka bir yazımda görüşmek dileğiyle.

--

--