Programování

Apache Kafka vs. Apache Pulsar: Jak si vybrat

V dnešní době jsou masivně škálovatelné pub / sub zprávy prakticky synonymem pro Apache Kafka. Apache Kafka je i nadále skálopevnou, open-source volbou typu go-to pro distribuované streamovací aplikace, ať už přidáváte něco jako Apache Storm nebo Apache Spark ke zpracování nebo pomocí zpracovatelských nástrojů poskytovaných samotným Apache Kafka. Ale Kafka není jediná hra ve městě.

Apache Pulsar, vyvinutý společností Yahoo a nyní projektem Apache Software Foundation, jde o korunu zpráv, kterou Apache Kafka nosí po mnoho let. Apache Pulsar nabízí v mnoha situacích potenciál rychlejší propustnosti a nižší latence než Apache Kafka spolu s kompatibilním API, které vývojářům umožňuje relativně snadno přejít z Kafky na Pulsar.

Jak si vybrat mezi ctihodným oddaným Apache Kafkou a povýšeným Apache Pulsar? Pojďme se podívat na jejich hlavní nabídky otevřených zdrojů a na to, co podnikové edice hlavních správců přináší ke stolu.

Apache Kafka

Apache Kafka, vyvinutý společností LinkedIn a vydaný jako otevřený zdroj již v roce 2011, se rozšířil široko daleko a stal se pro mnoho lidí výchozí volbou, když uvažovali o přidání servisní sběrnice nebo pub / sub systému do architektury. Od debutu Apache Kafky se ekosystém Kafka značně rozrostl a přidal Scheme Registry k vynucení schémat v zasílání zpráv Apache Kafka, Kafka Connect pro snadné streamování z jiných zdrojů dat, jako jsou databáze do Kafky, Kafka Streams pro distribuované zpracování streamů a naposledy KSQL pro provádění dotazování typu SQL nad tématy Kafka. (Tématem v Kafce je název konkrétního kanálu.)

Standardním případem použití pro mnoho kanálů v reálném čase vytvořených v posledních několika letech bylo posílat data do Apache Kafka a poté pomocí datového procesoru, jako je Apache Storm nebo Apache Spark, získávat data, provádět a zpracovávat a poté publikovat výstup do jiného tématu pro následnou spotřebu. S Kafka Streams a KSQL lze vyřešit všechny vaše potřeby v oblasti datových kanálů, aniž byste museli projekt Apache Kafka kdykoli opustit, i když samozřejmě můžete v případě potřeby ke zpracování svých dat použít externí službu.

Zatímco Apache Kafka byl vždy velmi přátelský z pohledu vývojáře, z provozního hlediska to byla něco jako smíšená taška. Zprovoznění malého klastru je relativně snadné, ale udržování velkého klastru je často plné problémů (např. Výměna vedoucího oddílu po selhání zprostředkovatele Kafka).

Kromě toho byl přístup k podpoře více nájemních vztahů prostřednictvím nástroje s názvem MirrorMaker jistým způsobem, jak přimět SRE k vytrhávání vlasů. MirrorMaker je skutečně považován za takový problém, že společnosti jako Uber vytvořily vlastní systém pro replikaci napříč datovými centry (uReplicator). Confluent zahrnuje Confluent Replicator jako součást své podnikové nabídky Apache Kafka. Mluvíme-li jako někdo, kdo musel udržovat nastavení MirrorMakeru, je škoda, že Replicator není součástí verze open source.

Rozhodně to však nejsou všechny špatné zprávy na operační frontě. V současné řadě Apache Kafka 1.x bylo provedeno mnoho práce ke snížení některých bolestí hlavy při spuštění klastru. V poslední době došlo k několika změnám, které systému umožňují efektivněji provozovat velké klastry s více než 200 000 oddíly a vylepšení, jako je přidávání front „mrtvých písmen“ do Kafka Connect, umožňuje identifikaci a zotavení z problémů ve zdrojích dat a potopení jednodušší. Je také pravděpodobné, že v roce 2019 uvidíme podporu běhu Apache Kafky na Kubernetes na úrovni výroby (prostřednictvím grafů Helm a operátora Kubernetes).

V roce 2014 vytvořili tři z původních vývojářů společnosti Kafka (Jun Rao, Jay Kreps a Neha Narkhede) společnost Confluent, která poskytuje další podnikové funkce ve své Confluent Platform, jako je výše zmíněný Replicator, Control Center, další bezpečnostní moduly plug-in a obvyklá podpora a nabídka profesionálních služeb. Confluent má také cloudovou nabídku, Confluent Cloud, což je plně spravovaná služba Confluent Platform, která běží na Amazon Web Services nebo Google Cloud Platform, pokud byste sami nechtěli řešit některé provozní režie běžících klastrů.

Pokud jste uzamčeni na AWS a používáte služby Amazon, nezapomeňte, že Amazon představil veřejnou verzi Amazon Managed Streaming pro Kafku (MSK), což je plně spravovaná služba Kafka v rámci ekosystému AWS. (Všimněte si také, že Amazon MSK není poskytováno ve spolupráci s Confluent, takže spuštění MSK vám nezíská všechny funkce Confluent Platform, ale pouze to, co je poskytováno v open source Apache Kafka.)

Apache Pulsar

Vzhledem k tomu, že Apache Software Foundation má zálibu ve vyzvedávání projektů, které zdánlivě duplikují funkčnost (chcete Apache Apex, Apache Flink, Apache Heron, Apache Samza, Apache Spark nebo Apache Storm pro vaše potřeby zpracování dat v acyklickém grafu?), Měli byste odpusťte, že se díváte přímo za oznámení o tom, že Apache Pulsar se stal projektem Apache na nejvyšší úrovni, než si vyberete Apache Kafka jako důvěryhodnou možnost pro vaše potřeby zasílání zpráv. Ale Apache Pulsar si zaslouží pohled.

Apache Pulsar se narodil v Yahoo, kde byl vytvořen, aby uspokojil potřeby organizace, které v té době nemohly poskytnout jiné nabídky open-source. Výsledkem bylo, že Pulsar byl od základu postaven tak, aby zvládal miliony témat a oddílů s plnou podporou georeplikace a multi-nájmu.

Pod kryty používá Apache Pulsar Apache BookKeeper pro udržení svých úložných potřeb, ale je tu zvrat: Apache Pulsar má funkci nazvanou Tiered Storage, což je docela něco. Jedním z problémů distribuovaných systémů protokolů je to, že i když chcete, aby data zůstala na platformě protokolů co nejdéle, diskové jednotky nemají nekonečnou velikost. V určitém okamžiku se rozhodnete tyto zprávy buď smazat, nebo uložit jinde, kde je možné je v budoucnu případně přehrát prostřednictvím datového kanálu. Který funguje, ale může být provozně komplikovaný. Apache Pulsar může prostřednictvím Tiered Storage automaticky přesunout starší data na Amazon S3, Google Cloud Storage nebo Azure Blog Storage a stále poskytovat transparentní pohled zpět klientovi; klient může číst od začátku času, jako by všechny zprávy byly přítomny v protokolu.

Stejně jako Apache Kafka vytvořil Apache Pulsar ekosystém pro zpracování dat (i když také poskytuje adaptéry pro Apache Spark a Apache Storm). Pulsar IO je ekvivalentem Kafka Connect pro připojení k jiným datovým systémům jako zdroje nebo propady a Pulsar Functions poskytuje funkce zpracování dat. Dotazování na SQL je poskytováno pomocí adaptéru pro otevřený zdroj Facebooku Presto.

Zajímavou vráskou je, že funkce Pulsar Functions a Pulsar IO běží v rámci standardního klastru Pulsar, místo aby byly samostatnými procesy, které by mohly běžet kdekoli. I když se jedná o snížení flexibility, z provozního hlediska to dělá věci mnohem jednodušší. (Existuje místní režim spuštění, který lze zneužít ke spuštění funkcí mimo klastr, ale dokumentace jde mimo způsob, jak říci „Nedělejte to!“)

Apache Pulsar také nabízí různé metody spouštění funkcí uvnitř klastru: Mohou být spuštěny jako samostatné procesy, jako Dockerovy kontejnery nebo jako vlákna běžící v procesu JVM brokera. To navazuje na model nasazení pro Apache Pulsar, který již ve výrobě podporuje Kubernetes nebo Mesosphere DC / OS. Je třeba si uvědomit, že Pulsar Functions, Pulsar IO a SQL jsou relativně nové přírůstky do Apache Pulsar, takže pokud je používáte, očekávejte několik ostrých hran.

K dispozici je také omezená obálka API kompatibilní s Kafkou pouze pro Javu, takže můžete potenciálně integrovat existující aplikace Apache Kafka do infrastruktury Apache Pulsar. To je pravděpodobně vhodnější pro průzkumné testování a prozatímní migrační plán než pro produkční řešení, ale je hezké mít!

Podobným způsobem jako Confluent vytvořili vývojáři Apache Pulsar v Yahoo (Matteo Merli a Sijie Guo) spinoffovou společnost Streamlio, kde jsou spoluzakladateli spolu s tvůrci Apache Heron (Karthik Ramasamy a Sanjeev Kulkarni). . Podniková nabídka společnosti Streamlio zahrnuje obvyklou komerční podporu a řešení profesionálních služeb spolu s konzolou pro správu uzavřeného zdroje, ale věci jako efektivní a trvanlivá podpora více nájemních vztahů jsou součástí základního produktu s otevřeným zdrojovým kódem.

Apache Kafka nebo Apache Pulsar?

Apache Kafka je vyspělý, odolný a testovaný produkt. Má klienty napsané téměř ve všech populárních jazycích a také řadu podporovaných konektorů pro různé zdroje dat v Kafka Connect. Díky spravovaným službám nabízeným společnostmi Amazon a Confluent je snadné získat, provozovat a udržovat velký cluster Kafka - mnohem snazší než v předchozích letech. I nadále používám Apache Kafka v nových projektech a pravděpodobně tak budu dělat po mnoho dalších let.

Pokud se však chystáte budovat systém zasílání zpráv, který musí být od začátku víceklientský nebo geograficky replikovaný, nebo který má velké potřeby pro ukládání dat, plus potřebu snadno dotazovat a zpracovávat všechna tato data bez ohledu na to, jak dávno v minulosti, pak navrhuji kopnout do pneumatik Apache Pulsar. Určitě se hodí pro některé případy použití, s nimiž může Apache Kafka bojovat, a zároveň dobře funguje, pokud jde o základní funkce, které potřebujete z platformy distribuovaného protokolu. A pokud vám nevadí být na špici, pokud jde o dokumentaci a zodpovězené otázky Stack Overflow, tím lépe!