Apache Kafka vs. Apache Pulsar: Kako odabrati

Ovih dana masovno skalabilna pub / sub poruka gotovo je sinonim za Apache Kafka. Apache Kafka i dalje je čvrst, otvoren izvor, otvoren izbor za distribuirane streaming programe, bez obzira dodajete li nešto poput Apache Storm ili Apache Spark za obradu ili koristite alate za obradu koje pruža sam Apache Kafka. Ali Kafka nije jedina igra u gradu.

Razvio ga je Yahoo, a sada je projekt Apache Software Foundation, Apache Pulsar ide na krunu razmjene poruka koju Apache Kafka nosi već dugi niz godina. Apache Pulsar nudi potencijal bržeg protoka i nižeg kašnjenja od Apache Kafke u mnogim situacijama, zajedno s kompatibilnim API-jem koji omogućuje programerima da se s relativne lakoće prebace s Kafke na Pulsar. 

Kako odabrati između časnog staloženog Apachea Kafke i nadobudnijeg Apachea Pulsara? Pogledajmo njihove osnovne otvorene ponude i ono što izdanja glavnih održavatelja donose na stol.

Apache Kafka

Razvio ga je LinkedIn i objavio kao otvoreni izvor još 2011. godine, Apache Kafka proširio se nadaleko i uvelike postao zadani izbor za mnoge kad razmišljaju o dodavanju servisne sabirnice ili pub / podsustava u arhitekturu. Od debija Apachea Kafke, ekosustav Kafke znatno je porastao, dodavši Registar shema za provođenje shema u porukama Apache Kafka, Kafka Connect za jednostavno strujanje iz drugih izvora podataka kao što su baze podataka na Kafku, Kafka Streams za obradu distribuiranih tokova, a nedavno i KSQL za izvođenje SQL-sličnih upita u vezi s Kafkinim temama. (Tema na Kafki naziv je za određeni kanal.)

Standardni slučaj korištenja mnogih cjevovoda u stvarnom vremenu izgrađenih tijekom posljednjih nekoliko godina bio je guranje podataka u Apache Kafka, a zatim upotreba protočnog procesora kao što je Apache Storm ili Apache Spark za uvlačenje podataka, izvođenje i obradu, a zatim objavljivanje izlaz na drugu temu za nizvodnu potrošnju. Pomoću Kafka Streams i KSQL mogu se riješiti sve vaše potrebe za cjevovodom podataka, a da u bilo kojem trenutku ne morate napustiti projekt Apache Kafka, iako naravno i dalje možete koristiti vanjsku uslugu za obradu podataka ako je potrebno.

Iako je Apache Kafka uvijek bio vrlo prijateljski nastrojen s gledišta programera, operativno je to bila nešto kao mješovita torba. Pokretanje i pokretanje malog klastera relativno je jednostavno, ali održavanje velikog klastera često je opterećeno problemima (npr. Zamjena voditeljske particije nakon neuspjeha Kafkinog brokera).

Nadalje, pristup podrške multi-stanarstvu putem uslužnog programa nazvanog MirrorMaker bio je siguran način da se SRE-ovi povuku iz kose. Zapravo, MirrorMaker se smatra takvim problemom da su tvrtke poput Ubera stvorile vlastiti sustav za replikaciju u podatkovnim centrima (uReplicator). Confluent uključuje Confluent Replicator kao dio poslovne ponude tvrtke Apache Kafka. Govoreći kao netko tko je morao održavati postavke MirrorMaker-a, šteta je što Replicator nije dio verzije otvorenog koda.

Međutim, definitivno nisu sve loše vijesti na operativnom planu. U trenutnoj seriji Apache Kafka 1.x mnogo je posla učinjeno kako bi se smanjile neke glavobolje pokretanja klastera. Nedavno su se dogodile neke promjene koje omogućuju sustavu da pokreće velike klastere s više od 200.000 particija na jednostavniji način, a poboljšanja poput dodavanja redova s ​​mrtvim slovima u Kafka Connect čine identificiranje i oporavak od problema u izvorima podataka i umivaonicima toliko lakše. Također ćemo vjerojatno vidjeti produkcijsku podršku za pokretanje Apache Kafke na Kubernetesu u 2019. godini (putem Helmovih ljestvica i Kubernetes operatora).

Davne 2014. godine trojica izvornih programera Kafke (Jun Rao, Jay Kreps i Neha Narkhede) osnovali su Confluent, koji u svojoj platformi Confluent pruža dodatne značajke poduzeća kao što su gore spomenuti Replikator, Control Center, dodatni sigurnosni dodaci i uobičajena ponuda podrške i profesionalnih usluga. Confluent također nudi ponudu u oblaku, Confluent Cloud, koja je u potpunosti upravljana uslugom Confluent Platform koja radi na Amazon Web Services ili Google Cloud Platform, ako radije ne biste sami rješavali neke operativne troškove pokrenutog klastera.

Ako ste zaključani na AWS-u i koristite Amazonove usluge, imajte na umu da je Amazon predstavio javni pregled Amazon Managed Streaming-a za Kafka (MSK), koji je u potpunosti upravljana Kafka-uslugom unutar AWS ekosustava. (Imajte na umu da Amazon MSK nije dostupan u partnerstvu s Confluentom, tako da pokretanje MSK-a neće vam pružiti sve značajke Confluent Platform, već samo ono što je dostupno u otvorenom izvornom kodu Apache Kafka.)

Apache Pulsar

S obzirom na sklonost Apache Software Foundation-a prema odabiru projekata za koje se čini da dupliciraju funkcionalnost (želite li Apache Apex, Apache Flink, Apache Heron, Apache Samza, Apache Spark ili Apache Storm za vaše usmjerene potrebe obrade podataka acikličnim grafom?), Želite li neka vam bude oprošteno što gledate točno pored najava o tome kako Apache Pulsar postaje vrhunski Apache projekt prije nego što odaberete Apache Kafka kao pouzdanu opciju za vaše potrebe razmjene poruka. Ali Apache Pulsar zaslužuje pogled.

Apache Pulsar rođen je u Yahoo-u, gdje je stvoren da odgovori na potrebe organizacije koje druge ponude otvorenog koda u to vrijeme nisu mogle pružiti. Kao rezultat toga, Pulsar je izgrađen od temelja da obrađuje milijune tema i particija s punom podrškom za geo-replikaciju i višestanarsko korištenje.

Ispod pokrivača, Apache Pulsar koristi Apache BookKeeper za održavanje svojih potreba za pohranom, ali postoji zaokret: Apache Pulsar ima značajku pod nazivom Tiered Storage koja je sasvim nešto. Jedan od problema distribuiranih sustava dnevnika je taj što, iako želite da podaci što duže ostaju u log platformi, pogoni diska nisu beskonačne veličine. U nekom trenutku donesete odluku da te poruke izbrišete ili pohranite negdje drugdje, gdje će se potencijalno moći reproducirati kroz cjevovod podataka ako je to potrebno u budućnosti. Što djeluje, ali može biti operativno komplicirano. Apache Pulsar, putem Tiered Storage, može automatski premjestiti starije podatke na Amazon S3, Google Cloud Storage ili Azure Blog Storage, a klijentu i dalje prikazivati ​​prozirni pogled;klijent može čitati od početka, baš kao da su sve poruke prisutne u zapisniku.

Baš kao i Apache Kafka, Apache Pulsar razvio je ekosustav za obradu podataka (iako također nudi adaptere za Apache Spark i Apache Storm). Pulsar IO je ekvivalent Kafka Connect za povezivanje s drugim podatkovnim sustavima ili kao izvor ili kao sudoper, a Pulsar Functions pruža funkcionalnost obrade podataka. SQL upiti pružaju se korištenjem adaptera za Facebookov otvoreni Presto engine.

Zanimljiva je nabora da se funkcije Pulsar i Pulsar IO izvode unutar standardnog klastera Pulsar, umjesto da su odvojeni procesi koji bi se mogli pokretati bilo gdje. Iako se radi o smanjenju fleksibilnosti, to s operativnog gledišta stvari čini puno jednostavnijima. (Postoji lokalni način pokretanja koji bi se mogao zloupotrijebiti za pokretanje funkcija izvan klastera, ali dokumentacija se previše trudi da kaže "Ne radi to!")

Apache Pulsar također nudi različite metode pokretanja funkcija unutar klastera: mogu se pokrenuti kao zasebni procesi, kao Docker spremnici ili kao niti pokrenute u JVM procesu brokera. To se povezuje s modelom implementacije za Apache Pulsar, koji već podržava Kubernetes ili Mesosphere DC / OS u proizvodnji. Treba biti svjestan da su Pulsar Functions, Pulsar IO i SQL relativno novi dodaci Apache Pulsaru, pa očekujte nekoliko oštrih rubova ako ih koristite.

Postoji i ograničeni, samo za Javu, Kafka kompatibilni API omot, tako da možete potencijalno integrirati postojeće Apache Kafka aplikacije u Apache Pulsar infrastrukturu. Ovo je vjerojatno prikladnije za istraživačka ispitivanja i privremeni plan migracije od proizvodnog rješenja, ali lijepo je imati!

Na sličan način kao Confluent, programeri Apache Pulsara u Yahoo-u (Matteo Merli i Sijie Guo) osnovali su spinoff tvrtku Streamlio, gdje su suosnivači zajedno sa tvorcima Apache Heron (Karthik Ramasamy i Sanjeev Kulkarni) . Ponuda poduzeća Streamlio uključuje uobičajena rješenja za komercijalnu podršku i profesionalne usluge, zajedno s upravljačkom konzolom s zatvorenim izvorom, ali stvari poput učinkovite i trajne podrške za više stanara dio su temeljnog proizvoda otvorenog koda.

Apache Kafka ili Apache Pulsar?

Apache Kafka zreo je, izdržljiv i testiran u bitkama. Ima klijente napisane na gotovo svim popularnim jezicima, kao i mnoštvo podržanih konektora za različite izvore podataka u Kafka Connect. S upravljanim uslugama koje nude Amazon i Confluent, lako je dobiti, pokrenuti i održavati veliki Kafka klaster - mnogo lakše nego prethodnih godina. I dalje koristim Apache Kafku u novim projektima i vjerojatno ću to činiti dugi niz godina.

Međutim, ako ćete graditi sustav za razmjenu poruka koji od početka mora biti višenamjenski ili geo-repliciran ili koji ima velike potrebe za pohranom podataka, plus potreba za jednostavnim postavljanjem upita i obradom svih podataka, bez obzira kako davno u prošlosti, onda predlažem da se Apacheu Pulsaru napucaju gume. Definitivno odgovara nekim slučajevima korištenja s kojima se Apache Kafka može boriti, a istovremeno dobro funkcionira u smislu osnovnih značajki koje su vam potrebne iz distribuirane platforme dnevnika. A ako vam ne smeta što ste na vrhu kad je riječ o dokumentaciji i odgovorima na Stack Overflow, utoliko bolje!