Inleiding tot Apache Pulsar

1. Inleiding

Apache Pulsar is een gedistribueerd open source publicatie / abonnement gebaseerd berichtensysteem ontwikkeld door Yahoo.

Het werd gemaakt om de kritieke applicaties van Yahoo, zoals Yahoo Mail, Yahoo Finance, Yahoo Sports enz., Van stroom te voorzien. Vervolgens werd het in 2016 open source onder de Apache Software Foundation.

2. Architectuur

Pulsar is een multi-tenant, krachtige oplossing voor server-to-server messaging. Het is samengesteld uit een aantal makelaars en bookmakers, samen met een ingebouwde Apache ZooKeeper voor configuratie en beheer. De bookmakers zijn van Apache BookKeeper die opslag bieden voor de berichten totdat ze worden verbruikt.

In een cluster hebben we:

  • Meerdere clustermakelaars om het inkomende bericht van producenten af ​​te handelen en het bericht naar consumenten te verzenden
  • Apache BookKeeper om berichtpersistentie te ondersteunen
  • Apache ZooKeeper om de clusterconfiguratie op te slaan

Laten we, om dit beter te begrijpen, het architectuurdiagram uit de documentatie eens bekijken:

3. Belangrijkste kenmerken

Laten we beginnen met een korte blik op enkele van de belangrijkste kenmerken:

  • Ingebouwde ondersteuning voor meerdere clusters
  • Ondersteuning voor geo-replicatie van berichten over meerdere clusters
  • Meerdere abonnementsmodi
  • Schaalbaar naar miljoenen onderwerpen
  • Gebruikt Apache BookKeeper om berichtbezorging te garanderen.
  • Lage latentie

Laten we nu enkele van de belangrijkste functies in detail bespreken.

3.1. Berichtenmodel

Het framework biedt een flexibel berichtenmodel. In het algemeen hebben berichtenarchitecturen twee berichtmodellen, namelijk wachtrijen en uitgever / abonnee. Uitgever / abonnee is een broadcast-berichtensysteem waarin het bericht naar alle consumenten wordt verzonden. Aan de andere kant is wachtrijen een point-to-point-communicatie.

Pulsar combineert beide concepten in één gegeneraliseerde API. De uitgever publiceert de berichten over verschillende onderwerpen. Vervolgens worden deze berichten uitgezonden naar alle abonnementen.

De consumenten abonneren zich om berichten te ontvangen. De bibliotheek stelt consumenten in staat om de verschillende manieren te kiezen om berichten te consumeren in hetzelfde abonnement, inclusief exclusief, gedeeld en failover. We zullen deze soorten abonnementen in detail bespreken in de latere secties.

3.2. Implementatiemodi

Pulsar heeft ingebouwde ondersteuning voor implementatie in verschillende omgevingen. Dit betekent dat we het kunnen gebruiken op standaard on-premise machines, of het kunnen inzetten in een Kubernetes-cluster, Google of AWS Cloud.

Het kan worden uitgevoerd als een enkel knooppunt voor ontwikkelings- en testdoeleinden. In dit geval worden alle componenten (broker, BookKeeper en ZooKeeper) in één proces uitgevoerd.

3.3. Geo-replicatie

De bibliotheek biedt kant-en-klare ondersteuning voor geo-replicatie van gegevens. We kunnen replicatie van berichten tussen meerdere clusters mogelijk maken door verschillende geografische regio's te configureren.

Berichtgegevens worden in bijna realtime gerepliceerd. In het geval van een netwerkstoring over clusters heen, zijn de gegevens altijd veilig en opgeslagen in de BookKeeper. Het replicatiesysteem blijft het opnieuw proberen totdat de replicatie is gelukt.

De geo-replicatiefunctie stelt de organisatie ook in staat om Pulsar bij verschillende cloudproviders in te zetten en de gegevens te repliceren. Dit helpt hen om het gebruik van eigen API's van cloudproviders te vermijden.

3.4. Duurzaamheid

Nadat Pulsar de gegevens heeft gelezen en bevestigd, garandeert het geen gegevensverlies. De duurzaamheid van gegevens is gerelateerd aan het aantal schijven dat is geconfigureerd om de gegevens op te slaan.

Pulsar zorgt voor duurzaamheid door bookies (Apache BookKeeper-instantie) te gebruiken die in opslagknooppunten worden uitgevoerd. Elke keer dat een bookmaker een bericht ontvangt, slaat hij een kopie op in het geheugen en schrijft hij de gegevens ook naar een WAL (Write Ahead Log). Dit logboek werkt op dezelfde manier als een database-WAL. Bookies werken volgens het databasetransactieprincipe en zorgen ervoor dat gegevens niet verloren gaan, zelfs niet in het geval van een machinestoring.

Afgezien van het bovenstaande is Pulsar ook bestand tegen storingen met meerdere knooppunten. De bibliotheek repliceert gegevens naar meerdere bookmakers en stuurt vervolgens een bevestigingsbericht naar de producent. Dit mechanisme garandeert dat er geen gegevensverlies is, zelfs in het geval van meerdere hardwarestoringen.

4. Installatie met één knooppunt

Laten we nu eens kijken hoe we een cluster met één knooppunt van Apache Pulsar kunnen opzetten.

Apache biedt ook een eenvoudige client-API met bindingen voor Java, Python en C ++. We zullen later een eenvoudig Java-producer- en abonnementsvoorbeeld maken.

4.1. Installatie

Apache Pulsar is beschikbaar als een binaire distributie. Laten we beginnen met het downloaden:

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

Wanneer de download is voltooid, kunnen we het zip-bestand uit het archief halen. De niet-gearchiveerde distributie bevat bin, conf, bijvoorbeeld licenties en lib map.

Daarna moeten we de ingebouwde connectoren downloaden. Deze worden nu als een apart pakket verzonden:

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

Laten we de connectoren uit het archief halen en het Connectoren map in de Pulsar-map.

4.2. Een instantie starten

Om een ​​zelfstandige instantie te starten, kunnen we het volgende uitvoeren:

bin / pulsar standalone

5. Java-client

Nu gaan we een Java-project maken om berichten te produceren en te consumeren. We zullen ook voorbeelden maken voor verschillende soorten abonnementen.

5.1. Het project opzetten

We beginnen met het toevoegen van de pulsar-client-afhankelijkheid aan ons project:

 org.apache.pulsar pulsar-client 2.1.1-incubatie 

5.2. Producent

Laten we doorgaan met het maken van een Producent voorbeeld. Hier maken we een onderwerp en een producer.

Eerst moeten we een PulsarClient die verbinding maakt met een Pulsar-service op een specifieke host en poort, met behulp van zijn eigen protocol. Veel producenten en consumenten kunnen een enkel klantobject delen.

Nu gaan we een Producent met de specifieke onderwerpnaam:

private static final String SERVICE_URL = "pulsar: // localhost: 6650"; private static final String TOPIC_NAME = "test-topic"; 
PulsarClient client = PulsarClient.builder () .serviceUrl (SERVICE_URL) .build (); Producer producer = client.newProducer () .topic (TOPIC_NAME) .compressionType (CompressionType.LZ4) .create ();

De producer stuurt 5 berichten:

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

5.3. Klant

Vervolgens maken we de consument om de berichten op te halen die door de producent zijn gemaakt. De consument heeft hetzelfde ook nodig PulsarClient om verbinding te maken met onze server:

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

Hier hebben we de client gemaakt met een Gedeeld abonnementstype. Hierdoor kunnen meerdere consumenten zich aan hetzelfde abonnement hechten en berichten ontvangen.

5.4. Abonnementstypen voor consumenten

In het bovenstaande voorbeeld van de consument, we hebben een abonnement bij gemaakt gedeeld type. We kunnen ook creëren exclusief en failover abonnementen.

De exclusief Met een abonnement kan slechts één consument worden geabonneerd.

Aan de andere kant, een failover abonnement stelt de gebruiker in staat om de fallback-gebruiker te definiëren voor het geval een gebruiker faalt, zoals weergegeven in dit Apache-diagram:

6. Conclusie

In dit artikel hebben we de kenmerken van het Pulsar-berichtensysteem belicht, zoals het berichtenmodel, geo-replicatie en sterke duurzaamheidsgaranties.

We hebben ook geleerd hoe u een enkel knooppunt instelt en hoe u de Java-client gebruikt.

Zoals altijd is de volledige implementatie van deze tutorial te vinden op Github.