A vezető üzenetküldő platformok összehasonlítása

Az Apache Kafka és a RabbitMQ két széles körben használt üzenetküldő közvetítő, amelyek lehetővé teszik az alkalmazások közötti üzenetváltás szétválasztását. Mik a legfontosabb jellemzőik, és miben különböznek egymástól? Térjünk rá a fogalmakra.

RabbitMQ

A RabbitMQ egy nyílt forráskódú üzenetközvetítő alkalmazás a felek közötti kommunikációhoz és üzenetváltáshoz. Mivel Erlangban fejlesztették ki, nagyon könnyű és hatékony. Az Erlang nyelvet Ericson fejlesztette ki az elosztott rendszerekre összpontosítva.

Hagyományosabb üzenetküldő brókernek számít. A kiadó-előfizető mintán alapul, bár a kommunikációt szinkron vagy aszinkron módon is kezelheti, attól függően, hogy mi van a konfigurációban. Biztosítja az üzenetek kézbesítését és megrendelését is a termelők és a fogyasztók között.

Támogatja az AMQP, STOMP, MQTT, HTTP és web socket protokollokat. Három modell az üzenetváltáshoz: téma, fanout és közvetlen:

  • Közvetlen és egyéni csere téma vagy téma szerint [topic]
  • A sorba kapcsolt összes fogyasztó megkapja a [fanout] üzenet
  • Minden fogyasztó kap egy üzenetet [direct]

A RabbitMQ összetevői a következők:

Producerek

A producerek olyan alkalmazások, amelyek üzeneteket hoznak létre és küldenek a RabbitMQ-nak. Bármely alkalmazás lehet, amely képes csatlakozni a RabbitMQ-hoz és üzeneteket közzétenni.

Fogyasztók

A fogyasztók olyan alkalmazások, amelyek fogadják és feldolgozzák a RabbitMQ üzeneteit. Bármely alkalmazás lehet, amely képes csatlakozni a RabbitMQ-hoz és feliratkozni az üzenetekre.

Cserék

A központok felelősek a termelőktől érkező üzenetek fogadásáért és a megfelelő sorokba irányításáért. A cseréknek többféle típusa létezik, beleértve a közvetlen, fanout, téma- és fejléccseréket, amelyek mindegyike saját útválasztási szabályokkal rendelkezik.

Sorok

A sorok azok, ahol az üzeneteket tárolják, amíg a fogyasztók el nem fogyasztják azokat. Alkalmazások vagy automatikusan a RabbitMQ hozza létre őket, amikor egy üzenetet közzétesznek egy központban.

Kötések

A kötések határozzák meg a cserék és a sorok közötti kapcsolatot. Meghatározzák az üzenetek útválasztási szabályait, amelyeket az Exchange-ek arra használnak, hogy az üzeneteket a megfelelő sorokba irányítsák.

A RabbitMQ felépítése

A RabbitMQ lekérési modellt használ az üzenetek kézbesítéséhez. Ebben a modellben a fogyasztók aktívan kérik a bróker üzeneteit. Az üzeneteket az üzenetek megfelelő sorokba irányításáért felelős központoknak teszik közzé az útválasztási kulcsok alapján.

A RabbitMQ architektúrája a kliens-szerver architektúrán alapul, és több összetevőből áll, amelyek együttműködve megbízható és méretezhető üzenetküldési platformot biztosítanak. Az AMQP koncepció biztosítja az Exchanges, Queues, Bindings, valamint a Publishers és Subscribers összetevőket. A kiadók üzeneteket tesznek közzé a Exchange-eknek.

Az Exchange-ek veszik ezeket az üzeneteket, és bizonyos szabályok (kötések) alapján 0–n sorba osztják ki. A sorokban tárolt üzeneteket ezután a fogyasztók visszakereshetik. Egyszerűsített formában az üzenetkezelés a RabbitMQ-ban a következőképpen történik:

Kép forrása: VMware

  • A kiadók üzeneteket küldenek cserére;
  • Az Exchange üzeneteket küld a soroknak és más központoknak;
  • Amikor üzenet érkezik, a RabbitMQ visszaigazolást küld a feladóknak;
  • A fogyasztók állandó TCP-kapcsolatokat tartanak fenn a RabbitMQ-val, és deklarálják, hogy melyik sort fogadják;
  • A RabbitMQ az üzeneteket a fogyasztókhoz irányítja;
  • A fogyasztók siker- vagy hibavisszaigazolást küldenek az üzenet kézhezvételéről;
  • Sikeres beérkezés esetén az üzenet törlődik a sorból.
  Mi a kompozíció a fotózásban?

Apache Kafka

Az Apache Kafka egy elosztott, nyílt forráskódú üzenetküldő megoldás, amelyet a LinkedIn fejlesztett ki a Scalában. Képes az üzenetek feldolgozására és tárolására egy kiadó-előfizető modellel, magas skálázhatósággal és teljesítménnyel.

A fogadott események vagy üzenetek tárolásához partíciók segítségével ossza el a témákat a csomópontok között. Egyesíti a kiadó-előfizető és az üzenetsor mintákat, és felelős az üzenetek sorrendjének biztosításáért minden fogyasztó számára.

A Kafka nagy adatátviteli sebességre és alacsony késleltetésre specializálódott a valós idejű adatfolyamok kezelésére. Ez úgy érhető el, hogy elkerüljük a túl sok logikát a szerver (bróker) oldalon, valamint néhány speciális megvalósítási részletet.

Például a Kafka egyáltalán nem használ RAM-ot, és azonnal kiírja az adatokat a szerver fájlrendszerébe. Mivel az összes adatot szekvenciálisan írják, olvasási-írási teljesítmény érhető el, ami összehasonlítható a RAM-éval.

Ezek a Kafka főbb koncepciói, amelyek méretezhetővé, teljesítővé és hibatűrővé teszik:

Téma

A téma az üzenet címkézésének vagy kategorizálásának módja; képzelj el egy 10 fiókos szekrényt; minden fiók lehet téma, a szekrény pedig az Apache Kafka platform, így az üzenetek kategorizálása mellett a témával kapcsolatban egy másik jobb hasonlat kerülne terítékre a relációs adatbázisokban.

Termelő

A producer vagy producer az, aki csatlakozik egy üzenetküldő platformhoz, és egy vagy több üzenetet küld egy adott témában.

Fogyasztó

A fogyasztó az a személy, aki csatlakozik egy üzenetküldő platformhoz, és egy vagy több üzenetet fogyaszt egy adott témában.

Bróker

A bróker fogalma a Kafka platformon nem más, mint gyakorlatilag maga Kafka, és ő az, aki kezeli a témákat, meghatározza az üzenetek, naplók stb. tárolásának módját.

Fürt

A fürt olyan közvetítők halmaza, amelyek kommunikálnak egymással vagy nem a jobb méretezhetőség és hibatűrés érdekében.

Log fájl

Minden témakör napló formátumban, azaz strukturáltan és szekvenciálisan tárolja rekordjait; a naplófájl tehát az a fájl, amely egy témakör információit tartalmazza.

Partíciók

A partíciók a témán belüli üzenetek partíciós rétegei; ez a particionálás biztosítja az Apache Kafka rugalmasságát, hibatűrését és méretezhetőségét, így minden témakörnek több partíciója lehet különböző helyeken.

Apache Kafka építészete

A Kafka az üzenetküldés push modelljén alapul. Ezzel a modellel a Kafka üzenetei aktívan eljutnak a fogyasztókhoz. Az üzenetek olyan témákban kerülnek közzétételre, amelyek particionálva vannak, és a fürt különböző közvetítői között vannak elosztva.

A fogyasztók ezután előfizethetnek egy vagy több témára, és üzeneteket kaphatnak, ahogyan az adott témákról készülnek.

A Kafkában minden téma egy vagy több partícióra van felosztva. A partícióban végződnek az események.

Ha egynél több bróker van a fürtben, akkor a partíciók egyenletesen oszlanak el az összes bróker között (amennyire csak lehetséges), ami lehetővé teszi, hogy egy témában az írási és olvasási terhelés egyszerre több brókerre skálázható. Mivel ez egy fürt, a ZooKeeper segítségével fut a szinkronizáláshoz.

  MongoDB Sharding: Lépésről lépésre gyakorlati útmutató

Üzleteket fogad és iratokat terjeszt. A rekord valamilyen rendszercsomópont által generált adat, amely lehet esemény vagy információ. A rendszer elküldi a fürtnek, és a fürt egy témapartíción tárolja.

Minden rekordnak van sorozat-eltolása, és a fogyasztó szabályozhatja az általa fogyasztott eltolást. Így ha szükség van a téma újrafeldolgozására, azt az eltolás alapján meg lehet tenni.

Kép forrása: Wikipédia

A logika, mint például a fogyasztó utoljára olvasott üzenetazonosítójának kezelése vagy annak eldöntése, hogy az újonnan érkező adatok melyik partícióra kerüljenek kiírásra, teljes mértékben a kliensre (termelőre vagy fogyasztóra) hárul.

A termelő és fogyasztó fogalmakon kívül létezik a téma, a partíció és a replikáció fogalma is.

A témakör az üzenetek egy kategóriáját írja le. A Kafka úgy éri el a hibatűrést, hogy egy témakörben replikálja az adatokat, és a témát több szerver között particionálja a méretezéssel.

RabbitMQ vs. Kafka

Az Apache Kafka és a RabbitMQ közötti fő különbségek az ezekben a rendszerekben megvalósított, alapvetően eltérő üzenetküldési modellekből adódnak.

Az Apache Kafka különösen a húzás (pull) elvén működik, amikor a fogyasztók maguk kapják meg a témában szükséges üzeneteket.

A RabbitMQ viszont úgy valósítja meg a push modellt, hogy elküldi a szükséges üzeneteket a címzetteknek. Mint ilyen, a Kafka a következő módokon különbözik a RabbitMQ-tól:

#1. Építészet

Az egyik legnagyobb különbség a RabbitMQ és a Kafka között az architektúra különbsége. A RabbitMQ hagyományos közvetítő alapú üzenetsor-architektúrát, míg a Kafka elosztott streaming platform architektúrát használ.

Ezenkívül a RabbitMQ lehívásalapú üzenetkézbesítési modellt használ, míg a Kafka egy push-alapú modellt.

#2. Üzenetek mentése

A RabbitMQ behelyezi az üzenetet a FIFO sorba (First Input – First Output), és figyeli az üzenet állapotát a sorban, Kafka pedig hozzáadja az üzenetet a naplóhoz (lemezre ír), így a vevőnek kell gondoskodnia a szükséges adatok beszerzéséről. információk a témából.

A RabbitMQ törli az üzenetet, miután kézbesítette a címzetthez, míg a Kafka addig tárolja az üzenetet, amíg az ütemezésre nem kerül a napló törlésének.

Így a Kafka elmenti az aktuális és az összes korábbi rendszerállapotot, és a RabbitMQ-val ellentétben megbízható történelmi adatok forrásaként használható.

#3. Terhelés elosztás

Az üzenetkézbesítés pull modelljének köszönhetően a RabbitMQ csökkenti a késleltetést. Előfordulhat azonban, hogy a címzettek túlcsordulnak, ha az üzenetek gyorsabban érkeznek a sorba, mint ahogyan azokat feldolgozni tudják.

Mivel a RabbitMQ-ban minden vevő más-más számú üzenetet kér/tölt fel, a munka eloszlása ​​egyenetlenné válhat, ami késéseket és az üzenetsorrend elvesztését okozza a feldolgozás során.

Ennek megakadályozása érdekében minden RabbitMQ vevő konfigurál egy előzetes letöltési korlátot, amely korlátozza a felhalmozott nyugtázatlan üzenetek számát. A Kafkában a terheléselosztás automatikusan megtörténik a címzettek újraelosztásával a téma szakaszai (partíció) között.

#4. útvonalválasztás

A RabbitMQ négyféle módot kínál a különböző központokhoz való sorban álláshoz, lehetővé téve az üzenetküldési minták hatékony és rugalmas készletét. A Kafka csak egy módot valósít meg az üzenetek lemezre írására útválasztás nélkül.

#5. Üzenet rendelés

A RabbitMQ lehetővé teszi a relatív sorrend fenntartását az események tetszőleges halmazaiban (csoportjaiban), az Apache Kafka pedig egyszerű módot biztosít a skálázhatósággal rendelkező sorrend fenntartására azáltal, hogy egymás után üzeneteket ír egy replikált naplóba (témakör).

JellemzőRabbitMQKafka Architecture Üzeneteket ment a közvetítőhöz csatolt lemezre Elosztott streaming platform architektúraKézbesítési modell Húzás alapú Push alapú Mentés ÜzenetekNem tud menteni üzeneteket Témába írva fenntartja a rendeléseket Load Balancing Beállítja az üzenetek előletöltési korlátját az üzenetek karbantartásához Automatikusan végrehajtva ÚtválasztásCsak 4 módot tartalmaz a rendelési útvonalakhoz. a témáhozKülső folyamatokNem igényel Futtatást igényel a Zookeeper instancePluginsTöbb beépülő modul Korlátozott beépülő modul támogatása

  A Google Duo használata

A RabbitMQ és a Kafka egyaránt széles körben használt üzenetküldő rendszer, mindegyiknek megvannak a maga erősségei és használati esetei. A RabbitMQ egy rugalmas, megbízható és méretezhető üzenetküldő rendszer, amely kiválóan teljesít az üzenetsorban, így ideális választás a megbízható és rugalmas üzenetkézbesítést igénylő alkalmazások számára.

Másrészt a Kafka egy elosztott adatfolyam-platform, amelyet nagy mennyiségű adat nagy áteresztőképességű, valós idejű feldolgozására terveztek, így nagyszerű választás az adatok valós idejű feldolgozását és elemzését igénylő alkalmazások számára.

A RabbitMQ főbb használati esetei:

E-kereskedelem

A RabbitMQ-t e-kereskedelmi alkalmazásokban használják a különböző rendszerek közötti adatáramlás kezelésére, például készletkezelésre, rendelésfeldolgozásra és fizetési feldolgozásra. Nagy mennyiségű üzenetet tud kezelni, és biztosítja azok megbízható és megfelelő sorrendben történő kézbesítését.

Egészségügy

Az egészségügyi ágazatban a RabbitMQ-t különböző rendszerek, például elektronikus egészségügyi nyilvántartások (EHR), orvosi eszközök és klinikai döntéstámogató rendszerek közötti adatcserére használják. Segíthet javítani a betegellátást és csökkenteni a hibákat azáltal, hogy biztosítja a megfelelő információk megfelelő időben történő elérhetőségét.

Pénzügyi szolgáltatások

A RabbitMQ valós idejű üzenetküldést tesz lehetővé rendszerek, például kereskedési platformok, kockázatkezelési rendszerek és fizetési átjárók között. Segíthet biztosítani a tranzakciók gyors és biztonságos feldolgozását.

IoT rendszerek

A RabbitMQ-t az IoT-rendszerekben használják a különböző eszközök és érzékelők közötti adatáramlás kezelésére. Segíthet biztosítani az adatok biztonságos és hatékony továbbítását még korlátozott sávszélességű és időszakos csatlakozású környezetekben is.

A Kafka egy elosztott adatfolyam-platform, amelyet nagy mennyiségű adat valós idejű kezelésére terveztek.

A Kafka főbb használati esetei

Valós idejű elemzés

A Kafkát valós idejű elemző alkalmazásokban használják az adatok feldolgozására és elemzésére a keletkezésükkor, lehetővé téve a vállalkozások számára, hogy a naprakész információk alapján hozzanak döntéseket. Nagy mennyiségű adat kezelésére és méretarányos kezelésére képes, hogy még a legigényesebb alkalmazások igényeit is kielégítse.

Napló összesítés

A Kafka képes összesíteni a különböző rendszerek és alkalmazások naplóit, lehetővé téve a vállalkozások számára a valós idejű problémák figyelését és hibaelhárítását. Használható naplók tárolására is hosszú távú elemzésekhez és jelentésekhez.

Gépi tanulás

A Kafkát gépi tanulási alkalmazásokban használják adatok valós idejű streamelésére a modellekbe, lehetővé téve a vállalkozások számára, hogy előrejelzéseket készítsenek és intézkedjenek a naprakész információk alapján. Segíthet javítani a gépi tanulási modellek pontosságát és hatékonyságát.

Véleményem a RabbitMQ-ról és a Kafkáról is

A RabbitMQ széles és változatos, az üzenetsorok rugalmas kezelését lehetővé tevő képességeinek hátránya a megnövekedett erőforrás-felhasználás, és ennek megfelelően a teljesítmény romlása megnövekedett terhelés mellett. Mivel ez az összetett rendszerek működési módja, a legtöbb esetben az Apache Kafka a legjobb eszköz az üzenetek kezelésére.

Például több tucat rendszerből és szolgáltatásból származó események összegyűjtése és aggregálása esetén, figyelembe véve azok földrajzi lefoglalását, az ügyfélmutatókat, a naplófájlokat és az elemzéseket, az információforrások bővülésének kilátásaival, a Kafka használatát részesítem előnyben, azonban, ha olyan helyzetben van, amikor csak gyors üzenetküldésre van szüksége, a RabbitMQ remekül elvégzi a munkát!

Azt is elolvashatja, hogyan telepítheti az Apache Kafkát Windows és Linux rendszeren.