Apache Kafka vs. Apache Pulsar: Jak wybrać

Obecnie masowo skalowalne komunikaty pub / sub są praktycznie synonimem Apache Kafka. Apache Kafka nadal jest solidnym, open-source'owym wyborem dla rozproszonych aplikacji do przesyłania strumieniowego, niezależnie od tego, czy dodajesz coś takiego jak Apache Storm lub Apache Spark do przetwarzania, czy też używasz narzędzi przetwarzania dostarczonych przez samą Apache Kafka. Ale Kafka nie jest jedyną grą w mieście.

Opracowany przez Yahoo, a obecnie projekt Apache Software Foundation, Apache Pulsar dąży do zdobycia korony wiadomości, którą Apache Kafka nosił od wielu lat. Apache Pulsar oferuje w wielu sytuacjach potencjał szybszej przepustowości i mniejszych opóźnień niż Apache Kafka, a także kompatybilny interfejs API, który pozwala programistom na stosunkowo łatwe przełączanie się z Kafki na Pulsar. 

Jak wybrać między czcigodnym, silnym Apache Kafką a początkującym Apache Pulsar? Przyjrzyjmy się ich podstawowym ofertom open source i temu, co wprowadzają do stołu wydania korporacyjne głównych opiekunów.

Apache Kafka

Opracowany przez LinkedIn i wydany jako open source w 2011 roku, Apache Kafka rozprzestrzenił się bardzo szeroko, stając się niemal domyślnym wyborem dla wielu osób myślących o dodaniu magistrali usług lub systemu pub / sub do architektury. Od debiutu Apache Kafka ekosystem Kafka znacznie się rozrósł, dodając Rejestr schematów w celu wymuszania schematów w komunikatach Apache Kafka, Kafka Connect do łatwego przesyłania strumieniowego z innych źródeł danych, takich jak bazy danych do Kafka, strumienie Kafka do rozproszonego przetwarzania strumieni, a ostatnio KSQL do wykonywania zapytań podobnych do SQL w tematach Kafki. (Temat w Kafce to nazwa konkretnego kanału).

Standardowym przypadkiem użycia wielu potoków czasu rzeczywistego zbudowanych w ciągu ostatnich kilku lat było wypychanie danych do Apache Kafka, a następnie użycie procesora strumieniowego, takiego jak Apache Storm lub Apache Spark, do pobierania danych, wykonywania i przetwarzania, a następnie publikowania wyjście do innego tematu do dalszej konsumpcji. Dzięki Kafka Streams i KSQL wszystkie Twoje potrzeby związane z potokiem danych można obsłużyć bez konieczności opuszczania projektu Apache Kafka w dowolnym momencie, chociaż oczywiście nadal możesz korzystać z usługi zewnętrznej do przetwarzania danych, jeśli jest to wymagane.

Chociaż Apache Kafka zawsze był bardzo przyjazny z punktu widzenia programisty, pod względem operacyjnym był czymś w rodzaju mieszanej torby. Utworzenie i uruchomienie małego klastra jest stosunkowo łatwe, ale utrzymanie dużego klastra często wiąże się z problemami (np. Zamiana partycji lidera po awarii brokera Kafka).

Co więcej, podejście przyjęte do obsługi wielu dzierżawców za pośrednictwem narzędzia o nazwie MirrorMaker było niezawodnym sposobem na skłonienie SRE do wyrywania włosów. Rzeczywiście, MirrorMaker jest uważany za taki problem, że firmy takie jak Uber stworzyły własny system do replikacji w centrach danych (uReplicator). Confluent obejmuje Confluent Replicator jako część swojej oferty korporacyjnej Apache Kafka. Mówiąc jako ktoś, kto musiał utrzymywać konfigurację MirrorMaker, szkoda, że ​​Replicator nie jest częścią wersji open source.

Jednak to zdecydowanie nie wszystkie złe wieści na froncie operacyjnym. W bieżącej serii Apache Kafka 1.x wykonano wiele pracy, aby zmniejszyć niektóre problemy związane z uruchamianiem klastra. Niedawno wprowadzono pewne zmiany, które umożliwiają systemowi obsługę dużych klastrów obejmujących ponad 200 000 partycji w bardziej usprawniony sposób, a ulepszenia, takie jak dodawanie kolejek „utraconych wiadomości” do Kafka Connect, sprawiają, że identyfikowanie i odzyskiwanie po problemach w źródłach danych i ujściach jest tak duże łatwiej. Prawdopodobnie zobaczymy również obsługę na poziomie produkcyjnym uruchamiania Apache Kafka na Kubernetes w 2019 r. (Za pośrednictwem wykresów Helm i operatora Kubernetes).

W 2014 roku trzech pierwotnych programistów Kafki (Jun Rao, Jay Kreps i Neha Narkhede) utworzyło Confluent, która zapewnia dodatkowe funkcje dla przedsiębiorstw na swojej platformie Confluent, takie jak wspomniany replikator, Control Center, dodatkowe wtyczki zabezpieczające i standardowe oferty wsparcia i usług profesjonalnych. Confluent ma również ofertę w chmurze, Confluent Cloud, która jest w pełni zarządzaną usługą Confluent Platform, która działa w Amazon Web Services lub Google Cloud Platform, jeśli wolisz nie zajmować się niektórymi narzutami operacyjnymi związanymi z obsługą klastrów.

Jeśli jesteś zamknięty w AWS i korzystasz z usług Amazon, pamiętaj, że Amazon wprowadził publiczną wersję zapoznawczą Amazon Managed Streaming for Kafka (MSK), która jest w pełni zarządzaną usługą Kafka w ekosystemie AWS. (Zwróć również uwagę, że Amazon MSK nie jest dostarczany we współpracy z Confluent, więc uruchomienie MSK nie zapewni Ci wszystkich funkcji platformy Confluent, ale tylko to, co jest dostępne w Apache Kafka typu open source).

Apache Pulsar

Biorąc pod uwagę zamiłowanie Apache Software Foundation do wybierania projektów, które wydają się powielać funkcjonalność (czy chciałbyś Apache Apex, Apache Flink, Apache Heron, Apache Samza, Apache Spark lub Apache Storm do celów przetwarzania danych na ukierunkowanym acyklicznym wykresie?), wybaczam, że zajrzałeś tuż po ogłoszeniach, że Apache Pulsar stał się projektem Apache najwyższego poziomu, zanim wybierzesz Apache Kafka jako zaufaną opcję dla swoich potrzeb w zakresie przesyłania wiadomości. Ale Apache Pulsar zasługuje na spojrzenie.

Apache Pulsar narodził się w Yahoo, gdzie został stworzony, aby zaspokoić potrzeby organizacji, których inne oferty open-source nie mogły wówczas zapewnić. W rezultacie Pulsar został zbudowany od podstaw do obsługi milionów tematów i partycji z pełną obsługą replikacji geograficznej i wielu dzierżawców.

Pod okładkami Apache Pulsar używa Apache BookKeeper do utrzymania swoich potrzeb w zakresie przechowywania, ale jest pewien zwrot: Apache Pulsar ma funkcję o nazwie Tiered Storage, która jest całkiem niezła. Jednym z problemów związanych z rozproszonymi systemami dziennika jest to, że chociaż chcesz, aby dane pozostawały na platformie dziennika tak długo, jak to możliwe, dyski nie mają nieskończonej wielkości. W pewnym momencie podejmiesz decyzję o usunięciu tych wiadomości lub zapisaniu ich w innym miejscu, gdzie w razie potrzeby można je odtworzyć w potoku danych w przyszłości. Co działa, ale może być skomplikowane operacyjnie. Apache Pulsar, poprzez Tiered Storage, może automatycznie przenosić starsze dane do Amazon S3, Google Cloud Storage lub Azure Blog Storage i nadal przedstawiać klientowi przejrzysty widok;klient może czytać od samego początku, tak jakby wszystkie komunikaty były obecne w dzienniku.

Podobnie jak Apache Kafka, Apache Pulsar rozwinął ekosystem do przetwarzania danych (chociaż zapewnia również adaptery do Apache Spark i Apache Storm). Pulsar IO to odpowiednik Kafka Connect do łączenia się z innymi systemami danych jako źródła lub ujścia, a Pulsar Functions zapewnia funkcjonalność przetwarzania danych. Zapytania SQL są dostarczane za pomocą adaptera dla silnika Presto opartego na otwartym źródle Facebooka.

Ciekawym problemem jest to, że Pulsar Functions i Pulsar IO działają w ramach standardowego klastra Pulsar, a nie są oddzielnymi procesami, które mogłyby potencjalnie działać w dowolnym miejscu. Chociaż jest to zmniejszenie elastyczności, znacznie upraszcza to z operacyjnego punktu widzenia. (Istnieje lokalny tryb uruchamiania, który może być nadużywany do uruchamiania funkcji poza klastrem, ale dokumentacja robi wszystko, co w jej mocy, aby powiedzieć „Nie rób tego!”)

Apache Pulsar oferuje również różne metody uruchamiania funkcji wewnątrz klastra: mogą być uruchamiane jako oddzielne procesy, jako kontenery Dockera lub jako wątki działające w procesie JVM brokera. Jest to powiązane z modelem wdrażania Apache Pulsar, który już obsługuje Kubernetes lub Mesosphere DC / OS w środowisku produkcyjnym. Jedną rzeczą, o której należy pamiętać, jest to, że funkcje Pulsar, Pulsar IO i SQL są stosunkowo nowymi dodatkami do Apache Pulsar, więc spodziewaj się kilku ostrych krawędzi, jeśli ich używasz.

Dostępna jest również ograniczona, tylko Java, kompatybilna z platformą Kafka opakowanie API, dzięki czemu można potencjalnie zintegrować istniejące aplikacje Apache Kafka z infrastrukturą Apache Pulsar. To prawdopodobnie lepiej nadaje się do testów eksploracyjnych i tymczasowego planu migracji niż rozwiązanie produkcyjne, ale dobrze jest mieć!

Podobnie jak w Confluent, twórcy Apache Pulsar w Yahoo (Matteo Merli i Sijie Guo) utworzyli spółkę spin-off, Streamlio, gdzie są współzałożycielami wraz z twórcami Apache Heron (Karthik Ramasamy i Sanjeev Kulkarni) . Oferta korporacyjna Streamlio obejmuje zwykłe komercyjne wsparcie i profesjonalne rozwiązania usługowe, wraz z konsolą zarządzania o zamkniętym kodzie źródłowym, ale elementy takie jak wydajna i trwała obsługa wielu dzierżawców są częścią podstawowego produktu open source.

Apache Kafka czy Apache Pulsar?

Apache Kafka to dojrzały, odporny i sprawdzony w walce produkt. Ma klientów napisanych w prawie każdym popularnym języku, a także wiele obsługiwanych łączników dla różnych źródeł danych w Kafka Connect. Dzięki usługom zarządzanym oferowanym przez Amazon i Confluent łatwo jest uruchomić, uruchomić i utrzymywać duży klaster Kafka - znacznie łatwiej niż w poprzednich latach. Nadal używam Apache Kafka w nowych projektach i prawdopodobnie będę to robić przez wiele lat.

Jeśli jednak zamierzasz budować system przesyłania wiadomości, który od samego początku musi być wielodostępny lub replikowany geograficznie, lub który ma duże potrzeby w zakresie przechowywania danych, a także potrzebę łatwego przeszukiwania i przetwarzania wszystkich tych danych bez względu na to, jak dawno temu proponuję kopnąć opony Apache Pulsar. Zdecydowanie pasuje do niektórych przypadków użycia, z którymi Apache Kafka może się zmagać, a jednocześnie działa dobrze pod względem podstawowych funkcji potrzebnych z rozproszonej platformy dziennika. A jeśli nie masz nic przeciwko byciu nowicjuszem w zakresie dokumentacji i odpowiedzi na pytania dotyczące przepełnienia stosu, tym lepiej!