See ülevaade on veidi abstraktne, nii et läheme sellele reaalses stsenaariumis, kujutage ette, et peate jälgima mitut veebiserverit. Igaüks töötab oma veebisaidil ja iga päev sekundi jooksul luuakse neist pidevalt uusi logisid. Peale selle on mitmeid e-posti servereid, mida peate samuti jälgima.
Teil võib tekkida vajadus salvestada need andmed arvestuse pidamise ja arveldamise eesmärgil, mis on pakett, mis ei vaja kohe tähelepanu. Võiksite käivitada andmete analüüsi, et teha otsuseid reaalajas, mis nõuab andmete täpset ja viivitamatut sisestamist. Järsku leiad, et on vaja andmeid mõistlikult kõigi erinevate vajaduste jaoks sujuvamaks muuta. Kafka toimib selle abstraktsioonikihina, millele mitu allikat saavad avaldada erinevaid andmevooge ja antud tarbija saab tellida vooge, mida ta peab asjakohaseks. Kafka hoolitseb selle eest, et andmed oleksid korras. Just Kafka sisemusest peame aru saama, enne kui jõuame jaotuse ja võtmete teemani.
Kafka teemad, maakler ja vaheseinad
Kafka Teemad on nagu andmebaasi tabelid. Iga teema koosneb andmetest, mis pärinevad teatud tüüpi kindlast allikast. Näiteks võib teie klastri tervis olla teema, mis koosneb protsessori ja mälukasutuse teabest. Samamoodi võib teine teema olla sissetulev liiklus üle klastri.
Kafka on kavandatud horisontaalselt mastaapseks. See tähendab, et üks Kafka eksemplar koosneb mitmest Kafkast maaklerid töötab üle mitme sõlme, saab igaüks teisega paralleelselt käsitseda. Isegi kui mõned sõlmed ebaõnnestuvad, võivad teie andmesidetorud edasi töötada. Konkreetse teema saab seejärel jagada mitmeks vaheseinad. See jaotamine on üks Kafka horisontaalse skaleeritavuse tagamaid.
Mitmekordne tootjad, antud teema andmeallikad saavad sellele teemale üheaegselt kirjutada, sest kumbki kirjutab igal ajahetkel erinevasse partitsiooni. Nüüd määratakse andmed partitsioonile tavaliselt juhuslikult, kui me ei paku sellele võtit.
Jaotus ja tellimine
Lihtsalt kokkuvõtteks kirjutavad tootjad andmeid antud teema kohta. See teema on tegelikult jagatud mitmeks sektsiooniks. Ja iga partitsioon elab teistest sõltumatult, isegi antud teema jaoks. See võib põhjustada palju segadust, kui andmete tellimine on oluline. Võib-olla vajate oma andmeid kronoloogilises järjekorras, kuid andmevoo jaoks mitme partitsiooni olemasolu ei taga täiuslikku tellimist.
Teema kohta saate kasutada ainult ühte sektsiooni, kuid see rikub Kafka hajutatud arhitektuuri kogu eesmärgi. Seega vajame mõnda muud lahendust.
Vaheseinte võtmed
Tootja andmed saadetakse partitsioonidele juhuslikult, nagu me varem mainisime. Sõnumid on tegelikud andmepalad. Mida tootjad saavad peale sõnumite saatmise teha, on lisada sellega koos võti.
Kõik konkreetse võtmega kaasas olevad sõnumid lähevad samasse sektsiooni. Nii saab näiteks kasutaja tegevust kronoloogiliselt jälgida, kui selle kasutaja andmed on märgistatud võtmega ja nii jõuavad need alati ühte sektsiooni. Nimetagem seda sektsiooni p0 ja kasutajat u0.
Partitsioon p0 võtab u0-ga seotud sõnumid alati üles, kuna see võti seob need omavahel. Kuid see ei tähenda, et p0 oleks ainult sellega seotud. See võib ka u1 ja u2 sõnumeid vastu võtta, kui tal on selleks võimalusi. Samamoodi võivad teised sektsioonid tarbida andmeid teistelt kasutajatelt.
Punkt, et antud kasutaja andmed pole hajutatud eri sektsioonidesse, tagades selle kasutaja kronoloogilise järjestuse. Kuid üldine teema kasutaja andmed, saab endiselt kasutada Apache Kafka hajutatud arhitektuuri.
Järeldus
Kui hajusüsteemid, nagu Kafka, lahendavad mõned vanemad probleemid, nagu mastaapsuse puudumine või ühe ebaõnnestumispunkti olemasolu. Neil on probleemide kogum, mis on ainulaadne nende enda kujunduse jaoks. Nende probleemide ennetamine on iga süsteemiarhitekti oluline töö. Vähe sellest, mõnikord peate tõesti tegema tasuvusanalüüsi, et teha kindlaks, kas uued probleemid on väärt kompromiss vanematest vabanemiseks. Tellimine ja sünkroniseerimine on vaid jäämäe tipp.
Loodetavasti võivad sellised artiklid ja ametlik dokumentatsioon teid aidata.