kafka vs rabbitmq vs sqs

Tarbimine

Tarbijate poolelt ei suru Kafka tarbijatele sõnumeid. Selle asemel tõmbasid Kafka sõnumeid tarbijad. Tõhususe parandamiseks ei tõmmata sõnumeid ükshaaval, vaid (mini) partiidena (määrake max.poll.records = 1, et lugeda ühte sõnumit korraga) Üksikute sõnumite kinnitamine pole võimalik. Näit. iga paari sekundi järel küsib tarbija pärast teatavat nihutamist avaldatud teadete küsitlemist. Kafka tagastab vastavate teadete partii. Kui kõik sõnumid on töödeldud, kinnitab tarbija saadetise Kafkale ja partii tasaarveldamine toimub Kafkas ning järgmine küsitlusnõue tagastab järgmised sõnumid. Nüüd oletagem, et tarbija ebaõnnestub pakkide keskel (st mõned sõnumid on töödeldud ja mõned mitte). Kui tarbija taastub, algab see sama partii algusest, töödeldes juba töödeldud sõnumeid uuesti.

SQS-is tuleb teenus valikulise aegumisajaga sõnumite jaoks pollida. Kui ajalõppu ei täpsustata, siis küsitlust ei kulutata. Maksimaalne 20-sekundiline aegumine võimaldab kliendil enne ühenduse katkestamist küsitlust küsida ja oodata kuni 20 sekundit teadet.

RabbitMQ seevastu toetab ühenduste blokeerimist, võimaldades kliendil lihtsalt istuda ja oodata, kuni teade on saadaval ilma küsitluseta. Paljudel juhtudel on see sõnumijärjekordade tarbimiseks tavapärasem ja tuttavam lähenemisviis ning ühilduv muude sõnumsideraamistikega, näiteks selleriga. Lisaks saab RabbitMQ valikuliselt tarbida sõnumeid teemade alusel, pakkudes võimalust luua jõulisi sõnumitöötlusskeeme.

Teate kinnitus

Kafkat kasutatakse siis, kui soovite hallata ulatuslikke andmevooge tootja poolelt. See lahendus on erinevalt teistest tootjakesksem. Kafkas hoiab iga tarbija end juba tarbitud sõnumite nihkega. Rikke korral saab abonent seejärel töötlemist uuesti alustada sealt, kus ta pooleli jäi. Tasakaalu haldamine on samuti oluline kujundusotsus, kuna see mõjutab tarnegarantiid. Neid kompenseerimisi haldab loomaaias Kafka. (Alates v0.9 on see muutunud. Ülekanded salvestatakse nüüd maaklerites). Tarbijal on võimalus igal ajal teema soovitud nihkele kerida / tagasi liikuda ja lugeda kõiki järgnevaid teateid. Kui konkreetse nihkega teade on töödeldud, vastutab tarbija selle eest, kas kustutada kiri, märkides nihke tühjaks, või jätta see sinna hiljem tarbimiseks.

SQS kasutab teadete kinnitamiseks nähtavuse ajalõppu. Iga kord, kui klient hakkab järjekorrast teadet tarbima, käivitatakse kell. Kui kindel aeg on möödunud, pannakse teade automaatselt järjekorda, kui klient pole selle kustutanud. Ehkki see töötab teoreetiliselt, nõuab see kõigi teadete jaoks, mille kulutamine võib võtta palju aega, vajada täiendavat sammu: nähtavuse ajalõpu lähtestamine. See võib põhjustada sõnumi dubleerimist. See tagab “vähemalt ühe korra kättetoimetamise” erinevalt SQS FIFO järjekorrast, mis on AWSi “täpselt ühe korra kättetoimetamise” teadete vahendaja lahendus.

RabbitMQ-l on teate kinnitamise kaks režiimi: ack ja noack. Noacki kasutamisel võetakse sõnumid automaatselt vastu kohe, kui need on ära tarbitud. Kui tarbija ei suuda seda sõnumit tegelikult tarbida, siis seda järjekorda ei seata. Kui kasutatakse ack-i, peab klient kinnitama, et teade on tarbitud, vastasel juhul suunatakse see pärast töötaja lahtiühendamist automaatselt järjekorda. See tähendab, et töötaja, kes sõnumit ei tunnista, kuid on pikema aja jooksul ühenduses, hoiab ära sõnumi uuesti esitamise. See tagab ka vähemalt ühe korra kättetoimetamise.

Etendus

Kafka suudab säilitada sõnumi läbilaske kiirust 100k + msgs / sek, mis on oluliselt suurem kui enamikul teistel alternatiividel.

Amazon seab sõnumite sagedusele limiidi, mida saab soovi korral suurendada, ning võtab üldise sõnumimäära põhjal ka lisatasusid.

Kui sõnumikiirus on umbes 20k + msgs / sec, mis on palju väiksem kui Kafkal, on see enamikul kasutusjuhtudel piisav. Tänu platvormist sõltumatule raamistikule ja kasutusmugavusele on RabbitMQ väga küps sõnumimaakler, kes pakub kogukonna palju laiendatud tuge.

Maksumus

Apache Kafka nõuab raamistiku hostimist ja haldamist. See tähendab, et vastutate õigete arvutusressursside ja salvestusvõimaluste valimise, mahutavuse kavandamisse kaasamise ning rikete tuvastamise ja taastamise haldamise eest.

Amazon SQS-iga saate alustada tasuta. Kõik kliendid saavad iga kuu tasuta teha 1 miljon Amazon SQS-i taotlust. Mõni rakendus võib töötada selle tasuta astme piires.

Kui järjekord võtab RabbitMQ-s sõnumeid vastu kiiremini, kui see võib tarbijatele välja pumbata, siis lähevad asjad aeglasemaks. Järjekorra kasvades nõuab see rohkem mälu. Lisaks sellele, kui järjekorda võetakse trükiseid, siis peab järjekord kulutama aega nende väljaannetega tegelemiseks, mis võtab CPU-l aega olemasolevate sõnumite saatmiseks tarbijatele: miljoni sõnumi järjekorra saab tühjaks saata tarbijate jaoks palju kiiremini, kui ühtegi järjekorda saabuvat trükist poleks, kes seda tähelepanu tõmbaks. Mitte just raketiteadus, kuid tasub meeles pidada, et järjekorda saabuvad väljaanded võivad vähendada kiirust, millega järjekord oma tarbijaid ajab.

Sügavama sukeldumise jaoks saate lugeda järgmisi materjale

  • Kafka: https://amzn.to/2GAvfzg
  • RabbitMq: https://amzn.to/2ElgIWa
  • SQS: https://amzn.to/2GzcLzm

️Vaatame järgmine kord!