Kuinka käyttää Apache Kafkaa muuntamaan eräputki reaaliaikaiseksi

Selitän tässä blogissa perusteellisesti, kuinka rakentaa reaaliaikainen päästä päähän -putkisto rakentamalla neljä mikropalvelua Apache Kafkan päälle. Se antaa sinulle tietoa Kafka Producer API: sta, Avrosta ja Confluent Schema -rekisteristä, Kafka Streams High-Level DSL: stä ja Kafka Connect -altoista.

Jos joudut ylittämään kadun, tekisitkö sen viiden minuutin vanhoilla tiedoilla?

Haaste, jonka ratkaisemme

Säännöllisen työpaikkani tiedonsiirron konsulttina olen myös online-ohjaaja Udemy-verkkokurssien markkinoilla. Opetan rakastuneista tekniikoista, kuten Apache Kafka aloittelijoille, Kafka Connect, Kafka Streams, Kafka Setup & Administration, Confluent Schema Registry & REST Proxy, Apache Kafka Security ja Kafka Monitoring & Operations, Confluent KSQL.

Arvostelukehotus Udemystä

Udemy-ohjelmalla opiskelijoilla on mahdollisuus lähettää arvosteluja käytetyistä kursseista antaakseen palautetta ohjaajalle ja toisen alustan käyttäjille.

Mutta nämä arvostelut julkaistaan ​​yleisölle joka 24. tunti! Tiedän tämän, koska saan joka päivä kello 9.00 PST vastaan ​​erän uusia arvosteluja.

Kurssin sivun päivittäminen uudella arvostelukerralla ja keskimääräisellä arvosanalla voi viedä vielä muutaman tunnin. Kuulostaa siltä, ​​että päivittäin ajoitettu erätyö on käynnissä jossain!

Kuvakaappaus Apache Kafka for Beginners -kurssin tilastoista

Tässä blogissa esittelen sinulle kuinka muuttaa tämä eräputki reaaliaikaiseksi Apache Kafkaa käyttäväksi rakentamalla muutama mikropalvelu.

Kaikki lähdekoodi on saatavilla täältä: https://github.com/simplesteph/medium-blog-kafka-udemy

Ja laiskoille voit nähdä minun suorittavan kaiken tämän videon koodin:

Innoissaan? Aloitetaan!

Mikä on Apache Kafka?

Apache Kafka on hajautettu suoratoistoalusta. Sen ytimessä se antaa tietoja tuottaville järjestelmille (nimeltään Producer) pysyä tiedoillaan reaaliajassa Apache Kafka-aiheessa. Minkä tahansa määrän järjestelmiä, jotka tarvitsevat kyseistä tietoa reaaliajassa, voi sitten lukea mikä tahansa aihe (kutsutaan kuluttajaksi). Siksi Kafka on ytimessä Pub / Sub-järjestelmä. Kulissien takana Kafka jaetaan, skaalautuu hyvin, toistaa tietoja välittäjien (palvelimien) välillä, voi selviytyä välittäjien seisokkeista ja paljon muuta.

Tyypillinen esitys pub / sub-järjestelmästä

Apache Kafka sai alkunsa LinkedInistä ja avattiin myöhemmin, jotta siitä tuli Apache-ylimmän tason projekti. Jotkut suuret yritykset, kuten Uber, Airbnb, Netflix, Yahoo, Udemy, hyödyntävät sitä nyt ja yli 35% Fortune 500 -yrityksistä.

Tämä blogi on jonkin verran edistynyt, ja jos haluat ymmärtää Kafkaa paremmin ennen kuin luet enää, tutustu Apache Kafka -aloitteeseen aloittelijoille.

Arviot eräputkiston käsittelystä

Ennen kuin hyppää suoraan sisään, on erittäin tärkeää kartoittaa nykyinen prosessi ja nähdä, kuinka voimme parantaa kutakin komponenttia. Alla on henkilökohtaiset oletukseni:

  • Kun käyttäjä kirjoittaa arvion, se lähetetään postitettuna verkkopalvelulle (REST Endpoint), joka tallentaa arvion jonkinlaiseen tietokantataulukkoon
  • Joka 24. tunti erätyö (voi olla Spark) ota kaikki uudet arvostelut ja käyttää roskapostisuodatinta vilpillisten arvostelujen suodattamiseen laillisista.
  • Uudet kelvolliset arvostelut julkaistaan ​​toiseen tietokantataulukkoon (joka sisältää kaikki historiallisesti kelvolliset arvostelut).
  • Toinen erätyö tai SQL-kysely laskee uudet tilastot kursseille. Tilastot sisältävät kaikkien aikojen keskimääräisen arvosanan, kaikkien aikojen arvostelujen lukumäärän, 90 päivän keskimääräisen arvosanan ja 90 päivän arvioiden.
  • Verkkosivusto näyttää nämä tiedot REST-sovellusliittymän kautta, kun käyttäjä navigoi verkkosivustolla.
Henkilökohtaiset oletukset nykyisestä putkilinjasta. Näyttää tutulta?

Katsotaanpa kuinka voimme muuttaa kyseisen eräputkiston skaalautuvaksi, reaaliaikaiseksi ja hajautetuksi putkijohdoksi Apache Kafkan kanssa.

Kohdearkkitehtuuri

Kun rakennat reaaliaikaista putkistoa, sinun on ajateltava mikropalveluita. Mikropalvelut ovat pieniä komponentteja, jotka on suunniteltu suorittamaan yksi tehtävä hyvin. He ovat vuorovaikutuksessa keskenään, mutta ei suoraan. Sen sijaan he ovat epäsuorasti vuorovaikutuksessa välittäjän, tässä tapauksessa Kafka-aiheen, kanssa. Siksi kahden mikropalvelun välinen sopimus on itse tieto. Sopimus pannaan täytäntöön hyödyntämällä skeemejä (lisätietoja myöhemmin)

Hellävarainen muistutus
Kahden mikropalvelun välinen sopimus on itse tieto

Yhteenvetona voidaan todeta, että ainoa tehtävämme on mallintaa tietoja, koska tieto on kuningas.

Huomaa, että kaikki tämän blogin mikropalvelut ovat vain tavallisia Java-sovelluksia, kevyitä, kannettavia, ja voit laittaa ne helposti Docker-säilöön (tämä on selkeä vastakohta sanomasta… Spark). Tässä ovat mikropalvelut, joita tarvitsemme:

  1. Arvostele Kafka Producer: kun käyttäjä lähettää arvostelun REST-päätepisteeseen, sen pitäisi päätyä Kafkaan heti.
  2. Petosilmaisimen Kafka-streamit: saamme arvostelujoukon. Meidän on kyettävä arvioimaan nämä arviot petoksista reaaliaikaisen koneoppimisen avulla ja joko vahvistamaan ne tai ilmoittamaan ne petoksiksi.
  3. Arvostelut Aggregator Kafka Streams: nyt, kun meillä on voimassa olevien arvostelujen virta, meidän pitäisi koota ne joko kurssin käynnistämisen jälkeen tai vain ottaen huomioon viimeiset 90 päivää arvosteluja.
  4. Kirjoita arvostelu Kafka Connect Sink: Meillä on nyt päivityskurssi kurssitilastoihimme. Meidän on upotettava ne PostgreSQL-tietokantaan, jotta muut verkkopalvelut voivat poimia ne ja näyttää ne käyttäjille ja ohjaajalle.
Kohdearkkitehtuuri reaaliaikaiselle putkilinjallemme. Jokainen väri on mikropalvelu

Nyt saamme selkeän kuvan reaaliaikaisesta kokonaisuudesta, ja näyttää siltä, ​​että meillä on paljon työtä edessä. Aloitetaan!

1) Arvostelut Kafka-tuottaja

Haen arvosteluja koskevia tietoja noutamalla kurssin olemassa olevien ja julkaistujen arvostelujen luettelon ulkoisen REST API Udemy -sovelluksen avulla.

Producer API auttaa tuottamaan tietoja Apache Kafkaan. Se vie objektin yhdistettynä Serializeriin (luokka, jonka avulla voit muuntaa objektit raa'ina tavuina) ja lähettää sen yli.

Joten tässä meillä on kaksi vaihetta toteuttaa:

  1. Luo tapa hakea arvosteluja mistä tahansa kurssista Udemy REST -sovellusliittymällä
  2. Malline nämä arvostelut mukavaksi Avro-esineeksi ja lähetä se Kafkaan.
Tyypillinen Kafka-tuottaja

Löydät tuottajan lähdekoodin täältä.

Haetaan Udemy-arvosteluita

Arvostelujen saaminen on todella helppoa, voit oppia REST-sovellusliittymästä täältä. Aiomme vain selvittää, kuinka monta arviota kurssilla on yhteensä, ja soittaa sitten toistuvasti REST-sovellusliittymälle viimeiseltä sivulta ensimmäiselle. Lisäämme arvostelut java-jonoon.

Arvioiden lähettäminen Kafkaan

Arvioiden lähettäminen Kafkaan on yhtä helppoa kuin Kafka-tuottajan luominen ja määrittäminen:

Ja sitten tuottaa tietoja sen kanssa:

Helppoa, eikö? Yhdistä se parilla säikeellä, joillakin määrityksillä, jäsentämällä JSON-dokumentteja Avro-objektin luomiseksi, sulkemiskoukut ja saat itsestäsi rock-kiinteän tuottajan!

Avro ja Schema-rekisteri

Hei! (saatat sanoa). Mikä on arviointikohteesi?

Hyvä kysymys. Jos olet seurannut tarkkaan Kafka Producer -sovelluksen kokoonpanoa, voit nähdä, että "value.serializer" on tyyppiä KafkaAvroSerializer. Avrosta on paljon opittavaa, mutta yritän tehdä siitä sinulle lyhyen.

Avron kanssa määrität kaaviot. Nämä kaaviot määrittelevät tietosi kentät niiden tyyppien lisäksi ja valinnaisuuden. Avro-kohteen kuvaamiseksi ajattele JSON-asiakirjaa, vaikka kaavasi määrää tiukasti, kuinka Avro-objekti voidaan muodostaa. Bonuksena, kun Avro on muodostettu (kuten POJO), se voidaan helposti sarjoittaa tavujoukkoksi, mistä Kafka haluaa. Mikä tahansa muu ohjelmointikieli pystyy lukemaan Avro-tavuja ja ansaitsemaan ne kyseiselle ohjelmointikielelle ominaiseen objektiin.

Tämä Avro-kaavio on määritelty katsaukselle:

Mikä tahansa muu ohjelmointikieli pystyy lukemaan Avro-tavuja ja ansaitsemaan ne.
Hei! (saatat sanoa). Mikä on sitten schemarekisterin rooli?

Confluent Schema -rekisterillä on mahtava rooli tietoputkessasi. Kun lähetät tietoja Kafkaan, KafkaAvroSerializer erottaa kaavion Avro-objektisi tiedoista. Se lähettää Avro-skeeman skeemarekisteriin ja todelliset sisältötavut (mukaan lukien viittauksen skeemiin) Kafkaan. Miksi? Koska seurauksena Kafkaan lähetetty hyötykuorma on paljon kevyempi, koska kaavaa ei lähetetty. Tämä optimointi on loistava tapa nopeuttaa putkilinjaasi äärimmäisten volyymien saavuttamiseksi.

Kuinka Schema-rekisteri toimii.

Kaaviorekisterillä on myös toinen käyttö, jotta taataan ja siirretään yhteensopivaa skeemakehitystä, mutta se ei kuulu kyseisen jo jo pitkään pidetyn blogin viestiin.

Yhteenvetona tarvitset todella yhtä kaaviorekisteriä.

Jos haluat oppia Avrosta ja Schema-rekisteristä, katso kurssini täältä!

Tuottajan johtaminen

Kaikki ohjeet projektin suorittamiseksi ovat GitHubissa, mutta tässä on tuotos, jonka näet. Kun olet ladannut ja asentanut Confluent Platform 3.3.0: n ja käynnistänyt konfluent-käynnistyksen, sinulla pitäisi olla täysin varusteltu Kafka-klusteri!

Kafkan käynnistäminen Confluent Distributionilla

Ensin luomme aiheen:

$ kafka-aiheet --luo --topic udemy-arvostelut - zookeeper localhost: 2181 - osiot 3 --korjauskerroin 1

Sitten ajamme tuottajaa komentoriviltä:

$ git -klooni https://github.com/simplesteph/medium-blog-kafka-udemy
$ mvn puhdas paketti
$ export COURSE_ID = 1075642 # Kafka aloittelijoille
$ java -jar udemy-arvostelut-tuottaja / kohde / uber-udemy-arvostelut-tuottaja-1.0-SNAPSHOT.jar

ja seuraa loki:

[2017-10-19 22: 59: 59,535] INFO Lähetetään arvostelu 7: {"id": 5952458, "otsikko": "Fabulous sisältöön ja käsitteisiin", "content": "Fabulous sisältöön ja käsitteisiin", "rating ":" 5.0 "," luotu ": 1489516276000," muokattu ": 1489516276000," käyttäjä ": {" id ": 2548770," otsikko ":" Punit G "," nimi ":" Punit "," näytön_nimi ": "Punit G"}, "kurssi": {"id": 1075642, "otsikko": "Apache Kafka -sarja - Opi Apache Kafka aloittelijoille", "url": "/ apache-kafka-series-kafka-from-aloittelija -välituotteelle / "}} (ReviewsAvroProducerThread)

Jos palomme Kafka Avro -konsolin kuluttajan:

$ kafka-avro-konsoli-kuluttaja - topic udemy-reviews - käynnistyslokero-palvelin localhost: 9092 - alusta
{"id": 5952458, "otsikko": {"merkkijono": "Fabulous sisällöstä ja käsitteistä"}, "content": {"merkkijono": "Fabulous sisällöstä ja käsitteistä"}, "rating": "5.0" , "luotu": 1489516276000, "muokattu": 1489516276000, "käyttäjä": {"id": 2548770, "otsikko": "Punit G", "nimi": "Punit", "näytön_nimi": "Punit G"} , "kurssi": {"id": 1075642, "otsikko": "Apache Kafka -sarja - Opi Apache Kafka aloittelijoille", "url": "/ apache-kafka-sarja-kafka-aloittelijasta keskitason / "}}

Erinomainen, meillä on nyt reaaliaikainen arvostelujono Kafkan aiheeseen! Vaihe 1: valmis.

Jos olet kiinnostunut oppimaan kaikki Kafka-perusteet, tutustu Kafka-aloittelijakurssiini. Se on 4 tunnin sisältö, joka saa sinut vauhtiin ennen kuin luet tarkemmin!

Yhä täällä? Täydellinen. Se on todella hauskaa!

2) Petosilmaisimen Kafka-virrat

Tässä vaiheessa olemme simuloineet arvosteluvirtaa Kafkassa. Nyt voimme kytkeä toisen palvelun, joka lukee kyseisen arvostelujonon ja käyttää suodatinta mallin koneoppimallin suhteen selvittääkseen, onko arvostelu spam tai ei.

Petosten havaitsemisen mikropalvelumme

Tätä varten käytämme Kafka Streams -sovelluksia. Kafka Streams API on tarkoitettu reaaliaikaisille sovelluksille ja mikropalveluille, jotka saavat tietoa Kafkasta ja päätyvät Kafkaan. Se on äskettäin saavuttanut tarkalleen kerran-ominaisuuden ajaessaan klusteria, jonka versio on ≥ 0,11.

Kafka Streams -sovellukset ovat fantastisia, koska ne ovat loppujen lopuksi “vain” Java-sovelluksia. Niitä ei tarvitse ajaa erillisellä klusterilla (kuten Spark tekee YARN: lla), se toimii vain itsenäisesti tunnetullasi ja haluamallasi tavalla, ja voidaan skaalata vain suorittamalla saman sovelluksen joitain muita esiintymiä. Lisätietoja Kafka Streamsista voi tutustua Kafka Streams Udemy -kurssini.

Kafka Streams -sovelluksen topologia

Kafka Streams -sovellus määritetään topologian (toimintosekvenssin) avulla, ja sen määrittelemiseen käytetään yksinkertaista korkean tason DSL: ää. Sparkin tai Scalan tuntevat ihmiset voivat liittyä joihinkin syntaksiin, koska se hyödyntää toiminnallisempaa paradigmaa.

Itse sovellus on kuollut yksinkertainen. Saamme kokoonpanomme, luomme topologiamme, käynnistämme sen ja lisäämme sammutuskoukun:

Topologia voidaan kirjoittaa seuraavasti:

Petosten havaitsemisalgoritmi

Tällä hetkellä algoritmini luokittelee tarkistuksen deterministisesti petoksiksi hash-arvon perusteella ja määrittää 5% arvosteluista roskapostiksi. Tämän yksinkertaistetun prosessin takana voidaan ehdottomasti soveltaa mitä tahansa koneoppimiskirjastoa testaamaan katsaus ennalta laskettuun malliin. Tämä malli voi tulla Sparkista, Flinkistä, H2O: sta, mistä tahansa.

Yksinkertainen esimerkki:

Jos olet kiinnostunut suorittamaan monimutkaisempia koneoppimismalleja Kafka Streams -sovelluksella, se on 100% mahdollista: tutustu näihin artikkeleihin.

Petosvirtasovelluksen suorittaminen

Sovelluksen suorittaminen on helppoa, käynnistä se vain kuten mikä tahansa muu Java-sovellus. Varmistamme ensin, että kohdeaiheet on luotu oikein:

$ kafka-aiheet - luo - topic udemy-reviews-valid - partitions 3 --replication factor 1 - zookeeper localhost: 2181
$ kafka-aiheet - luominen --topic udemy-arvostelut-petos - osiot 3 --korjauskerroin 1 - eläintarhayrityksen paikallisasunto: 2181

Ja sitten ajaa:

(juurihakemistosta)
$ mvn puhdas paketti
$ java -jar udemy-arvostelut-petokset / kohde / uber-udemy-arvostelut-petokset-1.0-SNAPSHOT.jar

Tässä vaiheessa meillä on kelvollinen arvosteluaihe, joka sisältää 95% arvosteluista ja 5% toisesta petosaiheesta. Ajattele kaikkia mahdollisia sovelluksia! Malliä voitaisiin parantaa kaikilla petoskatsauksilla, suorittaa manuaalisia tarkastuksia, luoda raportteja jne. Vaihe 2: valmis.

Oppiminen Kafka-virrat

Voit oppia Kafka Streamsista tutustumalla Kafka Streams Udemy -kurssini.

Se on tulossa vaikeammaksi. Haluamme nyt laskea tilastot, kuten keskimääräisen arvosanan tai arvostelujen lukumäärän, kaikista arvosteluista tai vain uusimmista arvosteluista 90 päivän ikkunassa. Kiitos, että luit tänne!

Se on todella totta. Varmistan, että kiinnitän huomionne muuhun blogiin

3) Arvostelut Aggregator Kafka Streams

Kohdearkkitehtuuri

Kolmas sovelluksemme on myös Kafka Streams -sovellus. Se on tilallinen, joten valtio varastoidaan avoimesti Kafkaan. Ulkosilmältä se näyttää seuraavalta:

Arkkitehtuuri tilalliselle Kafka Streams -sovelluksellemme

KStream ja KTables

Edellisessä osassa opimme Kafka-streamien varhaisista konsepteista, jotta voimme ottaa streamin ja jakaa sen kahteen osaan roskapostin arviointitoiminnon perusteella. Nyt meidän on suoritettava joitakin tilallisia laskelmia, kuten aggregaatiot, ikkunointi, jotta voidaan laskea tilastot arvostelujonomme.

Onneksi voimme käyttää korkean tason DSL: ssä joitain ennalta määritettyjä operaattoreita, jotka muuttavat KStreamin KTable-taulukkoksi. KTable on pohjimmiltaan taulukko, joka saa uusia tapahtumia joka kerta kun uusi elementti saapuu ylävirran KStreamiin. KTable-tietokoneella on sitten jonkin verran logiikkaa päivittää itsensä. Kaikki KTable-päivitykset voidaan sitten lähettää loppupäässä. Suosittelen pikakatselua Kafkan verkkosivustolta saadaksesi nopean yleiskuvan KStreamista ja KTablesta.

Yhdistämisavain

Kafka Streams -yhdistelmissä aggregaatiot ovat aina avainperusteisia, ja nykyisissä stream-viesteissämme on nolla-avain. Haluamme koota jokaisen kurssin yli, siksi meidän on ensin avaittava virta uudelleen (kurssin tunnuksen mukaan). Kafka-streamin suoratoistaminen on erittäin helppoa, jos tarkastellaan koodia:

Mutta sinun on oltava tietoinen jostakin. Kun avaat uudelleen KStream-ketjun ja ketjun, jolla on joitain tilallisia yhdistelmiä (ja me teemme), Kafka Streams -kirjasto kirjoittaa uudestaan ​​avaistetun virran takaisin Kafkaan ja lukee sen sitten uudelleen. Tämä verkon edestakainen matka liittyy tiedonjakeluun, rinnakkaisuuteen, tilan tallentamiseen, palauttamiseen, ja se voi olla kallis toimenpide. Joten ole tehokas, kun vaihdat streamisi avainta!

Tilastot kurssin alusta lähtien

Nyt voimme! Meillä on takuu siitä, että kaikki yhteen kurssiin kuuluvat arvostelut menevät aina samaan Kafka Streams -sovellusinstanssiin. Koska aiheemme sisältää kaikki arvostelut alusta alkaen, meidän on vain luotava KTable-taulukko streamistamme ja upotettava se jonnekin.

Hyviä huomioitavia asioita:

  • Sinun on määritettävä miltä tyhjät tilastot () näyttävät (kurssitilastot, joissa on 0 arviota) - katso lähdekoodi tälle toteutukselle
  • Sinun on määritettävä, kuinka tilastosi muuttuvat uuden arvion tultua (se on aggregaattori)
  • Jokainen uusi arvostelu nähdään uutena datana, ei päivityksenä. KTable-laitteella ei ole muistoja aiemmista arvosteluista. Jos haluat laskea myös päivitysten tilastotiedot, tapahtumamuotoa voidaan muuttaa niin, että "vanha" ja "uusi" katselutila voidaan tallentaa yhdessä viestissä.
  • Sinun tulisi varmistaa, että lähdeaiheesi ei vanhene. Se on aihekokoonpano. Tätä varten voit joko ottaa lokien tiivistämisen käyttöön tai asettaa retentio.ms: n 100-vuotiselle tasolle. Kuten Jay Kreps (Kafkan luoja, Confluentin toimitusjohtaja) kirjoitti, tietojen tallentaminen Kafkaan on hyvä.

Tilastot viimeisen 90 päivän ajalta

Täältä tulee hauska ja funky osa. Kun kyse on tiedonsiirrosta, yrityssovellus vaatii suurimman osan ajasta vain tapahtumien analysointia aikaikkunassa. Joitakin käyttötapoja ovat:

  • Olenko DDOS-järjestelmässä? (äkillinen tiedon huippu)
  • Spammittaako käyttäjä foorumeiani? (suuri määrä viestejä lyhyellä ajanjaksolla tietylle käyttäjätunnukselle)
  • Kuinka monta käyttäjää oli aktiivinen viimeisen tunnin aikana?
  • Kuinka paljon taloudellista riskiä yritykselläni on tällä hetkellä?

Meille tämä on:

Mikä on kunkin kurssin tilastotiedot viimeisen 90 päivän ajalta?

Huomaa, että aggregointilaskenta on täsmälleen sama. Ainoa asia, joka muuttuu ajan myötä, on tietojoukko, johon tätä aggregaatiota sovelletaan. Haluamme sen olevan hiljattain (viimeisen 90 päivän ajalta) ajanjaksossa, ja varmistamme, että ikkuna etenee joka päivä. Kafka-virroissa sitä kutsutaan hyppyikkunaksi. Voit määrittää, kuinka suuri ikkuna on, ja hypyn koon. Viimeinkin, kun käsittelet myöhässä saapuvia tietoja, määrität kuinka kauan olet valmis pitämään ikkunaa varten:

Huomaa, että tämä luo noin 90 erilaista ikkunaa milloin tahansa. Meitä kiinnostaa vain ensimmäinen.

Suodatamme vain viimeisimmät arvostelut (auttaa todella nopeuttamaan streamin saavuttamista) ja laskemme kurssitilastot kullakin aikaikkunalla:

Tästä toiminnasta voi tulla vähän kallista, koska pidämme 90 aikaikkunaa kullakin kurssilla ja välitämme vain yhdestä tietystä ikkunasta (viimeinen). Valitettavasti emme voi suorittaa yhdistämistä liukuviin ikkunoihin (vielä), mutta toivottavasti ominaisuus ilmestyy pian! Se on silti tarpeeksi tarpeisiimme.

Sillä välin meidän on suodatettava saadaksemme vain kiinnostava ikkuna: se on ikkuna, joka päättyy tänään ja päättyy huomenna:

Ja siinä on, saamme aiheen täysin päivitetyn reaaliajassa kurssimme viimeisimpien tilastojen kanssa.

Sovelluksen suorittaminen

Sovelluksen suorittaminen on helppoa, käynnistä se vain kuten mikä tahansa muu Java-sovellus. Varmistamme ensin, että kohdeaiheet on luotu oikein:

$ kafka-aiheet --luo --topia pitkäaikaiset tilastot - osiot 3 --korjauskerroin 1 - eläintarhayrityksen paikallinenhostin: 2181
$ kafka-aiheet --luo - Ajankohtaista viimeisimmät tilastot - osiot 3 --korjauskerroin 1 - zookeerauspaikannus: 2181

Ja sitten ajaa:

(juurihakemistosta)
$ mvn puhdas paketti
$ java -jar udemy-arvostelut-aggregator / target / uber-udemy-reviews-aggregator-1.0-SNAPSHOT.jar

Polta rohkeasti muutama Avro-kuluttaja nähdäksesi tulokset:

$ kafka-avro-konsoli-kuluttaja - viimeaikaiset tilastot - bootstrap-server localhost: 9092 - alusta
$ kafka-avro-console-kuluttaja --topia pitkäaikaiset tilastot --bootstrap-server localhost: 9092 - alusta

Tulokset voivat sisältää seuraavia:

{ ”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}

Meillä on nyt kaksi aihetta, jotka saavat päivitysvirtoja pitkäaikaisiin ja viimeisimpiin tilastoihin, mikä on aika siistiä. Tämä aihe on muuten erittäin hyvä ehdokas pitkään tiivistämiseen. Välitämme todella vain viimeisestä arvosta jokaiselle kurssille. Vaihe 3: valmis.

Huomautuksia

Vaikka Kafka Streams -sintaksi näyttää melko yksinkertaiselta ja luonnolliselta ymmärrettävältä, kulissien takana tapahtui paljon. Tässä on muutama huomioitava asia:

  • Tarkalleen kerran: Koska haluamme, että aggregointi on täysin tarkkaa, meidän on sallittava tarkalleen kerran suoritettava semantiikan käsittely (EOS). Tämä ominaisuus ilmestyi 0.11, ja nimi herätti paljon keskustelua. Joten siitä, että se on lyhyt ja selkeä, se tarkoittaa ”tehokkaasti kerran” ja on juuri sitä mitä tarvitsemme (pun tarkoitettu). Tämä tarkoittaa, ettei arvosteluita lasketaan jotenkin kahdesti, jos välittäjä, verkko tai sovellus vikaantuu. Siisti!
  • Saapuva tietomuoto: Kuten aiemmin mainittiin, on mahtavaa, jos tiedoissa on ”uusi” ja ”vanha” kenttä. Tämä antaisi mahdollisuuden käsitellä päivityksiä arvosteluissa ja laskea oikean keskiarvon, jos arvosteluihin päivitetään
  • Ikkunalliset yhdistelmät: 90 ikkunan laskemiseen on valtava suorituskyky, jotta ne kaikki hylätään ja viimeinen säilytetään. Olen arvioinut sen ja todennut sen olevan 25 kertaa tehottomampi kuin (edistyneemmän) alemman tason sovellusliittymän käyttö
  • Alemman tason sovellusliittymä: Tämän sovellusliittymän avulla voit luoda omat muuntajat ja laskea tarkalleen mitä tarvitset. Lähdekoodista löydät kuinka tehdä viimeisimmät tilastolliset laskelmat kyseistä sovellusliittymää käyttämällä, vaikka en aio keskustella siitä tässä viestissä, koska se ylittää sen tiedon valtavan määrän, jonka juuri heitin sinuun.
  • Suorituskyky: nämä sovellukset voidaan yhdenmukaistaa tulevan aiheen osioiden lukumäärän kanssa. Siinä on vaakatasoinen natiivi, mikä on aika mahtavaa. Kafka Streams tekee siitä todella helpon mittakaavan ylläpitämättä jonkinlaista taustaklusteria.

… Viimeinen komponentti!

4) Kafka Connect Sink - Paljastaa tiedot käyttäjille

Lopulta kaikki, josta välitämme, ovat ihmiset, jotka selaavat Udemy-verkkosivustoa ja visualisoivat kurssitilastot. Kuten useimmissa verkkopalveluissa, tietojen tarjoamista tukee usein jonkinlainen tietokanta. Esimerkiksi olen valinnut relaatiotietokannan (PostgreSQL), mutta voin valita NoSQL-tietokannan, kuten MongoDB, tai hakuhakemiston, kuten ElasticSearch. Mahdollisuudet ovat rajattomat, ja Kafka Connect -allashankkeja on olemassa melkein minkä tahansa tekniikan suhteen.

Kafka Connect -putkilinja

Kafka Connect

Kafka Connect on kehys, johon kehittäjät voivat luoda liittimiä. Nämä liittimet voivat olla kahdenlaisia: Source ja Sink. Lähde ovat tuottajia, Sink ovat kuluttajia. Kafka Connectin takana on kaunis asia, että se tarjoaa sinulle infrastruktuurin minkä tahansa liittimen käyttämiseen. Loppukäyttäjälle liittimen käyttäminen on yhtä helppoa kuin kokoonpanon ajaminen. Muiden ihmisten työn uudelleenkäyttö kuulostaa unelmalta, eikö niin? No, siitä Kafka Connect on kyse.

Tutustu Kafka Connect -järjestelmään yksityiskohtaisesti tutustumalla Kafka Connect -kurssiini

JDBC-pesuallas

Tässä on hyvä uutinen: en aio näyttää sinulle enää Java-koodia. Emme aio keksiä pyörää laittaaksesi aiheemme tietoja PostgreSQL-taulukkoon. Sen sijaan aiomme hyödyntää hyvin kirjoitettua ja taistelltua testattua Kafka-liitintä vain työntämällä vähän kokoonpanoa.

Käytämme Confluentin erinomaista Kafka Connect JDBC -alustaa. Itse kokoonpano on yksinkertainen:

Huomioitavaa:

  • tehtävät.max = 3: tämä on liitimen suuntaisuuden taso. Tämä tarkoittaa, että spin korkeintaan kolme tehtävää lukeaksesi syöteaiheet. Voit suurentaa sitä määrää skaalataksesi osioiden lukumäärään, josta luet. Tämä johtuu siitä, että kaikki Kafka Connect -allas ovat kulissien takana vain Kafkan kuluttajat
  • key.converter: Olen päättänyt, että kurssin tunnistettavat aiheeni paljastetaan merkkijonona. Yhdyskuntatyöntekijöille toimitettu oletusmuunnin on Avro, se johtaisi virheeseen, jos en ohittaisi key.converteriä. Käytämme siis yksinkertaistettua StringConverter-ohjelmaa.
  • Voit ottaa käyttöön monia liittimiä (useampia kuin yksi kokoonpano) Kafka Connect-klusteriin. Hyödyt? Voisimme upottaa aiheemme 10 eri tietokantaan, 10 eri tekniikkaan palvellaksesi organisaation eri tarkoituksia ja sovelluksia, kaikki samasta yhteys klusterista. Voisimme myös laajentaa aiheiden luetteloa uppoavaksi, jotta jotkut tietotieteilijät voivat tehdä hienoja analyysejä esimerkiksi petosalgoritmin tehokkuudesta.
Jotkut tuloksista saamme PostgreSQL-tietokantamme

Viimeisenä mutta ei vähäisimpänä - Viimeiset muistiinpanot

Kuten huomasit, mahdollisuudet Kafkassa ovat rajattomat. Ekosysteemi on erittäin suuri, ja siellä on tonnia kuvioita ja hienoja käsitteitä opittavaksi. Haluan, että sinulla on tänään seuraavat takeet:

  • Tapahtumien hankinta Kafkassa on mahtavaa. Saada virta jokaisesta yrityksessäsi tapahtuneesta tapahtumasta voi olla unelma.
  • Kafka on erinomainen ehdokas selkärankaksi mikropalveluihisi. Jakaa joitain monimutkaisia ​​virtauksia helpoiksi ja tee jokainen mikropalvelu suorittamaan ydinosaamisensa parhaimmillaan. Jos petossovellus paranee, muihin järjestelmiin ei tulisi häiriöitä!
  • Käytä Confluent Schema -rekisteriä. Data on ensimmäisen luokasi kansalainen Apache Kafkassa, ja kaaviot tekevät kaikkien elämästä paljon yksinkertaisempaa. Dokumentaatio on upotettu, jäsentämisvirheet ovat käytännössä olemattomia. Voit jopa saada järjestelmän kehittämään ajan myötä, kunhan varmistat, että se on yhteensopiva eteen- ja taaksepäin.
  • Hyödynnä jokaiselle työlle oikeat työkalut. Kuten olette nähneet, siellä oli sekoitus Producer, Streams ja Connect. Pyrin kaikin keinoin pyörän keksimisen estämiseksi. Ota aikaa arvioidaksesi ratkaisuja, ennen kuin sukellat heti suosikkitekniikkaasi.
  • Älä koskaan lopeta oppimista. Olen käyttänyt Kafkaa jo yli vuoden ja jatkan oppimista päivittäin. Haluan myös jakaa kokemukseni, joten tarkista Apache Kafka aloittelijoille, Kafka Connect, Kafka Streams, Kafka Setup & Administration, Confluent Schema Registry & REST Proxy, Apache Kafka Security, Kafka Monitoring & Operations, Confluent KSQL.
  • Mitä tämä blogi ei kaannut (ja joukko tavaroita, joista on vielä opittava tai kirjoitettava): Kafka Consumers API, Kafka Admin Client, Kafka Streams Lower Level API, Kafka Streams liittyy tietojen rikastamiseen, Kafka Connect Source, Kafka Security, Kafka Valvonta, Kafkan asennus ja hallinta, Kafka REST Proxy, KSQL, Zookeeper (ja olen ehkä unohtanut muut asiat). Ekosysteemi on valtava
  • KSQL on tulevaisuus: Useimmat, elleivät kaikki tämän blogin kirjoitetut Kafka Streams -sovellukset, voidaan korvata vain muutamilla KSQL-lauseilla heti, kun sillä on virallinen Avro-tuki. Se avaa stream-prosessoinnin paljon laajemmalle yleisölle ja mahdollistaa useiden erä-SQL-sovellusten nopean siirtymisen Kafkaan. Aion julkaista seuraavan blogin, kun siirrän koodin KSQL: ään. Pysy kanavalla!

Kafka on upea tekniikan pala. Olen vakuuttunut, että se saa kaikki organisaatiot menestymään joustavuudessa ja reaktiivisuudessa. Kafkalla on paljon opittavaa, ja toivon vilpittömästi, että olen tämän blogin kautta selvästi paljastanut kuinka ketjuttaa mikropalveluita muuntaaksesi eräputken reaaliaikaiseksi.

Taputtele, jaa, kommentoi, anna minulle palautetta. Haluaisin kuulla ajatuksesi! Kiitos Michaelille, Gwenille, Camille, Octaville ja Ericille oikolukuista ja parannusten tarjoamisesta :)

Hyvää oppimista!