Sobes.tech
Middle

Prečo má Apache Kafka vysoký výkon?

sobes.tech AI

Odpoveď od AI

Kafka dosahuje vysoký výkon vďaka niekoľkým kľúčovým mechanizmom:

  1. Sekvenciálne zapisovanie na disk: Kafka brokeri zapisujú dáta do logov (segmentových súborov) sekvenciuálne. Sekvenciálny zápis je oveľa rýchlejší ako náhodný, najmä na tradičných diskoch (HDD).

  2. Žiadne medzikusové vyrovnávanie: Kafka nevyrovnáva správy v pamäti pred zápisom na disk. Správy sa zapisujú ihneď po prijatí, čo znižuje oneskorenie a spotrebu pamäti.

  3. Využitie Page Cache OS: Brokeri aktívne využívajú cache stránok operačného systému (Page Cache) na čítanie dát. To umožňuje vyhnúť sa opakovanému čítaniu z disku a výrazne zrýchľuje doručenie správ odberateľom. Dáta zapísané na disk brokerom sa automaticky umiestňujú do Page Cache.

  4. Zero-copy (Nulové kopírovanie): Pri odosielaní dát odberateľom Kafka využíva techniku "nulového kopírovania" (realizuje sa cez sendfile v Linuxe). To umožňuje vyhnúť sa medziúrovňovému kopírovaniu dát medzi jadrovými a používateľskými buffermi, priamo prenášajúc dáta z Page Cache brokera do sieťového soketu odberateľa.

    // Príklad pseudokódu ilustrujúci koncept sendfile
    // (Nie je to skutočný kód Kafka, len demonštrácia nápadu)
    FileChannel fileChannel = ...; // Kanál na čítanie zo súboru (Kafka log)
    SocketChannel socketChannel = ...; // Kanál na odosielanie dát cez sieť
    
    fileChannel.transferTo(0, fileChannel.size(), socketChannel); // Zero-copy operácia
    
  5. Paketová spracovanie (Batching): Kafka umožňuje odosielať a prijímať správy v balíkoch. To znižuje náklady na sieťové požiadavky a operácie na disku. Producenti môžu skupinovať viac správ pred odoslaním, a odberatelia môžu čítať viac správ naraz.

  6. Particionovanie: Témy sa delia na partície. Každá partícia sa spracováva nezávisle, čo umožňuje rozloženie záťaže medzi viacerými brokermi a paralelné čítanie/zapisovanie dát. To zabezpečuje horizontálne škálovanie.

  7. Jednoduchý formát správ: Správy majú relatívne jednoduchú štruktúru, čo minimalizuje náklady na serializáciu a deserializáciu.

Tieto mechanizmy spoločne umožňujú Kafka spracovávať veľmi veľké objemy správ s nízkym oneskorením.