Kafka on LinkedIni poolt välja töötatud kõrge jõudlusega hajutatud sõnumisüsteem, mida kasutatakse laialdaselt sellistes olukordades nagu logide kogumine, voogedastuse andmete töötlemine, veebipõhine ja võrguühenduseta sõnumite jagamine ning palju muud. Kuigi see ei ole traditsioonilise MQ-na, võib Kafaka enamasti asendada traditsioonilisi sõnumisüsteeme, nagu ActiveMQ.
Kafka korraldab sõnumite voogu teemade kaupa ning serverit, mis sõnumeid hoiab, nimetatakse maakleriks ning tarbijad saavad tellida ühe või mitme teema. Koormuse tasakaalustamiseks saab teema sõnumid jagada mitmeks partitsiooniks ning mida rohkem partitsioone, seda suurem on Kafka paralleelsus ja läbilaskevõime.
Kafka klastrid vajavad klastrite rakendamiseks zookeeperi tuge ning zookeeper on juba kaasatud uusimasse Kafka distributsiooni, mida saab juurutada nii zookeeperi serveri kui ka Kafka serveri käivitamiseks samaaegselt või kasutada teisi olemasolevaid zookeeperi klastriid.
Erinevalt traditsioonilisest MQ-st peavad tarbijad hoidma offset'i ise ning kafka sõnumite saamisel tõmbavad nad sõnumeid alles pärast praegust nihket. Kafka Scala/Java klient rakendab selle loogika osa juba, salvestades nihke loomaaiahoidjale. Iga tarbija saab valida ID ning sama ID-ga tarbijad saavad sama sõnumi vaid korra.Kui kõik ühe teema kasutajad kasutavad sama id-d, on tegemist traditsioonilise järjekorraga. Kui iga tarbija kasutab erinevat ID-d, on see traditsiooniline pubi-sub.
Läbivaatamine:
Kafka tarbimine
1. Sama group_id tarbijad, ainult üks tarbija võib sõnumeid tarbida (Järjekorra režiim)
2. Erinevate group_id tarbijad saavad sama uudise
Kafka eelised
Hajutatud ja väga skaleeritav. Kafka klastreid saab läbipaistvalt skaleerida, et lisada klastrisse uusi servereid.
Kõrge jõudlusega. Kafka jõudlus ületab oluliselt traditsiooniliste MQ rakenduste, nagu ActiveMQ ja RabbitMQ, eriti Kafka, mis toetab samuti partiioperatsioone. Järgmine pilt näitab LinkedIni tarbijate soorituse stressitesti tulemusi:
Veakindlus. Iga Kafka partitsiooni andmed replitseeritakse mitmele serverile. Kui maakler ebaõnnestub, teavitab ZooKeeper teenus tootjat ja tarbijat, kes vahetavad maakleri vastu.
Kafka puudused:
Korda sõnumeid. Kafka garanteerib, et iga sõnum toimetatakse vähemalt korra, ja kuigi tõenäosus on väike, on võimalus, et sõnum toimetatakse mitu korda. Uudised on katki. Kuigi partitsiooni sees olevad sõnumid on garanteeritult korras, ei ole sõnumite edastamine partitsioonide vahel garanteeritud, kui teemal on mitu partitsiooni. Keerukus. Kafka vajab loomaaiahoidjate klastrite tuge ning teemad vajavad tavaliselt käsitsi tööd, et luua, juurutada ja hooldada, mis on kallim kui üldised sõnumijärjekorrad
.NET/C# sõnumijärjekorra Kafka operatsioonid
Esiteks kasuta .NET Core 3.1, et luua kaks uut konsooliprojekti, nimelt Kafka-Consumer ja Kafka-Producer
Kasuta nuget'i, et viidata Confluent.Kafka paketile nii, järgmise käsuga:
GitHubi aadress:Hüperlingi sisselogimine on nähtav.
Alustame esmalt Tootja programmi, ja kui alustame tarbijat, saame järgmise vea:
Viga tekkis: Maakler: Tundmatu teema või partitsioon See artikkel kasutab seadeidEnableAutoOffsetStore on vale, see tähendab nihkesalvestuse käsitsi seadistamist (sarnane käsitsi kinnitussõnumile)
Tarbijad ei sea OffsetStore'i pärast tarbimist
Proovi kasutada tootjat, et toota kaks sõnumit, lülita tarbija tarbimine sisse, MaxPollIntervalMs = 10000 // 10 sekundit ilma käsitsi seadistamata, lase teistel klientidel tarbida, loomulikult ei tarbita teised kliendid seda 10 sekundi jooksul
MaxPollIntervalMs selgitab
Edasijõudnute tarbijate jaoks võimaldas maksimaalne aeg sõnumite tarbimiseks kõnede vahel (näiteks rd_kafka_consumer_poll()). Kui see intervall ületatakse, loetakse tarbija ebaõnnestunuks ja grupp tasakaalustatakse nii, et partitsioon määratakse teisele tarbijagrupi liikmele. Hoiatus: Offset-commitid ei pruugi praegu olla võimalikud. Märkus: Soovitatav on seada "enable.auto.offset.store=false" rakendustele, mis on pikka aega töötlemisel, ning seejärel salvestada nihe (kasutades offsets_store()) pärast sõnumi töötlemist*, et tagada nihke automaatse kinnitamise puudumine enne töötlemise lõppu. Kontrolli kord sekundis kahe kaupa. Lisateabe saamiseks vaata KIP-62. Renderdused on järgmised:
OffsetStore seadistatakse pärast tarbija kulutamist
kood
Kui seadistamine on tehtud, oota 10 sekundit ja see töötab ikkaSain viimase sõnumi kätte(Kui tarbija ühendub maakleriga,Alusta tarbimist nihutatud asendistKui c.Commit(cr) on seatud; Viimast sõnumit ei jõuta korduvalt vastu.
Vaata lähtekoodi
commit offset + 1 commit ja lõpuks kutsuda Librdkafka.topic_partition_list_destroy(cOffsets);
Hüperlingi sisselogimine on nähtav.
Hüperlingi sisselogimine on nähtav.
Sea teine GroupId
Proovi määrata teine GroupId käsurea parameetri kaudu ja seejärel saata sõnum tootja kaudu, nagu näidatud järgmisel pildil:
Nii clinet1 kui client2Ajalooliste sõnumite vastuvõtmine, ja pärast seda, kui produtsent on sõnumi saatnud, on mõlemad peaaeguSõnumite vastuvõtmine samaaegselt。
Uued tarbijad saavad ainult uusi sõnumeid
Kuidas panna uus klient saama ainult uusi sõnumeid ja ignoreerima ajaloolisi andmeid?
Seaded on järgmised:
Nagu allpool näidatud:
Tootjakood
Järgmiselt:
Tarbijakood
Järgmiselt:
Lähtekoodi allalaadimine
Turistid, kui soovite näha selle postituse peidetud sisu, palun Vastuse
|