Apache Kafka je open-sourcová softwarová platforma pro zpracování streamování, kterou vyvinula Apache Software Foundation. Je napsaná ve Scale a Javě. Projekt se snaží o vytvoření sjednocené platformy s vysokou průchodností a nízkou latencí pro zpracování datových toků v reálném čase.

Jeho úložná vrstvá je v podstatě masivně škálovatelná fronta zpráv, která je navržena jako rozložený log transakcí. Tím je tato platforma velmi užitečná pro podnikovou infrastrukturu, která zpracovává streamování dat. Navíc se Kafka připojuje k externím systémům pro import a export dat skrze Kafka Cnnect a nabízí Kafka Streams, což je knihovna v Javě pro zpracování streamování.

Použití

Apache Kafka je platforma založená na logování commitů a umožňuje uživatelům se k ní přihlásit a publikovat data libovolnému počtu systémů nebo aplikací v reálném čase. Může se jednat o aplikace typu správy párování pasažérů a řidičů na Uberu, analytiky v reálném čase a předvídající údržby jako u British Gas a jejich chytrých domácností nebo jako služby v reálném čase na LinkedInu.

Architektura

Kafka ukládá zprávy, které přicházejí z procesů, které se nazývají producers. Data mohou být rozdělena do různých partition s různými topic. V rámci partition, zprávy jsou seřazeny podle svojí pozice v rámci partition, indexovány a ukládány společně pod časovým štítkem. Ostatní procesy, které se nazývají consumer, mohou zprávy z partition číst. Pro zpracování streamování nabízí Kafka Streams API, které umožňuje psát aplikace v Javě, které konzumují data z Kafky a píší výsledky zpět. Apache Kafka rovněž funguje s externími systémy na zpracování streamování jako je Apache Apex, Apache Flink, Apache Spark nebo Apache Storm.

Kafka běží na klusteru jednoho nebo více serverů, které se nazývají brokers a partitiony všech topic jsou rozloženy mezi uzly klusterů. Partitiony mohou být replikované. Architektura umožňuje, aby Kafka dodávala masivní stream zpráv. Proto nahradila některé konvenční systémy na posílání zpráv jako je JMS, AMQP nebo další.

Kafka podporuje dva typy topiců: běžné a kompaktní. Běžné mohou být nakonfigurovány tak, aby měly nastavený retenční čas nebo prostorové omezení. Pokud jsou záznamy starší nežli daný retenční čas nebo prostor, který zabírají, přesahuje prostor daný pro partition, Kafka má právo starší data smazat pro uvolnění místa.

Defaultně jsou témata konfigurována s retenčním časem 7 dní, ale je možné je ukládat i nekonečně dlouho. Kompaktní témata nejsou nastavena na retenční čas ani časové omezení. Místo toho jsou pozdější zprávy považovány za aktualizace starších zpráv se stejným klíčem a garantuje, že nikdy nesmaže nejnovější zprávu s daným klíčem. Uživatelé mohou zprávy smazat úplně tím, že všechny zprávy nahradí hromadně null hodnotou.

Výhody použití Apache Kafka

  • Vysoká propustnost. Kafka umožňuje zpracování velkého objemu dat s velkou rychlostí při použití nepříliš rozsáhlého hardware. Může podporovat propustnost zpráv v řádu tisíců zpráv za vteřinu.
  • Nízká latence. Kafka dokáže zprávy zpracovat s velmi nízkou latencí v rozsahu milisekund, což vystačí na většinu aplikací.
  • Tolerance chyb. Vestavěná schopnost vyrovnat se s chybou uzlu nebo stroje v rámci klusteru.
  • Trvanlivost. Data nebo zprávy jsou ukládána na disku. Zároveň je možné zprávy replikovat a díky tomu nedochází k jejich ztrátě.
  • Škálovatelnost. Je možné Kafku škálovat bez odstávky při přidání uzlů.

Nevýhody použití Apache Kafka

  • Prostor na ukládání zpráv. Data jsou často ukládána duplikovaně, proto je jejich uložení relativně drahé.
  • Přidání konzumentů může vést ke zpomalení.