Bevezetés az Apache Pulsar-ba

1. Bemutatkozás

Az Apache Pulsar egy elosztott, nyílt forráskódú publikáció / előfizetés alapú üzenetkezelő rendszer, amelyet a Yahoo fejlesztett ki.

A Yahoo kritikus alkalmazásainak, például a Yahoo Mail, a Yahoo Finance, a Yahoo Sports stb. Működtetésére hozták létre. Aztán 2016-ban az Apache Software Foundation keretében nyitották meg.

2. Építészet

A Pulsar egy több bérlőből álló, nagy teljesítményű megoldás a szerverek közötti kommunikációhoz. Brókerekből és fogadóirodákból, valamint beépítettből áll Apache ZooKeeper konfiguráláshoz és kezeléshez. A fogadóirodák származnak Apache BookKeeper amelyek tárolást biztosítanak az üzenetekig, amíg el nem fogyasztják őket.

Egy klaszterben:

  • Több fürtközvetítő kezeli a gyártóktól érkező beérkező üzeneteket, és továbbítja az üzenetet a fogyasztóknak
  • Apache BookKeeper az üzenet tartósságának támogatásához
  • Apache ZooKeeper a fürt konfigurációjának tárolására

Ennek jobb megértése érdekében nézzük meg a dokumentáció architektúráját:

3. Főbb jellemzők

Kezdjük egy rövid áttekintéssel a legfontosabb jellemzők közül:

  • Beépített támogatás több klaszterhez
  • Támogatja az üzenetek földrajzi replikációját több fürtön keresztül
  • Több előfizetéses mód
  • Több millió témára skálázható
  • Az Apache BookKeeper alkalmazással garantálja az üzenetek kézbesítését.
  • Alacsony késleltetés

Most tárgyaljuk részletesen a legfontosabb jellemzőket.

3.1. Üzenetküldési modell

A keretrendszer rugalmas üzenetküldési modellt biztosít. Általánosságban az üzenetküldő architektúráknak két üzenetküldési modelljük van, azaz sorban állás és kiadó / előfizető. A Publisher / Subscriber egy olyan üzenetszóró rendszer, amelyben az üzenetet minden fogyasztónak elküldik. Másrészt a sorban állás pont-pont kommunikáció.

A Pulsar mindkét fogalmat egy általánosított API-ban egyesíti. A kiadó különböző témákban teszi közzé az üzeneteket. Ezután ezeket az üzeneteket minden előfizetéshez továbbítják.

A fogyasztók feliratkoznak az üzenetek fogadására. A könyvtár lehetővé teszi a fogyasztók számára, hogy kiválasszák az üzenetek felhasználásának különböző módjait ugyanazon előfizetésben, amely magában foglalja az exkluzív, megosztott és feladatátvételt. Ezeket az előfizetési típusokat a későbbi szakaszokban részletesen megvitatjuk.

3.2. Telepítési módok

A Pulsar beépített támogatást nyújt a különböző környezetekben történő telepítéshez. Ez azt jelenti, hogy használhatjuk szabványos helyszíni gépeken, vagy telepíthetjük egy Kubernetes-fürtbe, a Google-be vagy az AWS Cloud-ba.

Fejlesztési és tesztelési célokra egyetlen csomópontként futtatható. Ebben az esetben az összes alkotóelem (bróker, BookKeeper és ZooKeeper) egyetlen folyamatban fut.

3.3. Georeplikáció

A könyvtár dobozon kívül támogatja az adatok georeplikációját. Különböző földrajzi régiók konfigurálásával engedélyezhetjük az üzenetek replikálását több fürt között.

Az üzenet adatait csaknem valós időben replikálják. Fürtökön átívelő hálózati hiba esetén az adatok mindig biztonságosak és a BookKeeperben vannak tárolva. A replikációs rendszer addig folytatja az újrapróbálkozást, amíg a replikáció sikeres lesz.

A georeplikációs szolgáltatás lehetővé teszi a szervezet számára a Pulsar telepítését különböző felhőszolgáltatók között és az adatok replikálását. Ez segít nekik elkerülni a saját felhőszolgáltató API-k használatát.

3.4. Állandóság

Miután a Pulsar elolvasta és nyugtázta az adatokat, az nem garantálja az adatvesztést. Az adatok tartóssága az adatok tárolására konfigurált lemezek számával függ össze.

A Pulsar biztosítja a tartósságot a tároló csomópontokban futó bukmékerek (Apache BookKeeper példány) használatával. Amikor egy bukméker üzenetet kap, elment egy példányt a memóriába, és az adatokat WAL-ba (Write Ahead Log) is írja. Ez a napló ugyanúgy működik, mint egy adatbázis WAL. A fogadóirodák az adatbázis-tranzakció elvén működnek, és biztosítják, hogy az adatok még a gép meghibásodása esetén sem vesznek el.

A fentieken kívül a Pulsar több csomópont meghibásodásának is ellenáll. A könyvtár több fogadóra másolja az adatokat, majd nyugtázó üzenetet küld a gyártónak. Ez a mechanizmus garantálja a nulla adatvesztést több hardveres meghibásodás esetén is.

4. Egy csomópont beállítása

Most nézzük meg, hogyan állíthatja be az Apache Pulsar egyetlen csomópont-fürtjét.

Az Apache egyszerű kliens API-t is kínál Java, Python és C ++ összerendeléssel. Később létrehozunk egy egyszerű Java-gyártót és előfizetési példát.

4.1. Telepítés

Az Apache Pulsar bináris terjesztésként érhető el. Kezdjük a letöltéssel:

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

Amikor a letöltés befejeződött, visszavonhatjuk a zip fájl archiválását. Az archiválatlan terjesztés tartalmazni fogja bin, conf, például licencek és lib mappába.

Ezt követően le kell töltenünk a beépített csatlakozókat. Ezeket most külön csomagként szállítják:

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

Távolítsuk el a csatlakozók archiválását, és másoljuk a Csatlakozók mappát a Pulsar mappában.

4.2. Példány indítása

Önálló példány indításához végrehajthatjuk:

bin / pulsar önálló

5. Java kliens

Most létrehozunk egy Java projektet az üzenetek előállításához és felhasználásához. Készítünk példákat a különböző előfizetési típusokra is.

5.1. A projekt beállítása

Kezdjük azzal, hogy hozzáadjuk a pulsar-kliens függőséget a projektünkhöz:

 org.apache.pulsar pulsar-kliens 2.1.1-inkubálás 

5.2. Termelő

Folytassuk a Termelő példa. Itt létrehozunk egy témát és egy producert.

Először létre kell hoznunk a PulsarClient amely kapcsolódni fog egy Pulsar szolgáltatáshoz egy adott állomáson és porton, saját protokollját használva. Számos gyártó és fogyasztó oszthat meg egyetlen kliens objektumot.

Most létrehozunk egy Termelő a konkrét téma nevével:

privát statikus végső karakterlánc SERVICE_URL = "pulsar: // localhost: 6650"; privát statikus végleges karakterlánc TOPIC_NAME = "teszt-téma"; 
PulsarClient kliens = PulsarClient.builder () .serviceUrl (SERVICE_URL) .build (); Producer producer = client.newProducer () .topic (TOPIC_NAME) .compressionType (CompressionType.LZ4) .create ();

A producer 5 üzenetet küld:

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. Fogyasztó

Ezután létrehozzuk a fogyasztót, hogy megszerezzük a gyártó által létrehozott üzeneteket. A fogyasztó is ugyanezt követeli PulsarClient kapcsolatba lépni a szerverünkkel:

Fogyasztói fogyasztó = client.newConsumer () .topic (TOPIC_NAME) .subscriptionType (SubscriptionType.Shared) .subscriptionName (SUBSCRIPTION_NAME) .subscribe (); 

Itt hoztuk létre a klienst a Megosztva előfizetés típusa. Ez lehetővé teszi, hogy több fogyasztó csatlakozzon ugyanahhoz az előfizetéshez, és üzeneteket kapjon.

5.4. Előfizetési típusok a fogyasztók számára

A fogyasztó fenti példájában előfizetéssel hoztunk létre megosztva típus. Alkothatunk is kizárólagos és feladatátvétel előfizetéseket.

A kizárólagos az előfizetés csak egy fogyasztó előfizetését teszi lehetővé.

Viszont egy failover előfizetés lehetővé teszi a felhasználó számára, hogy meghatározza a tartalék fogyasztót, ha egy fogyasztó megbukik, ahogy ez az Apache diagram mutatja:

6. Következtetés

Ebben a cikkben kiemeltük a Pulsar üzenetküldő rendszer olyan jellemzőit, mint az üzenetküldési modell, a georeplikáció és az erős tartóssági garanciák.

Megtanultuk egy csomópont felállítását és a Java kliens használatát is.

Mint mindig, ennek az oktatóanyagnak a teljes megvalósítása megtalálható a Github oldalon.