Uvod u Apache Pulsar

1. Uvod

Apache Pulsar distribuirani je sustav za razmjenu poruka temeljen na publikacijama / pretplatama, razvijen u Yahoo-u.

Stvoren je za pokretanje Yahoovih kritičnih aplikacija poput Yahoo Mail, Yahoo Finance, Yahoo Sports itd. Zatim je 2016. godine otvoren pod Apache Software Foundation.

2. Arhitektura

Pulsar je rješenje za visoke performanse za razmjenu poruka između poslužitelja s više stanara. Sastoji se od skupa brokera i kladionica, zajedno s ugrađenim Apache ZooKeeper za konfiguraciju i upravljanje. Kladionice su iz Apache BookKeeper koji omogućuju pohranu poruka dok se ne potroše.

U klasteru ćemo imati:

  • Više brokera klastera za obradu dolazne poruke proizvođača i slanje poruke potrošačima
  • Apache BookKeeper za podršku postojanosti poruka
  • Apache ZooKeeper za spremanje konfiguracije klastera

Da bismo to bolje razumjeli, pogledajmo dijagram arhitekture iz dokumentacije:

3. Ključne značajke

Krenimo s kratkim uvidom u neke od ključnih značajki:

  • Ugrađena podrška za više klastera
  • Podrška za geo-replikaciju poruka u više klastera
  • Više načina pretplate
  • Skalabilno na milijune tema
  • Koristi Apache BookKeeper za jamčenje dostave poruka.
  • Niska latencija

Sada, detaljno ćemo razgovarati o nekim ključnim značajkama.

3.1. Model razmjene poruka

Okvir pruža fleksibilni model za razmjenu poruka. Općenito arhitekture razmjene poruka imaju dva modela razmjene poruka, tj. Čekanje u redovima i izdavač / pretplatnik. Izdavač / pretplatnik je sustav razmjene poruka u kojem se poruka šalje svim potrošačima. S druge strane, čekanje je komunikacija od točke do točke.

Pulsar kombinira oba koncepta u jednom generaliziranom API-ju. Izdavač objavljuje poruke na različite teme. Tada se te poruke emitiraju na sve pretplate.

Potrošači se pretplaćuju na primanje poruka. Biblioteka omogućava potrošačima da odaberu različite načine konzumiranja poruka u istoj pretplati koja uključuje ekskluzivne, dijeljene i preusmjeravanje. O ovim vrstama pretplata detaljno ćemo razgovarati u sljedećim odjeljcima.

3.2. Načini primjene

Pulsar ima ugrađenu podršku za raspoređivanje u različitim okruženjima. To znači da ga možemo koristiti na standardnim lokalnim strojevima ili ga rasporediti u Kubernetesov klaster, Google ili AWS Cloud.

Može se izvršiti kao jedan čvor za potrebe razvoja i testiranja. U ovom se slučaju sve komponente (broker, BookKeeper i ZooKeeper) izvode u jednom procesu.

3.3. Geo-replikacija

Knjižnica pruža gotovu podršku za geo-replikaciju podataka. Možemo omogućiti replikaciju poruka između više klastera konfiguriranjem različitih geografskih regija.

Podaci o poruci kopiraju se u gotovo stvarnom vremenu. U slučaju kvara mreže na klasterima, podaci su uvijek sigurni i pohranjeni u BookKeeper. Sustav replikacije nastavlja pokušati sve dok replikacija ne uspije.

Značajka geo-replikacije također omogućuje organizaciji da Pulsar primijeni na različite davatelje usluga u oblaku i replicira podatke. To im pomaže da izbjegnu upotrebu vlasničkih API-ja davatelja usluga u oblaku.

3.4. Trajnost

Nakon što Pulsar pročita i prizna podatke, jamči gubitak podataka. Trajnost podataka povezana je s brojem diskova konfiguriranih za pohranu podataka.

Pulsar osigurava trajnost korištenjem kladionica (instanca Apache BookKeeper) koje se izvode u čvorovima za pohranu. Kad god kladionica primi poruku, sprema kopiju u memoriju i također zapisuje podatke u WAL (Write Ahead Log). Ovaj zapisnik radi na isti način kao WAL baze podataka. Kladionice rade na principu transakcije baze podataka i osiguravaju da se podaci ne izgube čak i u slučaju kvara stroja.

Osim gore navedenog, Pulsar također može podnijeti višestruke kvarove na čvorovima. Biblioteka replicira podatke na više kladionica, a zatim šalje poruku potvrde proizvođaču. Ovaj mehanizam garantira nulti gubitak podataka čak i u slučaju višestrukih kvara hardvera.

4. Postavljanje pojedinačnog čvora

Sada da vidimo kako postaviti klaster pojedinačnih čvorova Apache Pulsar.

Apache također nudi jednostavan klijentski API s vezima za Java, Python i C ++. Kasnije ćemo stvoriti jednostavan primjer proizvođača Java i pretplate.

4.1. Montaža

Apache Pulsar dostupan je kao binarna distribucija. Počnimo s preuzimanjem:

wget //archive.apache.org/dist/incubator/pulsar/pulsar-2.1.1-incubating/apache-pulsar-2.1.1-incubating-bin.tar.gz

Kada je preuzimanje završeno, možemo arhivirati zip datoteku. Arhivirana distribucija sadržavat će bin, conf, primjer, licence i lib mapu.

Nakon toga moramo preuzeti ugrađene konektore. Oni se sada isporučuju u zasebnom paketu:

wget //archive.apache.org/dist/incubator/pulsar/pulsar-2.1.1-incubating/apache-pulsar-io-connectors-2.1.1-incubating-bin.tar.gz

Aarhivirajmo konektore i kopirajmo Konektori u mapi Pulsar.

4.2. Pokretanje instance

Za pokretanje samostalne instance možemo izvršiti:

kanta za smeće / pulsar samostalna

5. Java klijent

Sada ćemo stvoriti Java projekt za proizvodnju i konzumiranje poruka. Također ćemo stvoriti primjere za različite vrste pretplata.

5.1. Postavljanje projekta

Za početak ćemo dodati ovisnost pulsar-klijenta u naš projekt:

 org.apache.pulsar pulsar-klijent 2.1.1-inkubiranje 

5.2. Proizvođač

Nastavimo stvaranjem a Proizvođač primjer. Ovdje ćemo stvoriti temu i producenta.

Prvo, moramo stvoriti a PulsarClient koji će se povezati s Pulsar uslugom na određenom hostu i luci, koristeći vlastiti protokol. Mnogi proizvođači i potrošači mogu dijeliti jedan objekt klijenta.

Sada ćemo stvoriti Proizvođač s određenim nazivom teme:

privatni statički završni niz SERVICE_URL = "pulsar: // localhost: 6650"; privatni statički završni niz TOPIC_NAME = "test-topic"; 
PulsarClient klijent = PulsarClient.builder () .serviceUrl (SERVICE_URL) .build (); Producent producent = client.newProducer () .topic (TOPIC_NAME) .compressionType (CompressionType.LZ4) .create ();

Producent će poslati 5 poruka:

IntStream.range (1, 5) .forEach (i -> {Sadržaj niza = String.format ("hi-pulsar-% d", i); Poruka poruke = MessageBuilder.create () .setContent (content.getBytes () ) .build (); MessageId msgId = produce.send (msg);});

5.3. Potrošač

Zatim ćemo stvoriti potrošača kako bismo dobili poruke koje je stvorio proizvođač. Potrošač također zahtijeva isto PulsarClient za povezivanje s našim poslužiteljem:

Potrošač potrošač = client.newConsumer () .topic (TOPIC_NAME) .subscriptionType (SubscriptionType.Shared) .subscriptionName (SUBSCRIPTION_NAME) .subscribe (); 

Ovdje smo stvorili klijenta s Podijeljeno vrsta pretplate. To omogućava više potrošača da se pridruže istoj pretplati i dobivaju poruke.

5.4. Vrste pretplate za potrošače

U gornjem primjeru potrošača, stvorili smo pretplatu na podijeljeni tip. Možemo i stvarati ekskluzivan i preusmjeravanje pretplate.

The ekskluzivan pretplata omogućuje pretplatu samo jednom potrošaču.

S druge strane, a failover pretplata omogućuje korisniku da definira zamjenskog potrošača, u slučaju da jedan potrošač zakaže, kao što je prikazano na ovom Apache dijagramu:

6. Zaključak

U ovom smo članku istaknuli značajke Pulsar sustava za razmjenu poruka, kao što su model za razmjenu poruka, geo-replikacija i jaka trajnost.

Također smo naučili kako postaviti jedan čvor i kako koristiti Java klijent.

Kao i uvijek, cjelovitu implementaciju ovog vodiča možete pronaći na Githubu.