Selles õppetükis näeme, mis on Apache Kafka ja kuidas see töötab koos oma kõige levinumate kasutusjuhtumitega. Apache Kafka töötati algselt välja LinkedInis 2010. aastal ja kolis 2012. aastal tipptasemel Apache projektiks. Sellel on kolm põhikomponenti:
- Kirjastaja-tellija: See komponent vastutab andmete tõhusa haldamise ja edastamise eest kõigis Kafka sõlmedes ja palju skaleerivates tarbijarakendustes (nagu sõna otseses mõttes).
- Ühenda API: Connect API on Kafka jaoks kõige kasulikum funktsioon ja võimaldab Kafka integreerida paljude väliste andmeallikate ja andmeallikatega.
- Kafka ojad: Kafka voogude abil võime kaaluda sissetulevate andmete ulatuslikku töötlemist peaaegu reaalajas.
Uurime järgmistes osades palju rohkem Kafka kontseptsioone. Liigume edasi.
Apache Kafka mõisted
Enne süvenemist peame Apache Kafka mõisteid põhjalikult käsitlema. Siin on terminid, mida peaksime väga lühidalt teadma:
-
- Produtsent: See on rakendus, mis saadab sõnumi Kafkale
- Tarbija: See on rakendus, mis tarbib Kafka andmeid
- Sõnum: Andmed, mille Produceri rakendus saadab Kafka kaudu tarbijarakendusse
- Ühendus: Kafka loob TCP-ühenduse Kafka klastri ja rakenduste vahel
- Teema: Teema on kategooria, kellele saadetud andmed märgistatakse ja edastatakse huvitatud tarbijarakendustele
- Teema partitsioon: Kuna üks teema võib korraga saada palju andmeid, on Kafka horisontaalselt skaleeritava hoidmiseks jagatud kõik teemad partitsioonideks ja iga sektsioon võib elada klastri mis tahes sõlmpunktis. Proovime seda esitada:
Teema vaheseinad
- Koopiad: Nagu me eespool uurisime, et teema on jagatud partitsioonideks, kopeeritakse iga sõnumikirje klastri mitmele sõlmele, et säilitada iga kirje järjekord ja andmed juhul, kui üks sõlm sureb.
- Tarbijarühmad: Mitut tarbijat, kes on huvitatud samast teemast, saab hoida grupis, mida nimetatakse tarbijarühmaks
- Nihe: Kafka on skaleeritav, kuna tarbijad salvestavad tegelikult selle, millise sõnumi nad viimati saidi nihkeväärtusena. See tähendab, et sama teema puhul võib tarbija A nihke väärtus olla 5, mis tähendab, et ta peab järgmisena töötlema kuuenda paketi ja tarbija B puhul võiks nihke väärtus olla 7, mis tähendab, et ta peab järgmisena töötlema kaheksanda paketi. See eemaldas täielikult iga tarbijaga seotud metaandmete salvestamise sõltuvuse teemast endast.
- Sõlm: Sõlm on üks server masin Apache Kafka klastris.
- Kobar: Klaster on rühm sõlme i.e., serverite rühm.
Teema, teema vaheseinte ja nihke kontseptsiooni saab selgeks teha ka illustreeriva joonisega:
Teema partitsioon ja tarbija tasaarvestus Apache Kafkas
Apache Kafka avaldamise-tellimise sõnumsüsteemina
Kafkaga avaldavad Produceri rakendused sõnumeid, mis saabuvad Kafka sõlme, mitte otse tarbijale. Selle Kafka sõlme kaudu tarbivad sõnumeid tarbijarakendused.
Kafka tootja ja tarbija
Kuna üks teema võib korraga saada palju andmeid, on Kafka horisontaalselt skaleeritavuse hoidmiseks jagatud vaheseinad ja iga sektsioon võib elada klastri mis tahes sõlmpunktis.
Kafka maakler jällegi ei pea arvestust selle kohta, milline tarbija on tarbinud mitu andmepaketti. See on tarbijate kohustus jälgida tarbitud andmeid. Kuna Kafka ei jälgi iga tarbijarakenduse kinnitusi ja sõnumeid, saab see hallata palju rohkem tarbijaid, millel on tühise mõju läbilaskvusele. Tootmises järgivad paljud rakendused isegi partiitarbijate mustrit, mis tähendab, et tarbija tarbib kõik järjekorras olevad sõnumid korrapärase ajavahemiku järel.
Paigaldamine
Apache Kafka kasutamise alustamiseks peab see olema arvutisse installitud. Selleks lugege artiklit Apache Kafka installimine Ubuntu.
Kasutusjuhtum: Veebisaidi kasutamise jälgimine
Kafka on suurepärane vahend, mida kasutada, kui peame veebisaidil tegevust jälgima. Jälgimisandmed hõlmavad lehevaatamisi, otsinguid, üleslaadimisi või muid toiminguid, mida kasutajad võivad teha. Kui kasutaja on veebisaidil, võib kasutaja veebisaidil surfates teha mis tahes arvu toiminguid.
Näiteks kui uus kasutaja registreerib end veebisaidil, võidakse tegevust jälgida, millises järjekorras uurib uus kasutaja veebisaidi funktsioone, kui kasutaja määrab oma profiili vastavalt vajadusele või eelistab otse hüpata veebisaidil. Alati, kui kasutaja nuppu klõpsab, kogutakse selle nupu metaandmed andmepaketti ja saadetakse Kafka klastrisse, kust rakenduse analüüsiteenus saab neid andmeid koguda ja seonduvate andmete kohta kasulikke teadmisi luua. Kui soovime jaotada ülesanded sammudeks, näeb protsess välja järgmine:
- Kasutaja registreerib end veebisaidil ja siseneb armatuurlauale. Kasutaja proovib nupule suheldes funktsioonile kohe juurde pääseda.
- Veebirakendus koostab selle metaandmetega teate teema „klõps” teemajaotise kohta.
- Sõnum lisatakse kohustuste logile ja tasaarveldust suurendatakse
- Tarbija saab nüüd Kafka maaklerilt sõnumi tõmmata, näidata veebisaidi kasutamist reaalajas ja näidata varasemaid andmeid, kui see lähtestab võimaliku varasema väärtuse
Kasutusjuht: sõnumijärjekord
Apache Kafka on suurepärane tööriist, mis võib asendada sõnumivahendaja tööriistu nagu RabbitMQ. Asünkroonne sõnumside aitab lahutada rakendusi ja loob väga skaleeritava süsteemi.
Täpselt nagu mikroteenuste kontseptsioon, saame ühe suure rakenduse ehitamise asemel jagada rakenduse mitmeks osaks ja igal osal on väga konkreetne vastutus. Nii saab erinevaid osi kirjutada ka täiesti iseseisvates programmeerimiskeeltes! Kafkal on sisseehitatud partitsiooni-, paljundus- ja tõrketaluvussüsteem, mis muudab selle suuremahuliseks sõnumivahendussüsteemiks.
Hiljuti nähakse Kafkat ka väga hea logikogumislahendusena, mis suudab hallata logifailide kogumise serveri maaklerit ja pakkuda neid faile kesksüsteemi. Kafka abil on võimalik genereerida mis tahes sündmus, millest soovite teada oma rakenduse mis tahes muud osa.
Kafka kasutamine LinkedInis
Huvitav on märkida, et Apache Kafkat nähti varem ja seda kasutati viisina, mille kaudu andmesidetorustikke saaks ühtlustada ja mille kaudu andmeid Hadoopi sisestati. Kafka töötas suurepäraselt, kui kohal oli mitu andmeallikat ja sihtkohta ning iga allika ja sihtkoha kombinatsiooni jaoks eraldi torujuhtme protsessi pakkumine ei olnud võimalik. LinkedIni Kafka arhitekt Jay Kreps kirjeldab seda tuttavat probleemi blogipostituses hästi:
Minu enda osalemine selles algas umbes 2008. aastal pärast seda, kui olime oma põhiväärtusega kaupluse tarninud. Minu järgmine projekt oli proovida Hadoopi toimiv seadistamine käivitada ja mõned meie soovitusprotsessid sinna viia. Kuna meil on selles valdkonnas vähe kogemusi, planeerisime loomulikult paar nädalat andmete sisestamiseks ja väljavõtmiseks ning ülejäänud aja uhkete ennustusalgoritmide rakendamiseks. Nii algas pikk loosung.
Apache Kafka ja Flume
Kui te lähete välja nende kahe funktsiooni põhjal võrdlemiseks, leiate palju ühiseid jooni. Siin on mõned neist:
- Kafkat on soovitatav kasutada siis, kui teil on mitu rakendust, mis tarbivad andmeid, mitte spetsiaalselt Hadoopiga integreerimiseks loodud Flume'i asemel, mida saab kasutada ainult HDFS-i ja HBase'i andmete sisestamiseks. Flume on optimeeritud HDFS-i toiminguteks.
- Kafka puhul on negatiivne külg tootjate ja tarbijarakenduste kodeerimine, samas kui Flume'is on sellel palju sisseehitatud allikaid ja valamuid. See tähendab, et kui olemasolevad vajadused vastavad Flume'i funktsioonidele, soovitatakse teil aja säästmiseks kasutada Flume'i ennast.
- Flume suudab pealtkuulajate abil andmeid lennu ajal tarbida. See võib olla oluline andmete varjamiseks ja filtreerimiseks, samas kui Kafka vajab välist voo töötlussüsteemi.
- Kui peame HDFS-i ja HBase'i andmeid sisestama, on Kafkal võimalik kasutada Flume'i tarbijana. See tähendab, et Kafka ja Flume integreeruvad tõesti hästi.
- Kakfa ja Flume suudavad tagada õige konfiguratsiooniga andmete kaotamise nullis, mida on samuti lihtne saavutada. Siiski ei korrata Flume sündmusi, mis tähendab, et kui üks Flume'i sõlmedest ebaõnnestub, kaotame juurdepääsu sündmusele kuni ketta taastamiseni
Järeldus
Selles tunnis vaatasime palju Apache Kafka kohta käivaid mõisteid. Loe rohkem Kafka-põhiseid postitusi siit.