KAFKA ve KRaft
Tags: kafka, zookeeper, kraft
Published: 2023-10-03 11:17:42

Linkedin tarafında geliştirilmiştir. Dağıtık bir veri akış platformudur. Asenkron olarak çalışır. Kafkaya girilen mesajlar hangi formatta olursa olsun byte array halinde taşınır.


# Temel Kavramlar #

**Topic** : Gelen mesajları kategorize etmeyi sağlar. Kategorize ettiği her yapıyada partition denir.


**Partition** : Topic partiton'lardan oluşur. Mesajlarımız partitonlara immutable ve sıralı olarak eklenir.
 

**Offset** : Partition'lara mesajlar eklenirken artan bir id değeri ile eklenirler bu da offset denir ve partitionun kendi içinde sıralı şekilde yazılır.


**Producer** : Topiclere veri gönderirler. Kafka içinde hayali bir kavramdır.

**Producer Acknowledgement**
Mesaj teslimi üzerinde değişen düzeylerde güvenilirlik ve kontrol sağlar.

- ***Ack 0*** : Kafka brokers'a ulaşması yeter. Bu mod, en yüksek verimi ve en düşük gecikmeyi sunar, ancak mesajın Kafka'ya başarılı bir şekilde teslim edildiğini veya diğer aracılara kopyalandığını garanti etmez.
- ***Ack 1*** : Target partition'a ulaşır ve okuması beklenir. Kopyalanmayı garanti etmez.
- ***Ack=all*** veya ***Ack=-1*** : Ack 1 olacak ve replicası oluşturulacak

**Consumer** : Bir veya birden fazla topicten veri okur. Mesajları idlerine göre okur yani bir veri sadece bir kere okunur.

**Consumer Veri Okuma Seçenekleri**
***At Most Once*** : En fazla 1 kere oku. Consumer tarafında verinin en fazla bir kez işlenmesini garanti etmez. Tüketici mesajı aldığında hemen offset'i kaydeder, bu nedenle bir hata olursa mesajı kaybetme riski vardır. Bu mod, daha hızlı işleme ve düşük maliyet sağlar, ancak veri kaybı olabilir.
***At Least Once*** : En fazla 1 kere oku. Consumer mesajı işledikten sonra offseti kaydeder. Bazı restart durumlarında duplikasyona sebep olabilir. 
***Exactly Once*** : Tam bir kere okumadır. her mesajın en az 1 kere aktarılmasını garantiler. Transactional producer consumer kullanılır. Transactional oluğu için oldukça maliyetlidir.


**Brokers** : Bir cluster içinde bir veya daha fazla broker olabilir. Producerdan gelen mesajları alır, saklar ve sunmakla sorumludur.


**Zookeeper** 
 Dağıtık sistemlerin koordinasyonunu ve yönetimini sağlamak için kullanılan açık kaynaklı bir yazılım projesidir. Verilerin tutulduğu yerdir.



**Zookeeper Kullanılırken Çekilen Sıkıntılar**
- Ölçeklendirme yaparken bottleneck olurdu.
- Sınırlı sayıda partition oluşturulmasına izin verilirdi.
- Kafka brokerları bir Kafka clustera katıldığında veya ayrıldığında lider seçimi süreçleri gerçekleştirilir, ve bu durum zaman zaman ZooKeeper'a ek yük getirebilir. 
- Kafka clusterlarının kurulması zordur ve başka componentlere bağlıdır.
- Kafka cluster metadata ZooKeeper ile senkronize olabilir, ancak bazen bu senkronizasyon arızalanabilir veya out-of-sync hale gelebilir. 
- ZooKeeper'ın güvenlik özellikleri ve mekanizmaları, Kafka'nın güvenlik özellikleri ve gereksinimleriyle karşılaştırıldığında genellikle geride kalır.



## KRaft ##
Kafka, Kafka 4.0 ile Zookeeper yerine KRaft'ı tamamen desteklemeye başlayacak. Quorum denetleyicileri, metadata'nın doğru bir şekilde çoğaltılmasını sağlamak için yeni KRaft protokolünü kullanır. Quorum denetleyici, iç durum makinelerinin her zaman doğru bir şekilde yeniden oluşturulabilmesini garanti eden olay kaynaklı bir depolama modeli kullanır. Bu durumu saklamak için kullanılan olay günlüğü (metadata konusu olarak da bilinir), günlüğün sonsuza kadar büyümesini engellemek için periyodik olarak kesitlerle kısaltılır. Quorum içindeki diğer denetleyiciler, aktif denetleyiciyi takip ederek, bu denetleyicinin oluşturduğu ve günlüğünde sakladığı olaylara yanıt verirler. Bu nedenle, bir düğümün, örneğin bir bölme olayı nedeniyle duraklaması durumunda, katıldığında kaçırdığı olaylara hızlı bir şekilde yetişebilmesi için günlüğe erişebilir. Bu, sisteminki kötü durum kurtarma süresini iyileştirerek önemli ölçüde azaltır.



###KRaft'ın Faydaları###
- Kafka'nın KRaft adını alan yeni Metadata Quorum modu, ZooKeeper'ı kaldırarak Kafka'nın kendi içinde bir tür seçim (quorum) yapma yeteneği kazanmasını temsil eder. Bu mod, Kafka'nın kendi içerisinde bir seçim (quorum) mekanizması olan Raft protokolünü kullanır.
- Kararlılığı artırır, yazılımı basitleştirir ve Kafka'nın izlenmesini, yönetilmesini ve desteklenmesini kolaylaştırır
- Kafka'nın tüm sistem için tek bir güvenlik modeline sahip olmasını sağlar	
- Daha hızlı denetleyici kapatma ve kurtarma süresi
- kafka single-process şekilde çalışmaya başlar.


##Kafkanın Kullanım Yerleri?##
- Web sayfası etkinlikleri izleme
- İzleme sistemlerindeki metriklerde
- Log toplama sistemlerinde
- Stream Proccessing işlemlerinde

##References##

- [https://www.conduktor.io/kafka/how-to-install-apache-kafka-on-linux-without-zookeeper-kraft-mode/](https://www.conduktor.io/kafka/how-to-install-apache-kafka-on-linux-without-zookeeper-kraft-mode/)
- [https://www.conduktor.io/kafka/kafka-kraft-mode/](https://www.conduktor.io/kafka/kafka-kraft-mode/)
- [https://developer.confluent.io/learn/kraft/?](https://developer.confluent.io/learn/kraft/?source=post_page-----615b9582c270--------------------------------)