Introduksjon til Apache Pulsar

1. Introduksjon

Apache Pulsar er et distribuert open source-publiserings- / abonnementsbasert meldingssystem utviklet på Yahoo.

Den ble opprettet for å drive Yahoos kritiske applikasjoner som Yahoo Mail, Yahoo Finance, Yahoo Sports etc. Deretter, i 2016, var den åpen fra Apache Software Foundation.

2. Arkitektur

Pulsar er en multi-tenant, høyytelsesløsning for server-til-server-meldinger. Den består av et sett med meglere og bookmakere sammen med en innebygd Apache ZooKeeper for konfigurasjon og administrasjon. Bookies er fra Apache BookKeeper som gir lagring for meldingene til de blir fortært.

I en klynge har vi:

  • Flere klyngemeglere for å håndtere innkommende meldinger fra produsenter og sende meldingen til forbrukerne
  • Apache BookKeeper for å støtte vedvaring av meldinger
  • Apache ZooKeeper for å lagre klyngekonfigurasjonen

For å bedre forstå dette, la oss ta en titt på arkitekturdiagrammet fra dokumentasjonen:

3. Nøkkelfunksjoner

La oss starte med en rask titt på noen av de viktigste funksjonene:

  • Innebygd støtte for flere klynger
  • Støtte for geografisk replikering av meldinger på tvers av flere klynger
  • Flere abonnementsmodi
  • Skalerbar til millioner av emner
  • Bruker Apache BookKeeper for å garantere levering av meldinger.
  • Lav ventetid

La oss nå diskutere noen av hovedtrekkene i detalj.

3.1. Meldingsmodell

Rammeverket gir en fleksibel meldingsmodell. Generelt har meldingsarkitekturer to meldingsmodeller, dvs. kø og utgiver / abonnent. Publisher / Subscriber er et kringkastingsmeldingssystem der meldingen sendes til alle forbrukere. På den annen side er kø et punkt til punkt kommunikasjon.

Pulsar kombinerer begge konseptene i ett generalisert API. Forlaget publiserer meldingene til forskjellige emner. Deretter sendes disse meldingene til alle abonnementene.

Forbrukerne abonnerer for å få meldinger. Biblioteket lar forbrukerne velge forskjellige måter å konsumere meldinger i samme abonnement som inkluderer eksklusivt, delt og failover. Vi vil diskutere disse abonnementstypene i detalj i de senere avsnittene.

3.2. Implementeringsmodi

Pulsar har innebygd støtte for distribusjon i forskjellige miljøer. Dette betyr at vi kan bruke den på vanlige maskiner på stedet, eller distribuere den i en Kubernetes-klynge, Google eller AWS Cloud.

Den kan utføres som en enkelt node for utviklings- og testformål. I dette tilfellet kjører alle komponentene (megler, BookKeeper og ZooKeeper) i en enkelt prosess.

3.3. Geo-replikering

Biblioteket gir direkte støtte for geografisk replikering av data. Vi kan aktivere replikering av meldinger mellom flere klynger ved å konfigurere forskjellige geografiske regioner.

Meldingsdata blir replikert i nærmest sanntid. I tilfelle nettverksfeil på tvers av klynger, er dataene alltid trygge og lagres i BookKeeper. Replikeringssystemet fortsetter å prøve på nytt til replikeringen er vellykket.

Geo-replikasjonsfunksjonen lar også organisasjonen distribuere Pulsar på tvers av forskjellige skyleverandører og replikere dataene. Dette hjelper dem med å unngå bruk av proprietære API-leverandører av skyer.

3.4. Permanens

Etter at Pulsar har lest og anerkjent dataene, garanterer det ikke tap av data. Datas holdbarhet er relatert til antall disker som er konfigurert for å lagre dataene.

Pulsar sikrer holdbarhet ved å bruke bookmakere (Apache BookKeeper-forekomst) som kjører i lagringsnoder. Hver gang en bookie mottar en melding, lagrer den en kopi i minnet og skriver også dataene til en WAL (Write Ahead Log). Denne loggen fungerer på samme måte som en database WAL. Bookies opererer etter databasetransaksjonsprinsipp og sørger for at data ikke går tapt selv i tilfelle maskinfeil.

Bortsett fra det ovennevnte, kan Pulsar også tåle flere nodefeil. Biblioteket replikerer data til flere bookmakere, og sender deretter en bekreftelsesmelding til produsenten. Denne mekanismen garanterer at null tap av data selv i tilfelle flere maskinvarefeil.

4. Enkelt nodeoppsett

La oss nå se hvordan du setter opp en enkelt node-klynge av Apache Pulsar.

Apache tilbyr også en enkel klient-API med bindinger for Java, Python og C ++. Vi oppretter senere et enkelt Java-produsent- og abonnementseksempel.

4.1. Installasjon

Apache Pulsar er tilgjengelig som en binær distribusjon. La oss starte med å laste den ned:

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

Når nedlastingen er fullført, kan vi arkivere zip-filen. Den ikke-arkiverte distribusjonen vil inneholde bin, conf, for eksempel lisenser og lib mappe.

Etter det må vi laste ned de innebygde kontaktene. Disse sendes nå som en egen pakke:

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

La oss arkivere kontaktene og kopiere Kontakter mappen i Pulsar-mappen.

4.2. Starte en forekomst

For å starte en frittstående forekomst kan vi utføre:

søppel / pulsar frittstående

5. Java-klient

Nå oppretter vi et Java-prosjekt for å produsere og konsumere meldinger. Vi lager også eksempler på forskjellige abonnementstyper.

5.1. Sette opp prosjektet

Vi begynner med å legge til avhengigheten av pulsar-klienten til prosjektet vårt:

 org.apache.pulsar pulsar-client 2.1.1-inkubering 

5.2. Produsent

La oss fortsette med å lage en Produsent eksempel. Her oppretter vi et emne og en produsent.

Først må vi lage en PulsarClient som vil koble til en Pulsar-tjeneste på en bestemt vert og port, bruker sin egen protokoll. Mange produsenter og forbrukere kan dele et enkelt klientobjekt.

Nå lager vi en Produsent med det spesifikke emnets navn:

privat statisk sluttstreng SERVICE_URL = "pulsar: // localhost: 6650"; privat statisk finale String TOPIC_NAME = "test-topic"; 
PulsarClient-klient = PulsarClient.builder () .serviceUrl (SERVICE_URL) .build (); Produsentprodusent = client.newProducer () .topic (TOPIC_NAME) .compressionType (CompressionType.LZ4) .create ();

Produsenten vil sende 5 meldinger:

IntStream.range (1, 5) .forEach (i -> {String content = String.format ("hi-pulsar-% d", i); Message msg = MessageBuilder.create () .setContent (content.getBytes ()) ) .build (); MessageId msgId = producer.send (msg);});

5.3. Forbruker

Deretter oppretter vi forbrukeren for å få meldingene opprettet av produsenten. Forbrukeren krever også det samme PulsarClient for å koble til serveren vår:

Forbrukerforbruker = client.newConsumer () .topic (TOPIC_NAME) .subscriptionType (SubscriptionType.Shared) .subscriptionName (SUBSCRIPTION_NAME) .subscribe (); 

Her har vi opprettet klienten med en Delt abonnementstype. Dette gjør at flere forbrukere kan knytte seg til det samme abonnementet og få meldinger.

5.4. Abonnementstyper for forbruker

I eksemplet ovenfor av forbrukeren, vi har opprettet et abonnement med delt type. Vi kan også lage eksklusiv og failover abonnement.

De eksklusiv abonnement tillater at bare én forbruker kan abonnere.

På den annen side, en failover-abonnement lar brukeren definere reserveforbrukeren, i tilfelle en forbruker mislykkes, som vist i dette Apache-diagrammet:

6. Konklusjon

I denne artikkelen har vi fremhevet funksjonene til Pulsar-meldingssystemet, for eksempel meldingsmodellen, georeplikasjon og sterke holdbarhetsgarantier.

Vi lærte også hvordan du setter opp en enkelt node og hvordan du bruker Java-klienten.

Som alltid kan den fulle implementeringen av denne opplæringen finnes på Github.


$config[zx-auto] not found$config[zx-overlay] not found