Miért magas a Apache Kafka teljesítménye?
sobes.tech MI
Válasz az MI-től
A Kafka több kulcsfontosságú mechanizmus révén éri el a magas teljesítményt:
-
Szekvenciális írás a lemezen: A Kafka brokerek adataikat sorban írják a naplókba (szegmensfájlokba). A szekvenciális írás sokkal gyorsabb, mint a véletlenszerű, különösen hagyományos merevlemezeken (HDD).
-
Köztes pufferelés hiánya: A Kafka nem buffer-eli az üzeneteket a memóriában, mielőtt írná őket a lemezre. Az üzenetek azonnal íródnak a fogadásuk után, csökkentve a késleltetést és a memóriahasználatot.
-
Az operációs rendszer Page Cache használata: A brokerek aktívan használják az operációs rendszer Page Cache-ét az adatok olvasására. Ez elkerüli az ismételt lemezolvasásokat, és jelentősen gyorsítja az üzenetek kézbesítését a feliratkozóknak. A broker által a lemezre írt adatok automatikusan bekerülnek a Page Cache-be.
-
Zero-copy: Az adatok felhasználókhoz való küldésekor a Kafka a "zero-copy" technikát alkalmazza (Linuxon
sendfilesegítségével). Ez elkerüli az adatok közbenső másolását a kernel puffer és a felhasználói tér között, és közvetlenül a broker Page Cache-éből továbbítja az adatokat a fogyasztó hálózati socketjéhez.// Példa pseudokód, ami illusztrálja a sendfile koncepciót // (Nem valódi Kafka kód, csak az ötlet bemutatása) FileChannel fileChannel = ...; // Kafka logfájl olvasó csatorna SocketChannel socketChannel = ...; // Csatorna az adatok hálózaton való küldéséhez fileChannel.transferTo(0, fileChannel.size(), socketChannel); // Zero-copy művelet -
Csoportos feldolgozás (Batching): A Kafka lehetővé teszi üzenetek csomagokban történő küldését és fogadását. Ez csökkenti a hálózati kérések és a lemezműveletek költségeit. A producerek több üzenetet csoportosíthatnak küldés előtt, a fogyasztók pedig több üzenetet olvashatnak egy kérésben.
-
Particionálás: A témák (topics) részekre vannak osztva. Minden partíció függetlenül dolgozik, lehetővé téve a terhelés elosztását több broker között, és a párhuzamos olvasás/írás végrehajtását. Ez horizontális skálázhatóságot biztosít.
-
Egyszerű üzenetformátum: Az üzenetek viszonylag egyszerű szerkezetűek, minimalizálva a serializációs és deserializációs költségeket.
Ezek a mechanizmusok összességében lehetővé teszik, hogy Kafka nagyon nagy mennyiségű üzenetet kezeljen alacsony késleltetéssel.