# *Kafka Neden Performanslı* ### **1. Disk Üzerinde Sekansiyel Yazım** ### **Kafka’da Sekansiyel Yazma Nedir?** - Kafka, mesajları disk üzerine **sıralı (sekansiyel)** olarak yazar. Bu, mesajların rastgele pozisyonlara yazılmasından çok daha hızlıdır. - Gelen tüm mesajlar, bir **partition log dosyasının sonuna eklenir**. Yeni bir mesaj geldiğinde Kafka, diskteki mevcut dosyanın sonuna yazar. ### **Neden Sekansiyel Yazma Hızlıdır?** - **Disklerin Yapısı:** - Geleneksel disklerde (HDD) kafa, rastgele yazma işlemi için sürekli hareket ederken, sekansiyel yazma sırasında bu hareket minimumdur. - SSD’lerde bile rastgele yazma daha maliyetlidir; sekansiyel yazma ise sürekli olarak yüksek performans sağlar. - **OS Disk Ön Belleği (Page Cache):** - Kafka, işletim sisteminin disk ön belleğini (page cache) kullanır. Bu, fiziksel diske yazmadan önce mesajları RAM üzerinden tamponlayarak daha hızlı bir işlem sağlar. ### **Kafka’da Uygulama:** - Her partition bir **log dosyası** ile temsil edilir ve mesajlar sadece log dosyasının sonuna eklenir. - Rastgele erişim ya da mesaj güncelleme işlemleri yapılmaz; bu nedenle işlem minimum ek yükle gerçekleştirilir. --- ### **3. Sıfır Kopya (Zero Copy) Mekanizması** ### **Zero Copy Nedir?** - Geleneksel veri aktarımında, veriler diskten belleğe alınır, uygulama katmanına taşınır ve ardından ağa gönderilir. Bu süreçte: - Veri birkaç kez kopyalanır. - Fazladan CPU ve bellek kullanımı oluşur. - Kafka, **zero-copy** mekanizması ile bu kopyalama işlemlerini atlar: - Mesajlar doğrudan diskteki log dosyasından işletim sistemi tarafından **ağ üzerinden tüketicilere** aktarılır. - Kafka'nın uygulama katmanı bu veriyi işlemeye dahil olmaz. ### **Nasıl Çalışır?** 1. **Mesajlar Diske Yazılır:** - Producer tarafından gönderilen mesajlar disk üzerinde log dosyalarına eklenir (sekansiyel olarak). 2. **Consumer Mesaj İster:** - Consumer, belirli bir partition ve offset’ten mesajları okuma isteği gönderir. 3. **Zero-Copy Transfer:** - Kafka, işletim sistemine “bu dosyadaki şu veri aralığını şu sokete aktar” komutunu verir. - İşletim sistemi, veriyi bellekte kopyalamadan doğrudan diskten ağ soketine gönderir. --- ### **5. Bellek Kullanımı ve İşletim Sistemi Entegrasyonu** ### **Kafka’nın Bellek Yönetimi:** - Kafka, mesajları bellekte tutmak yerine disk üzerine yazar. Ancak bu, performans sorununa neden olmaz çünkü: - Kafka, işletim sisteminin **page cache** (disk önbelleği) özelliğini kullanır. - Bu özellik sayesinde Kafka, verileri fiziksel diske yazmak yerine önce bellekte saklar ve diske senkronizasyonu işletim sistemi üzerinden yönetir. ### **Page Cache Kullanımı:** - Gelen mesajlar diske yazılmadan önce işletim sistemi tarafından RAM’de önbelleğe alınır. - Tüketici, mesajı okumak istediğinde: - Veri hâlâ page cache’dedir → Doğrudan bellekten okunur. - Veri page cache’den düşmüşse → Diskten okunur. ### **Neden Bellek Tüketimi Azdır?** - Kafka, mesajları uygulama belleğinde tutmaz. - İşletim sistemi, belleği kendi önceliklerine göre yönetir ve Kafka’dan bağımsız olarak belleği verimli bir şekilde kullanır. ### **Sonuç:** - Kafka, kendi belleğini yoğun şekilde kullanmadan işletim sisteminin özelliklerinden faydalanır. Bu sayede, büyük miktarda veri işlemesine rağmen düşük bellek tüketimi sağlar.