Kafka neden hızlıdır?



Sıralı G/Ç ve sıfır kopya ilkesine odaklanarak Kafka'nın etkileyici performansına yol açan tasarım tercihlerini ayrıntılı olarak inceleyelim.


1. Sıralı G/Ç


Disk Dostu: Kafka öncelikle sıralı disk G/Ç'yi kullanır. Sabit diskin okuma/yazma kafalarının atlamasına neden olan rastgele okuma/yazmaların aksine sıralı G/Ç, verileri sürekli bir şekilde yazar. Bu, geleneksel dönen sabit disk sürücülerinde (HDD'ler) önemli ölçüde daha hızlıdır. Modern SSD'lerde bile sıralı modellerin performans avantajı hâlâ mevcuttur.

İşletim Sistemi Verimliliği: İşletim sistemi sıralı G/Ç işlemlerini büyük ölçüde optimize edebilir. Ön getirme ve ileri okuma önbelleğe alma gibi özellikler devreye girerek performansı daha da artırır.

Basitleştirilmiş Tasarım: Günlük dosyalarına sıralı eklemelere odaklanıldığında Kafka'nın iç yapısı ve indeksleme mekanizmaları daha az karmaşık hale gelir ve ek yük azalır.

2. Sıfır Kopya


CPU Yükünün Azaltılması: Geleneksel veri aktarımında veriler, bellek arabellekleri arasında birden çok kez kopyalanır:


Diskten çekirdek (işletim sistemi) arabelleğine.

Çekirdek arabelleğinden uygulamanın kullanıcı alanı arabelleğine.

Kullanıcı alanı arabelleğinden ağ soketi arabelleğine.

Sıfır Kopya Optimizasyonu: Kafka bu kopyaları en aza indirmeyi amaçlamaktadır. Dosya verilerini tutan çekirdek arabelleği ile ağ arabelleği arasında doğrudan aktarıma izin verir. Bu, aksi halde gereksiz kopyalamaya harcanacak olan CPU döngülerinden ve bellek bant genişliğinden tasarruf sağlar.


Sıfır Kopyayı Gösterme


Diyagramınız muhtemelen aşağıdakileri tasvir edecektir:


Yapımcı: Verileri diskteki bir dosyaya yazar.

İşletim Sistemi Çekirdek Alanı: Veriler, çekirdek tarafından yönetilen bir arabellekte kalır.

Ağ Arayüzü Denetleyicisi (NIC): NIC, ağ üzerinden veri göndermek için doğrudan çekirdek arabelleğine (DMA - Doğrudan Bellek Erişimi kullanarak) erişir.

Tüketici: Tüketicinin NIC'si verileri alır ve onu bir işletim sistemi çekirdek arabelleğine yerleştirir.

Diyagramdaki Önemli Noktalar


Veriler, üretici veya tüketici uygulamasının bellek alanından hiçbir şekilde aktarılmaz.

Verilerin kopyalanma sayısı büyük ölçüde azalır.

Açıklamayı Geliştirelim


Bunu daha da kapsamlı hale getirmek için şunları eklemeyi düşünün:


Rolü FileChannel.transferTo(): Java'da Kafka muhtemelen FileChannel.transferTo()sıfır kopyayı kolaylaştırmak için bu yöntemi kullanıyor. Bu yöntem doğrudan işletim sistemine aktarımı gerçekleştirmesi talimatını verir.

Sayfa Önbelleği: Sık kullanılan disk verilerini bellekte tutarak işletim sistemi sayfa önbelleğinin hem sıralı G/Ç'yi hem de sıfır kopyayı doğal olarak nasıl tamamladığını vurgulayın.

Please Select Embedded Mode To Show The Comment System.*

Daha yeni Daha eski

نموذج الاتصال