Kuidas kasutada Apache Kafkat pakettorustiku muutmiseks reaalajas

Selles blogis selgitan põhjalikult, kuidas luua reaalajas andmesidetorustik otsast lõpuni, ehitades Apache Kafka peale neli mikroteenust. See annab teile ülevaate Kafka Producer API-st, Avro ja Confluent Schema registrist, Kafka Streams kõrgetasemelisest DSL-ist ja Kafka Connect valamutest.

Kui teil on vaja tänavat ületada, kas teeksite seda viis minutit vana teabega?

Väljakutse me lahendame

Lisaks tavalisele tööle voogesituse konsultandina, olen ka veebipõhine juhendaja Udemy veebikursuste turul. Õpetan tehnoloogiaid, mida ma armastan, näiteks Apache Kafka algajatele, Kafka Connect, Kafka ojad, Kafka seadistamine ja administreerimine, Confluent Schema Registry & REST Proxy, Apache Kafka Security ja Kafka Monitoring & Operations, Confluent KSQL.

Udemy kohta ülevaatuse viip

Udemy lehel on õpilastel võimalus postitada arvustusi nende kursuste kohta, mida nad osalevad, et juhendajale ja teise platvormi kasutajatele tagasisidet anda.

Kuid neid ülevaateid antakse üldsusele välja iga 24 tunni tagant! Ma tean seda, sest iga päev kell 9.00 PST saab mulle partii uusi ülevaateid.

Kursuse lehe värskendamine uue arvustuste ja keskmise hindega võib võtta veel paar tundi. Kõlab nagu igapäevane plaanitud partii töö kuskil jookseks!

Apache Kafka algajatele mõeldud statistika statistika ekraanipilt

Selles blogis näitan teile, kuidas muuta see pakettorustik Apache Kafka abil reaalajas reaalajaks, ehitades paar mikroteenust.

Kogu lähtekood on saadaval siin: https://github.com/simplesteph/medium-blog-kafka-udemy

Ja laiskade jaoks võite näha mind jooksmas kogu selle video koodi:

Erutatud? Alustame!

Mis on Apache Kafka?

Apache Kafka on hajutatud voogesituse platvorm. Oma olemuselt võimaldab see andmeid genereerivatel süsteemidel (nn tootjad) säilitada oma andmeid reaalajas Apache Kafka teemas. Seejärel saab suvalist teemat lugeda ükskõik milline süsteem, kes vajab neid andmeid reaalajas (nimetatakse tarbijaks). Seetõttu on Kafka tuumik Pub / Sub süsteem. Kulisside taga levitatakse Kafkat, ta skaleerib hästi, kopeerib andmeid maaklerite (serverite) kaudu, suudab maaklerite seisakuid üle elada ja palju muud.

Pubi / alamsüsteemi tüüpiline esitus

Apache Kafka sai alguse LinkedInis ja avati hiljem, et saada Apache'i tipptasemel projektiks. Nüüd võimendavad seda mõned suured ettevõtted, näiteks Uber, Airbnb, Netflix, Yahoo, Udemy ja enam kui 35% Fortune 500 ettevõtetest.

See ajaveeb on mõnevõrra arenenud ja kui soovite enne edasist lugemist Kafkast paremini aru saada, vaadake Apache Kafkat algajatele.

Pakkumiste töötlemise ülevaated

Enne otsehüppamist on väga oluline kaardistada praegune protsess ja vaadata, kuidas saaksime iga komponenti paremaks muuta. Allpool on minu isiklikud eeldused:

  • Kui kasutaja kirjutab arvustuse, postitatakse see veebiteenusele (REST Endpoint), mis talletab selle ülevaate mingisse andmebaasi tabelisse
  • Iga 24 tunni tagant võtab pakktöö (võib olla Spark) kõik uued arvustused ja rakendab rämpsposti filtri, et filtreerida petlikud arvustused õigustatud reklaamidelt.
  • Uued kehtivad arvustused avaldatakse teises andmebaasi tabelis (mis sisaldab kõiki ajaloolisi kehtivaid ülevaateid).
  • Teine pakkimistöö või SQL-päring arvutab kursuste jaoks uue statistika. Statistika sisaldab kõigi aegade keskmist hinnangut, kõigi arvustuste koguarvu, 90 päeva keskmist hinnangut ja 90 päeva arvustust.
  • Veebisait kuvab neid mõõdikuid REST API kaudu, kui kasutaja veebisaidil navigeerib.
Personaalsed eeldused praeguse torujuhtme kohta. Tundub tuttav?

Vaatame, kuidas saaksime Apache Kafka abil muuta selle pakettorustiku skaleeritavaks, reaalajas ja hajutatud torustikuks.

Sihtarhitektuur

Reaalajas torujuhtme ehitamisel peate mõtlema mikroteenustele. Mikroteenused on väikesed komponendid, mis on loodud ühe ülesande väga heaks täitmiseks. Nad suhtlevad üksteisega, kuid mitte otseselt. Selle asemel suhtlevad nad kaudselt, kasutades vahendajat, meie puhul Kafka teemat. Seetõttu on kahe mikroteenuse vahel sõlmitud leping andmed ise. Seda lepingut täidetakse skeemide abil (sellest lähemalt hiljem)

Viisakas meeldetuletus
Kahe mikroteenuse vaheline leping on andmed ise

Kokkuvõtteks võib öelda, et meie ainus ülesanne on andmete modelleerimine, kuna andmed on kuningad.

Pange tähele, et kõik selle ajaveebi mikroteenused on lihtsalt tavalised Java-rakendused, kerged, kaasaskantavad ja saate neid hõlpsalt Dockeri konteineritesse panna (see on terav kontrast, öeldes ... Spark). Siin on mikroteenused, mida me vajame:

  1. Ülevaade Kafka tootjast: kui kasutaja postitab arvustuse REST Endpoint, peaks see jõudma kohe Kafkasse.
  2. Pettuste tuvastaja Kafka voogesitused: me saame arvustuste voo. Peame saama reaalajas masinõppe abil need ülevaated pettuste jaoks skoori anda ja need kas valideerida või pettuseks märgistada.
  3. Arvustuste koondaja Kafka ojad: nüüd, kui meil on kehtivate arvustuste voog, peaksime need koondama kas alates kursuse käivitamisest või võttes arvesse ainult viimase 90 päeva arvustusi.
  4. Vaadake üle Kafka Connect Sink: meil on nüüd kursuste statistika värskenduste voog. Peame need PostgreSQL-i andmebaasi uputama, et teised veebiteenused saaksid neid üles korjata ja kasutajatele ning juhendajatele näidata.
Meie reaalajas torujuhtme sihtarhitektuur. Iga värv on mikroteenus

Nüüd saame selge ülevaate oma otsest reaalajas kasutatavast torustikust ja tundub, et meil on veel palju tööd ees. Alustame!

1) Arvustused Kafka produtsent

Arvustuste andmete saamiseks kasutan välist REST API Udemy pakutavat kursuse olemasolevate ja avaldatud arvustuste loendit.

Producer API aitab teil andmeid Apache Kafkasse toota. See võtab objekti koos Serializeriga (klass, mis võimaldab teil oma objekte töötlemata baitides teisendada) ja saadab selle üle.

Siin on meil rakendamiseks kaks sammu:

  1. Udemy REST API abil saate luua viisi suvaliste kursuste arvustuste hankimiseks
  2. Modelleerige need ülevaated kenaks Avro-objektiks ja saatke need Kafkasse.
Tüüpiline Kafka produtsent

Tootja lähtekoodi leiate siit.

Udemy arvustuste toomine

Arvustuste saamine on tegelikult lihtne. REST API kohta saate teada siit. Peame alles välja selgitama, mitu arvustust kursusel kokku on, ja helistame siis korduvalt REST API-le viimaselt lehelt esimesele. Lisame arvustused java järjekorda.

Arvamuste saatmine Kafkale

Arvustuste saatmine Kafkale on sama lihtne kui Kafka tootja loomine ja konfigureerimine:

Ja siis koos sellega andmete tootmine:

Lihtne, eks? Siduge see mõne niidi, mõne konfiguratsiooniga, JSON-dokumentide parsimisel Avro objekti loomiseks, sulgemiskonksudega ja saite endale kindla vaevaga produtsendi!

Avro ja skeemiregister

Kuule! (sa võid öelda). Mis on teie ülevaateobjekt?

Hea küsimus. Kui olete Kafka Producer'i konfiguratsioonile tähelepanelikult tähelepanu pööranud, näete, et väärtus.serializer on tüüpi KafkaAvroSerializer. Avro kohta on palju õppida, kuid püüan selle teile lühikeseks teha.

Avro abil määratlete skeemid. Need skeemid määratlevad teie andmete väljad koos tüüpide ja valikulisusega. Avro objekti pildistamiseks mõelge JSON-dokumendile, ehkki teie skeem dikteerib rangelt, kuidas Avro objekti saab moodustada. Boonusena, kui teie Avro on moodustatud (nagu POJO), saab seda hõlpsalt seada baitide massiivi, mis on täpselt see, mis Kafkale meeldib. Mis tahes muu programmeerimiskeel suudab lugeda Avro baite ja neid saab vastavalt sellele programmeerimiskeelele omaseks objektiks muuta.

See Avro skeem on määratletud meie ülevaate jaoks:

Mis tahes muu programmeerimiskeel suudab lugeda Avro baite ja neid vastavalt muuta.
Kuule! (võib öelda). Milline on siis skeemiregistri roll?

Turvalise skeemi registril on teie andmesüsteemis fantastiline roll. Mõne teabe Kafkasse saatmisel eraldab KafkaAvroSerializer skeemi Avro objekti andmetest. See saadab Avro skeemi skeemiregistrisse ja tegeliku sisu baitid (koos viitega skeemile) Kafkale. Miks? Kuna tulemus on see, et Kafkale saadetav kasulik koormus on palju kergem, kuna skeemi ei saadetud. See optimeerimine on suurepärane viis torujuhtme kiirendamiseks, et saavutada ekstreemsed mahud.

Kuidas töötab skeemiregister.

Skeemiregistrit saab kasutada ka teisel viisil, et jõustada skeemi ühilduvat arengut tagasi ja edasi, kuid see pole selle niigi ülipika ajaveebi postituse jaoks ulatus.

Kokkuvõtlikult võib öelda, et vajate ühte skeemiregistrit.

Kui soovite õppida Avro ja skeemiregistri kohta, vaadake minu kursust siit!

Produtsendi juhtimine

Kõik projekti käivitamise juhised on GitHubis, kuid siin on väljund, mida näete. Pärast konfluentplatvormi 3.3.0 allalaadimist ja installimist ning konfluentkäivituse käivitamist peaks teil olema täielik Kafka klaster!

Kafka käivitamine, kasutades Confluent Distributioni

Esiteks loome teema:

$ kafka-teemad - looge --topic udemy-reviews - zookeeper localhost: 2181 - partitsioone 3 --parandustegur 1

Siis käivitame tootja käsurealt:

$ git kloon https://github.com/simplesteph/medium-blog-kafka-udemy
Puhas pakett $ mvn
$ export COURSE_ID = 1075642 # Kafka algajatele
$ java -jar udemy-ülevaateid-produtsent / target / uber-udemy-ülevaateid-producer-1.0-SNAPSHOT.jar

ja jälgige logi:

[2017-10-19 22: 59: 59,535] INFO Arvamuse 7 saatmine: {"id": 5952458, "pealkiri": "Vapustav sisust ja kontseptsioonidest", "sisu": "Vapustav sisust ja kontseptsioonidest", "hinnang ":" 5.0 "," loodud ": 1489516276000," muudetud ": 1489516276000," kasutaja ": {" id ": 2548770," pealkiri ":" Punit G "," nimi ":" Punit "," kuva_nimi ": "Punit G"}, "kursus": {"id": 1075642, "pealkiri": "Apache Kafka seeria - õppige Apache Kafka algajatele", "url": "/ apache-kafka-seeria-kafka-from-algaja -to-middle / "}} (ReviewsAvroProducerThread)

Kui vallandame Kafka Avro konsooli kliendi:

$ kafka-avro-console-consumer --topic udemy-reviews - alglaadimis-serveri kohalikhost: 9092 - algusest
{"id": 5952458, "pealkiri": {"string": "Vapustav sisust ja kontseptsioonidest"}, "sisu": {"string": "Vapustav sisust ja kontseptsioonidest"}, "hinnang": "5,0" , "loodud": 1489516276000, "muudetud": 1489516276000, "kasutaja": {"id": 2548770, "pealkiri": "Punit G", "nimi": "Punit", "kuva_nimi": "Punit G"} , "kursus": {"id": 1075642, "pealkiri": "Apache Kafka seeria - õppige Apache Kafka algajatele", "url": "/ apache-kafka-seeria-kafka-alates-algajast-lõpetajani / "}}

Suurepärane, nüüd on meil reaalajas arvustuste voog Kafka teemal! 1. samm: tehtud.

Kui olete huvitatud kõigi Kafka põhialuste õppimisest, lugege minu Kafka algajatele Udemy kursust. See on 4 tunni pikkune sisu, et saaksite kiiremini enne kui põhjalikumalt lugeda!

Ikka veel siin? Täiuslik. See saab olema tõeliselt lõbus!

2) pettuste tuvastaja Kafka ojad

Selles etapis oleme Kafkas simuleerinud arvustuste voogu. Nüüd saame ühendada teise teenuse, mis loeb seda arvustuste voogu ja rakendab mannekeeni masinõppe mudeli jaoks filtri, et teada saada, kas arvustus on rämpspost või mitte.

Meie pettuste tuvastamise mikroteenus

Selleks kasutame Kafka vooge. Kafka Streams API on loodud reaalajas rakenduste ja mikroteenuste jaoks, mis saavad andmeid Kafkast ja lõpevad Kafkas. Hiljuti on see omandanud täpselt ühe korra võime, kui töötab klastri versiooniga ≥ 0,11.

Kafka Streams'i rakendused on fantastilised, kuna kokkuvõttes on need “lihtsalt” Java-rakendused. Neid pole vaja eraldi klastris käivitada (nagu Spark teeb funktsiooni YARN), see töötab lihtsalt iseseisvalt, nagu te teate ja meeldib, ning seda saab muuta, kui lihtsalt käivitate sama rakenduse veel mõned eksemplarid. Kafka Streamside kohta lisateabe saamiseks võite tutvuda minu Kafka Streams Udemy kursusega.

Kafka Streami rakenduste topoloogia

Kafka voogude rakendus määratletakse topoloogia (toimingute jada) kaudu ja selle määratlemiseks kasutame lihtsat kõrgetasemelist DSL-i. Sparki või Scalaga tuttavad inimesed võivad suhestuda mõne süntaksiga, kuna see loob funktsionaalsema paradigma.

Rakendus ise pole lihtne. Saame oma konfiguratsiooni, loome topoloogia, käivitame selle ja lisame sulgemiskonksu:

Topoloogia võib kirjutada järgmiselt:

Pettuste tuvastamise algoritm

Praegu klassifitseerib minu algoritm arvustuse arvutatuna räsi väärtusel põhineva pettuse ja määrab 5% arvustustest rämpspostiks. Selle lihtsustatud protsessi taga saab kindlasti kasutada mis tahes masinõppe raamatukogu, et testida ülevaadet eelarvutatud mudeli alusel. See mudel võib pärineda Sparkist, Flinkist, H2O-st, ükskõik mida.

Lihtsustatud näide:

Kui olete huvitatud Kafka Streamsiga keerukamate masinõppe mudelite käitamisest, on see 100% võimalik: vaadake neid artikleid.

Pettusevoogude rakenduse käitamine

Rakenduse käitamine on lihtne, lihtsalt käivitate selle nagu iga teine ​​Java rakendus. Esmalt tagame, et sihtteemad on korralikult loodud:

$ kafka-themes --loome --topic udemy-reviews-valid - partitsioone 3 --parandustegur 1 - loomaaiahoidja localhost: 2181
$ kafka-teemad --loome - teemakohane udeemia-ülevaated-pettus --partitsioonid 3 --parandustegur 1 - loomaaiahoidja kohalikhost: 2181

Ja siis joosta:

(juurkataloogist)
Puhas pakett $ mvn
$ java -jar udemy-ülevaateid-pettus / sihtmärk / uber-udemy-ülevaateid-pettus-1.0-SNAPSHOT.jar

Selles etapis on meil kehtiv arvustuste teema, mis sisaldab 95% arvustustest ja 5% mõnes muus pettuste teemas. Mõelge kõigile võimalikele rakendustele! Mudelit saab parandada kõigi pettuste ülevaatustega, käsitsi kontrollida, aruandeid luua jne. 2. samm: valmis.

Kafka voogude õppimine

Kafka Streams'i tundmaõppimiseks saate tutvuda minu Kafka Streams Udemy kursusega.

See läheb raskemaks. Nüüd tahame 90 päeva aknas välja arvutada statistika, näiteks keskmise hinnangu või arvustuste arvu kõigi arvustuste või lihtsalt kõige värskemate arvustuste kohta. Täname, et lugesite siia!

See saab reaalseks. Olen kindel, et saan ülejäänud ajaveebi jaoks teie tähelepanu pöörata

3) Arvamused Aggregator Kafka Streams

Sihtarhitektuur

Meie kolmas rakendus on ka Kafka voogude rakendus. See on osariik, seega hoitakse osariiki Kafkas läbipaistvalt. Välisest silmast näeb see välja järgmine:

Meie riikliku Kafka voogesituse rakenduse arhitektuur

KStream ja KTables

Eelmises jaotises õppisime Kafka voogude varasemaid kontseptsioone, kuidas voogu jagada ja jagada see rämpsposti hindamise funktsiooni alusel kaheks. Nüüd peame tegema arvukalt arvukaid arvutusi, näiteks koondeid, aknaid, et arvutada meie arvustuste voo kohta statistikat.

Õnneks saame kõrgetasemelises DSL-is kasutada mõnda eelnevalt määratletud operaatorit, mis muudavad KStreami KTable-ks. KTable on põhimõtteliselt tabel, mis saab uusi sündmusi iga kord, kui uus element saabub KStreami ülesvoolu. Seejärel on KTablel teatud aja loogika, et ennast värskendada. Kõiki KTable-uuendusi saab seejärel edastada allavoolu. KStreami ja KTablesi kiire ülevaate saamiseks soovitan Kafka veebisaidil kiirkäivitust.

Koondvõti

Kafka vooges on koondamine alati võtmepõhine ja meie praegustel voogesõnumitel on nullvõti. Tahame liita iga kursuse, seetõttu peame kõigepealt oma voo uuesti sisestama (kursuse-ID järgi). Kafka ojas meie voo uuesti sisestamine on väga lihtne, kui vaadata koodi:

Kuid peate olema millestki teadlik. Kui sisestate KStreami uuesti ahela ja ahelate, mis koos teatud olekute kokkuvõtetega (ja me ka teeme), kirjutab Kafka voogude teek uuesti sisestatud voo Kafkasse ja loeb seda uuesti. See võrgu ümbermaailmareis on seotud andmete levitamise, paralleelsuse, oleku salvestamise, taastamisega ja see võib olla kallis toiming. Nii et olge tõhus, kui muudate oma voo võtit!

Statistika alates kursuse algusest

Nüüd teenime kasumit! Meil on garantii, et kõik ühele kursusele kuuluvad ülevaated lähevad alati samale Kafka Streami rakenduse eksemplarile. Kuna meie teema hõlmab kõiki arvustusi algusest peale, peame lihtsalt looma oma voost KTablei ja selle kuskile vajuma.

Häid asju märkida:

  • Peate määratlema, kuidas emptyStats () välja näeb (kursuste statistika koos 0 arvustusega) - vaadake sellise juurutamise lähtekoodi
  • Peate määratlema, kuidas teie statistika muutub pärast uue arvustuse saabumist (see on teie koondaja)
  • Iga uut ülevaadet peetakse uuteks andmeteks, mitte värskenduseks. KTable ei meenuta varasemaid ülevaateid. Kui soovite arvutada ka värskenduste statistika, võiks sündmuse vormingut muuta, nii et ühe sõnumi korral jääks ülevaatuse olek „vana” ja „uus”.
  • Peaksite kontrollima, et teie lähteteema andmed ei aeguks! See on teema konfiguratsioon. Selleks võite lubada logide tihendamise või seada retentsiooni.ms 100-aastasele. Nagu kirjutas Jay Kreps (Kafka looja, Confluent tegevjuht), on andmete salvestamine Kafkasse sobilik.

Viimase 90 päeva statistika

Siit tuleb lõbus ja funky osa. Kui tegemist on andmete voogesitusega, nõuab ärirakendus enamasti sündmuste analüüsimist ainult ajaakna jooksul. Mõned kasutusjuhud hõlmavad järgmist:

  • Kas ma olen DDOS-i all? (andmete järsk tipp)
  • Kas kasutaja spämmib minu foorumeid? (konkreetse kasutaja ID jaoks lühikese aja jooksul suur arv sõnumeid)
  • Mitu kasutajat oli viimase tunni jooksul aktiivne?
  • Kui suur finantsrisk on minu ettevõttel praegu?

Meie jaoks on see järgmine:

Milline on iga kursuse statistika viimase 90 päeva kohta?

Pangem tähele, et liitmisarvutused on täpselt samad. Ainus, mis aja jooksul muutub, on andmekogum, millele seda koondamist rakendame. Soovime, et see oleks hiljutine (viimase 90 päeva jooksul) üle ajaakna ja hoolitsedes selle eest, et aken edeneks iga päev. Kafka ojades nimetatakse seda hüppeaknaks. Saate määratleda, kui suur on aken ja hüppe suurus. Lõpuks määratlete hilinenud andmete töötlemiseks, kui kaua olete nõus akna hoidmist:

Pange tähele, et see loob igal ajal umbes 90 erinevat akent. Meid huvitab ainult esimene.

Filtreerime ainult hiljutisi ülevaateid (aitab tõesti vooga kiiremini järele jõuda) ja arvutame kursuse statistika iga ajaakna kohta:

See toiming võib minna pisut kulukaks, kuna igal kursusel hoiame 90 ajaakent ja hoolime ainult ühest konkreetsest aknast (viimasest). Kahjuks ei saa me libistatavate akendega liitmist teha (veel), kuid loodetavasti ilmub see funktsioon varsti! See on meie vajaduste jaoks endiselt piisavalt hea.

Vahepeal peame filtreerima, et saada ainult meid huvitav aken: see on aken, mis lõpeb pärast tänast ja lõpeb homme:

Ja see selleks, saame teema reaalajas täielikult värskendatud kursuse värskeima statistikaga.

Rakenduse käitamine

Rakenduse käitamine on lihtne, lihtsalt käivitate selle nagu iga teine ​​Java rakendus. Esmalt tagame, et sihtteemad on korralikult loodud:

$ kafka-themes --loome --topiline pikaajaline statistika - partitsioonid 3 --korrutustegur 1 - loomaaiahoidja localhost: 2181
$ kafka-teemad --loome - temaatiline värske statistika - partitsioonid 3 --parandustegur 1 - loomaaiahoidja localhost: 2181

Ja siis joosta:

(juurkataloogist)
Puhas pakett $ mvn
$ java -jar udemy-reviews-aggregator / target / uber-udemy-reviews-aggregator-1.0-SNAPSHOT.jar

Tulistage tulemuste nägemiseks paar Avro tarbijat üles:

$ kafka-avro-console-tarbija - temaatiline värskeim statistika - alglaadimis-serveri kohalikhost: 9092 - algusest
$ kafka-avro-console-Consumer --topiklik pikaajaline statistika --bootstrap-server localhost: 9092 - algusest

Tulemused võivad sisaldada järgmiste voogu:

{“Course_id”: 1294188, “count_reviews”: 51, “average_rating”: 4.539}
{“Course_id”: 1294188, “count_reviews”: 52, “average_rating”: 4.528}
{“Course_id”: 1294188, “count_reviews”: 53, “average_rating”: 4.5}

Nüüd on meil kaks teemat, millest saab pikaajalise ja värske statistika värskendusvoo, mis on päris lahe. See teema on muide väga hea kandidaat pikaks tihendamiseks. Me hoolime tõesti ainult iga kursuse viimasest väärtusest. 3. samm: tehtud.

Märkused

Kuigi Kafka ojade süntaks tundub üsna lihtne ja arusaadav, juhtus kulisside taga palju. Siin on mõned märkused:

  • Täpselt üks kord: kuna soovime, et see koondamine oleks täiesti täpne, peame lubama täpselt ühe korra semantika töötlemise (EOS). See funktsioon ilmus 0.11 ja nimi tekitas palju arutelusid. Nii, et see oleks lühike ja selge, tähendab see „tõhusalt üks kord” ja on täpselt see, mida me vajame (pun mõeldud). See tähendab, et ühtegi arvustust ei arvestata maakleri, võrgu või rakenduse tõrke korral kuidagi kaks korda. Puhas!
  • Sissetuleva andmevorming: nagu varem mainitud, on fantastiline, kui andmetel oleks väli „uus” ja „vana”. See võimaldaks käsitleda arvustuste värskendusi ja arvutada arvustuste värskenduste korral õige keskmise
  • Akendega liitmine: 90 akna arvutamisel on tohutu jõudlus, et need kõik ära visata ja viimane alles jätta. Olen seda hinnanud ja leidnud, et see on 25 korda vähem tõhus kui madalama taseme (veelgi keerukama) API kasutamisel
  • Madalama taseme API: selle API abil saate luua oma trafod ja arvutada täpselt selle, mida vajate. Lähtekoodist leiate teavet selle kohta, kuidas seda API-d kasutades hiljutisi statistikaarvutusi teha, ehkki ma ei hakka seda selles postituses arutama, kuna see ületab palju niigi tohutut teavet, mille ma teile lihtsalt viskasin.
  • Toimivus: neid rakendusi saab paralleerida sissetuleva teema partitsioonide arvuga. Selle horisontaalne skaleerimine on natiivne, mis on üsna vinge. Selles osas teeb Kafka Streams mõõtkava tegemise väga lihtsaks, säilitamata mingisugust tagapõhja klastrit.

… Viimane komponent!

4) Kafka Connect Sink - nende andmete tagasisaatmine kasutajatele

Lõpuks on kõik, millest hoolime, inimesed, kes sirvivad Udemy veebisaiti ja visualiseerivad kursuste statistikat. Nagu enamiku veebiteenuste puhul, toetab teabe edastamine sageli ka mingisugust andmebaasi. Oma näite jaoks olen valinud relatsiooniandmebaasi (PostgreSQL), kuid võiksin valida NoSQL-i, näiteks MongoDB, või otsinguindeksi, näiteks ElasticSearch. Võimalusi on lõputult ja seal on Kafka Connect valamud peaaegu igasuguse tehnoloogia jaoks olemas.

Kafka Connect torujuhe

Kafka Connect

Kafka Connect on raamistik, millele arendajad saavad konnektorid luua. Need pistikud võivad olla kahte tüüpi: Source ja Sink. Allikas on tootjad, Sink on tarbijad. Kafka Connecti ilus asi on see, et see pakub teile infrastruktuuri mis tahes pistikute käitamiseks. Lõppkasutaja jaoks on konnektori käitamine sama lihtne kui konfiguratsiooni vajutamine. Teiste inimeste töö taaskasutamine kõlab unenäona, eks? Noh, sellest räägib Kafka Connect.

Kafka Connecti kohta üksikasjalikuma teabe saamiseks tutvuge minu Kafka Connecti kursusega

JDBC valamuühendus

Siin on hea uudis: ma ei hakka teile enam Java-koodi näitama. Me ei kavatse leiutada ratast, et panna oma teemaandmed PostgreSQL-i tabelisse. Selle asemel võtame kasutusele hästi kirjutatud ja lahingutega testitud Kafka pistiku, lihtsalt pisut konfiguratsiooni vajutades.

Kasutame suurepärast Kafka Connect JDBC Sink by Confluent. Konfiguratsioon ise on surnud lihtne:

Märkimist vajavad asjad:

  • ülesanded.max = 3: see on teie pistiku paralleelsuse tase. See tähendab, et sisenditeemade lugemiseks keerutame kõige rohkem kolme ülesannet. Saate seda arvu suurendada, et suurendada selle partitsioonide arvu, millest loete. Põhjus on see, et iga Kafka Connecti kraanikauss on sündmuskoha taga vaid Kafka tarbija
  • key.converter: Ma otsustasin, et mu kursuse-id võtme all olevad teemad kuvatakse keelpillina. Ühendustöötajatele pakutud vaikemuunduriks on Avro, kui ma ei alistaks key.converterit, tekitaks see vea. Seetõttu kasutame siin lihtsustatud StringConverterit.
  • Kafka Connect klastrisse võiks juurutada palju konnektoreid (rohkem kui üks konfiguratsioon). Kasu? Noh, me võiksime oma teemad koondada kümnesse erinevasse andmebaasi, 10 erinevasse tehnoloogiasse, et teenida teie organisatsioonis erinevaid eesmärke ja rakendusi - kõik samast ühendusklastrist. Samuti võiksime laiendada teemade loetelu, nii et mõned andmeteadlased saaksid näiteks teie pettuse algoritmi tõhususe kohta lahedat analüüsi teha.
Mõned tulemused, mida saame meie PostgreSQL andmebaasis

Viimane, kuid mitte vähem tähtis - lõppmärkus

Nagu nägite, on Kafkas võimalused lõputud. Ökosüsteem on äärmiselt suur ning seal on palju mustreid ja lahedaid kontseptsioone, mida õppida. Ma soovin, et teil oleks täna tänapäevaseid asju:

  • Ürituste hankimine Kafkas on fantastiline. Voolu saamine kõigist teie ettevõttes kunagi toimunud sündmustest võib olla unistuse täitumine.
  • Kafka on suurepärane kandidaat teie mikroteenuste alustalaks. Jagage mõned keerulised voolud lihtsateks ja pange kõik mikroteenused oma põhivõimeid parimal viisil täitma. Kui pettuserakendus paraneb, poleks teie teiste süsteemide töö häireid!
  • Kasutage registrit Confluent Schema. Andmed on teie esimese klassi kodanik Apache Kafkas ja skeemid muudavad kõigi elu palju lihtsamaks. Dokumentatsioon on manustatud, parsimisvead on praktiliselt olematud. Saate oma skeemi aja jooksul isegi muuta, kui olete kindel, et see on ühilduv edasi ja tagasi.
  • Kasutage igaks tööks sobivaid tööriistu. Nagu nägite, oli seal segu tootjast, voogudest ja ühendusest. Tegin maksimaalse pingutuse, et mitte ratast uuesti leiutada. Enne kui sukeldute oma lemmiktehnoloogiasse, võtke aega lahenduste hindamiseks.
  • Ärge kunagi lõpetage õppimist. Olen Kafkat kasutanud nüüd juba üle aasta ja õpin pidevalt iga päev. Samuti tahan jagada oma kogemusi, nii et vaadake Apache Kafka algajatele, Kafka Connect, Kafka ojad, Kafka seadistamine ja administreerimine, Confluent Schema Registry & REST Proxy, Apache Kafka Security, Kafka Monitoring & Operations, Confluent KSQL.
  • Mida see ajaveeb ei hõlmanud (ja mitmesuguseid asju, mida veel on vaja õppida või millest kirjutada): Kafka Consumers API, Kafka Admin Client, Kafka Streams madalama taseme API, Kafka Streams liitub andmete rikastamiseks, Kafka Connect Source, Kafka Security, Kafka Jälgimine, Kafka seadistamine ja administreerimine, Kafka REST Proxy, KSQL, loomapidaja (ja ma võib-olla unustasin muudki). Ökosüsteem on tohutu
  • KSQL on tulevik: enamiku, kui mitte kõiki selle ajaveebi kirjutatud Kafka Streami rakendusi saab asendada vaid mõne KSQL-i avaldusega kohe, kui sellel on ametlik Avro tugi. See avab voo töötlemise palju laiemale vaatajaskonnale ja võimaldab paljude pakett-SQL-rakenduste kiiret migreerumist Kafkasse. Kavatsen järgmise blogi avaldada, kui migreerin koodi KSQL-i. Olge kursis!

Kafka on fantastiline tehnoloogia. Olen kindel, et see paneb kõik organisatsioonid õitsema paindlikkuses ja reageerimisvõimes. Kafka tundmaõppimiseks on vaja tonni ja ma loodan siiralt, et olen selle ajaveebi kaudu selgelt lahti mõelnud, kuidas aheldada mikroteenuseid, et muuta partii torujuhtme reaalajas.

Plaksutage, jagage, kommenteerige, andke mulle tagasisidet. Mul oleks hea meel teie mõtteid kuulda! Tänu Michaelile, Gwenile, Camile, Octavile ja Ericule korrektuuri ja paranduste pakkumise eest :)

Head õppimist!