Atraskite srautinio duomenų apdorojimo galią su „Apache Kafka Streams“. Šis išsamus vadovas apima pagrindus, architektūrą, naudojimo atvejus ir geriausias praktikas kuriant realaus laiko programas.
Srautinio apdorojimo galia: išsami „Apache Kafka Streams“ analizė
Šiandieniniame sparčiai besikeičiančiame skaitmeniniame pasaulyje verslas turi reaguoti į įvykius realiu laiku. Tradiciniai paketinių duomenų apdorojimo metodai nebėra pakankami nuolatiniam duomenų srautui, kurį generuoja modernios programos, valdyti. Čia į pagalbą ateina srautinis apdorojimas. Srautinis apdorojimas leidžia analizuoti ir transformuoti duomenis realiu laiku, suteikdamas galimybę priimti neatidėliotinus sprendimus ir laiku imtis veiksmų.
Tarp įvairių srautinio apdorojimo karkasų „Apache Kafka Streams“ išsiskiria kaip galinga ir lengvasvorė biblioteka, sukurta tiesiogiai ant „Apache Kafka“ platformos. Šis vadovas pateikia išsamią „Kafka Streams“ apžvalgą, apimančią pagrindines sąvokas, architektūrą, naudojimo atvejus ir geriausias praktikas.
Kas yra „Apache Kafka Streams“?
„Apache Kafka Streams“ yra kliento biblioteka, skirta realaus laiko programoms ir mikropaslaugoms kurti, kur įvesties ir (arba) išvesties duomenys saugomi „Apache Kafka“ klasteriuose. Ji supaprastina srautinio apdorojimo programų kūrimą, suteikdama aukšto lygio DSL (angl. Domain Specific Language) ir žemo lygio Procesoriaus API. Pagrindinės savybės:
- Sukurta ant „Kafka“: Išnaudoja „Kafka“ mastelio keitimo galimybes, atsparumą gedimams ir patvarumą.
- Lengvasvorė: Paprasta biblioteka, lengvai integruojama į esamas programas.
- Keičiamo mastelio: Gali apdoroti didelius duomenų kiekius su horizontalaus mastelio keitimo galimybe.
- Atspari gedimams: Sukurta dideliam pasiekiamumui su atsparumo gedimams mechanizmais.
- Lygiai vieno karto semantika: Užtikrina, kad kiekvienas įrašas bus apdorotas lygiai vieną kartą, net ir įvykus gedimams.
- Būsenos apdorojimas: Palaiko būsenos operacijas, tokias kaip agregavimas, langavimas ir sujungimai.
- Lanksčios API: Siūlo tiek aukšto lygio DSL, tiek žemo lygio Procesoriaus API skirtingiems valdymo lygiams.
„Kafka Streams“ architektūra
Norint kurti patikimas ir keičiamo mastelio programas, labai svarbu suprasti „Kafka Streams“ architektūrą. Štai pagrindinių komponentų apžvalga:
„Kafka“ klasteris
„Kafka Streams“ naudoja „Kafka“ klasterį duomenims saugoti ir valdyti. „Kafka“ veikia kaip centrinė nervų sistema jūsų srautinio apdorojimo programai, užtikrindama patvarią saugyklą, atsparumą gedimams ir mastelio keitimą.
„Kafka Streams“ programa
„Kafka Streams“ programa yra pagrindinė logika, kuri apdoroja duomenų srautus. Ją sudaro topologija, kuri apibrėžia duomenų srautą ir taikomas transformacijas. Programa paprastai supakuojama kaip JAR failas ir diegiama viename ar daugiau apdorojimo mazgų.
Topologija
Topologija yra nukreiptasis aciklinis grafas (DAG), kuris vaizduoja duomenų srautą „Kafka Streams“ programoje. Ją sudaro mazgai, kurie atspindi apdorojimo veiksmus, tokius kaip duomenų skaitymas iš „Kafka“ temos, duomenų transformavimas arba duomenų rašymas į kitą „Kafka“ temą. Topologija apibrėžiama naudojant DSL arba Procesoriaus API.
Procesoriai
Procesoriai yra „Kafka Streams“ topologijos statybiniai blokai. Jie atlieka faktines duomenų apdorojimo operacijas. Yra dviejų tipų procesoriai:
- Šaltinio procesoriai: Skaito duomenis iš „Kafka“ temų.
- Gavėjo procesoriai: Rašo duomenis į „Kafka“ temas.
- Procesorių mazgai: Transformuoja duomenis pagal apibrėžtą logiką.
Būsenos saugyklos
Būsenos saugyklos naudojamos tarpiniams rezultatams ar agreguotiems duomenims saugoti srautinio apdorojimo metu. Jos paprastai įgyvendinamos kaip įterptosios „rakto-reikšmės“ saugyklos „Kafka Streams“ programoje. Būsenos saugyklos yra labai svarbios būsenos operacijoms, tokioms kaip agregavimas ir langavimas.
Gijos ir užduotys
„Kafka Streams“ programa veikia vienoje ar daugiau gijų. Kiekviena gija yra atsakinga už dalies topologijos vykdymą. Kiekviena gija toliau skirstoma į užduotis, kurios priskiriamos konkrečioms įvesties „Kafka“ temų particijoms. Šis lygiagretumas leidžia „Kafka Streams“ keisti mastelį horizontaliai.
Pagrindinės „Kafka Streams“ sąvokos
Norint efektyviai naudoti „Kafka Streams“, reikia suprasti keletą pagrindinių sąvokų:
Srautai ir lentelės
„Kafka Streams“ skiria srautus ir lenteles:
- Srautas: Atspindi neribotą, nekintamą duomenų įrašų seką. Kiekvienas įrašas atspindi įvykį, nutikusį tam tikru laiko momentu.
- Lentelė: Atspindi materializuotą srauto vaizdą. Tai yra „rakto-reikšmės“ porų rinkinys, kur raktas atspindi unikalų identifikatorių, o reikšmė – dabartinę su tuo raktu susijusio subjekto būseną.
Galite konvertuoti srautą į lentelę naudodami operacijas, tokias kaip `KTable`, arba agreguodami duomenis.
Laiko langai
Laiko langai naudojami duomenų įrašams grupuoti pagal laiką. Jie yra būtini atliekant agregavimą ir kitas būsenos operacijas per tam tikrą laikotarpį. „Kafka Streams“ palaiko skirtingų tipų laiko langus, įskaitant:
- Nepersidengiantys langai (Tumbling Windows): Fiksuoto dydžio, nepersidengiantys langai.
- Persidengiantys langai (Hopping Windows): Fiksuoto dydžio, persidengiantys langai.
- Slenkantys langai (Sliding Windows): Langai, kurie slenka per laiką pagal nustatytą intervalą.
- Sesijos langai (Session Windows): Dinaminiai langai, kurie apibrėžiami pagal vartotojo ar subjekto aktyvumą.
Sujungimai
„Kafka Streams“ palaiko įvairių tipų sujungimus, skirtus duomenims iš skirtingų srautų ar lentelių sujungti:
- Srauto-srauto sujungimas: Sujungia du srautus pagal bendrą raktą ir apibrėžtą langą.
- Srauto-lentelės sujungimas: Sujungia srautą su lentele pagal bendrą raktą.
- Lentelės-lentelės sujungimas: Sujungia dvi lenteles pagal bendrą raktą.
Lygiai vieno karto semantika
Užtikrinimas, kad kiekvienas įrašas būtų apdorotas lygiai vieną kartą, yra labai svarbus daugeliui srautinio apdorojimo programų. „Kafka Streams“ teikia lygiai vieno karto semantiką, pasinaudodama „Kafka“ transakcinėmis galimybėmis. Tai garantuoja, kad net ir įvykus gedimams, jokie duomenys nebus prarasti ar dubliuoti.
„Apache Kafka Streams“ naudojimo atvejai
„Kafka Streams“ tinka įvairiems naudojimo atvejams įvairiose pramonės šakose:
Realaus laiko stebėjimas ir perspėjimai
Stebėkite sistemos metrikas, programų žurnalus ir vartotojų veiklą realiu laiku, kad nustatytumėte anomalijas ir suaktyvintumėte perspėjimus. Pavyzdžiui, finansų įstaiga gali stebėti transakcijų duomenis dėl sukčiavimo veiklos ir nedelsiant blokuoti įtartinas transakcijas.
Sukčiavimo aptikimas
Analizuokite transakcijų duomenis realiu laiku, kad nustatytumėte sukčiavimo modelius ir išvengtumėte finansinių nuostolių. Derindami „Kafka Streams“ su mašininio mokymosi modeliais, galite sukurti sudėtingas sukčiavimo aptikimo sistemas.
Personalizavimas ir rekomendacijų varikliai
Kurkite realaus laiko rekomendacijų variklius, kurie personalizuoja vartotojų patirtį pagal jų naršymo istoriją, pirkimų istoriją ir kitus elgsenos duomenis. El. prekybos platformos gali tai naudoti, siūlydamos klientams aktualius produktus ar paslaugas.
Daiktų interneto (IoT) duomenų apdorojimas
Apdorokite duomenų srautus iš IoT įrenginių realiu laiku, kad stebėtumėte įrangos našumą, optimizuotumėte energijos suvartojimą ir prognozuotumėte priežiūros poreikius. Pavyzdžiui, gamykla gali naudoti „Kafka Streams“, kad analizuotų jutiklių duomenis iš mašinų, siekiant nustatyti galimus gedimus ir suplanuoti prevencinę priežiūrą.
Žurnalų agregavimas ir analizė
Agreguokite ir analizuokite žurnalų duomenis iš įvairių šaltinių realiu laiku, kad nustatytumėte našumo problemas, saugumo grėsmes ir kitas operacines problemas. Tai gali padėti pagerinti sistemos stabilumą ir saugumą.
Paspaudimų srauto analizė
Analizuokite vartotojų paspaudimų srauto duomenis, kad suprastumėte vartotojų elgseną, optimizuotumėte svetainės našumą ir personalizuotumėte rinkodaros kampanijas. Internetiniai mažmenininkai gali tai naudoti, kad stebėtų vartotojų naršymą ir nustatytų tobulintinas sritis savo svetainėje.
Pavyzdinis scenarijus: realaus laiko užsakymų apdorojimas
Apsvarstykite el. prekybos platformą, kuriai reikia apdoroti užsakymus realiu laiku. Naudodami „Kafka Streams“, galite sukurti srautinio apdorojimo programą, kuri:
- Nuskaito užsakymų įvykius iš „Kafka“ temos.
- Praturtina užsakymo duomenis kliento informacija iš duomenų bazės.
- Apskaičiuoja bendrą užsakymo sumą ir taiko nuolaidas.
- Atnaujina atsargų lygius.
- Siunčia užsakymo patvirtinimo el. laiškus klientams.
- Skelbia užsakymų įvykius kitoms „Kafka“ temoms tolesniam apdorojimui (pvz., siuntimui, atsiskaitymui).
Ši programa gali apdoroti tūkstančius užsakymų per sekundę, užtikrindama, kad užsakymai būtų apdorojami greitai ir efektyviai.
Darbo su „Apache Kafka Streams“ pradžia
Štai žingsnis po žingsnio vadovas, kaip pradėti dirbti su „Kafka Streams“:
1. Paruoškite „Kafka“ klasterį
Norint naudoti „Kafka Streams“, jums reikia veikiančio „Kafka“ klasterio. Galite arba įdiegti vietinį „Kafka“ klasterį naudodami įrankius, tokius kaip „Docker“, arba naudoti valdomą „Kafka“ paslaugą, pvz., „Confluent Cloud“ ar „Amazon MSK“.
2. Pridėkite „Kafka Streams“ priklausomybę į savo projektą
Pridėkite „Kafka Streams“ priklausomybę į savo projekto kūrimo failą (pvz., `pom.xml` „Maven“ atveju arba `build.gradle` „Gradle“ atveju).
Maven:
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</artifactId>
<version>[YOUR_KAFKA_VERSION]</version>
</dependency>
Gradle:
dependencies {
implementation "org.apache.kafka:kafka-streams:[YOUR_KAFKA_VERSION]"
}
3. Parašykite savo „Kafka Streams“ programą
Parašykite savo „Kafka Streams“ programą naudodami DSL arba Procesoriaus API. Štai paprastas pavyzdys naudojant DSL:
import org.apache.kafka.streams.KafkaStreams;
import org.apache.kafka.streams.StreamsBuilder;
import org.apache.kafka.streams.StreamsConfig;
import org.apache.kafka.streams.Topology;
import org.apache.kafka.streams.kstream.KStream;
import java.util.Properties;
public class WordCount {
public static void main(String[] args) {
Properties props = new Properties();
props.put(StreamsConfig.APPLICATION_ID_CONFIG, "wordcount-application");
props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, org.apache.kafka.common.serialization.Serdes.String().getClass());
props.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, org.apache.kafka.common.serialization.Serdes.String().getClass());
StreamsBuilder builder = new StreamsBuilder();
KStream<String, String> textLines = builder.stream("input-topic");
KStream<String, String> wordCounts = textLines
.flatMapValues(textLine -> Arrays.asList(textLine.toLowerCase().split("\\W+")));
wordCounts.to("output-topic");
Topology topology = builder.build();
KafkaStreams streams = new KafkaStreams(topology, props);
streams.start();
}
}
Šis pavyzdys skaito tekstines eilutes iš `input-topic`, suskaido kiekvieną eilutę į žodžius, paverčia žodžius mažosiomis raidėmis ir rašo žodžius į `output-topic`.
4. Konfigūruokite savo programą
Konfigūruokite savo „Kafka Streams“ programą naudodami `StreamsConfig` klasę. Reikia nurodyti bent šias savybes:
- `application.id`: Unikalus jūsų programos identifikatorius.
- `bootstrap.servers`: „Kafka“ brokerių, su kuriais reikia prisijungti, sąrašas.
- `default.key.serde`: Numatytasis raktų serializatorius/deserializatorius.
- `default.value.serde`: Numatytasis reikšmių serializatorius/deserializatorius.
5. Paleiskite savo programą
Paleiskite savo „Kafka Streams“ programą kaip atskirą „Java“ programą. Prieš paleisdami programą, įsitikinkite, kad „Kafka“ veikia ir temos yra sukurtos.
Geriausios „Apache Kafka Streams“ praktikos
Štai keletas geriausių praktikų, kaip kurti patikimas ir keičiamo mastelio „Kafka Streams“ programas:
Pasirinkite tinkamą API
Nuspręskite, ar naudoti aukšto lygio DSL, ar žemo lygio Procesoriaus API, atsižvelgdami į savo programos reikalavimus. DSL yra lengviau naudoti paprastoms transformacijoms, o Procesoriaus API suteikia daugiau kontrolės ir lankstumo sudėtingesniems scenarijams.
Optimizuokite būsenos saugyklos konfigūraciją
Tinkamai konfigūruokite būsenos saugyklas, kad optimizuotumėte našumą. Atsižvelkite į tokius veiksnius kaip atminties paskirstymas, podėliavimas ir išsaugojimas. Labai didelėms būsenos saugykloms apsvarstykite galimybę naudoti „RocksDB“ kaip pagrindinį saugyklos variklį.
Tvarkykite klaidas ir išimtis
Įdiekite tinkamus klaidų ir išimčių tvarkymo mechanizmus, kad užtikrintumėte, jog jūsų programa gali sklandžiai atsigauti po gedimų. Naudokite integruotas „Kafka Streams“ atsparumo gedimams funkcijas, kad sumažintumėte duomenų praradimą.
Stebėkite savo programą
Stebėkite savo „Kafka Streams“ programą naudodami integruotas „Kafka“ metrikas arba išorinius stebėjimo įrankius. Sekite pagrindines metrikas, tokias kaip apdorojimo delsą, pralaidumą ir klaidų dažnį. Apsvarstykite galimybę naudoti tokius įrankius kaip „Prometheus“ ir „Grafana“ stebėjimui.
Derinkite „Kafka“ konfigūraciją
Derinkite „Kafka“ konfigūracijos parametrus, kad optimizuotumėte našumą pagal savo programos darbo krūvį. Atkreipkite dėmesį į tokius nustatymus kaip `num.partitions`, `replication.factor` ir `compression.type`.
Apsvarstykite duomenų serializavimą
Pasirinkite efektyvų duomenų serializavimo formatą, pvz., „Avro“ ar „Protobuf“, kad sumažintumėte duomenų dydį ir pagerintumėte našumą. Užtikrinkite, kad jūsų serializatoriai ir deserializatoriai būtų suderinami tarp skirtingų jūsų programos versijų.
Pažangios temos
Interaktyvios užklausos
„Kafka Streams“ teikia interaktyvias užklausas, kurios leidžia realiu laiku užklausti jūsų programos būseną. Tai naudinga kuriant informacinius skydelius ir teikiant įžvalgas vartotojams.
Lygiai vieno karto vs. bent vieno karto semantika
Nors „Kafka Streams“ palaiko lygiai vieno karto semantiką, svarbu suprasti kompromisus tarp lygiai vieno karto ir bent vieno karto semantikos. Lygiai vieno karto semantika gali sukelti tam tikrą našumo pridėtinę naštą, todėl reikia pasirinkti tinkamą nuoseklumo lygį pagal savo programos reikalavimus.
Integracija su kitomis sistemomis
„Kafka Streams“ galima lengvai integruoti su kitomis sistemomis, tokiomis kaip duomenų bazės, pranešimų eilės ir mašininio mokymosi platformos. Tai leidžia kurti sudėtingus duomenų vamzdynus, apimančius kelias sistemas.
Išvada
„Apache Kafka Streams“ yra galingas ir universalus karkasas, skirtas realaus laiko srautinio apdorojimo programoms kurti. Jo paprastumas, mastelio keitimo galimybės ir atsparumas gedimams daro jį puikiu pasirinkimu įvairiems naudojimo atvejams. Suprasdami pagrindines sąvokas, architektūrą ir geriausias praktikas, aprašytas šiame vadove, galite pasinaudoti „Kafka Streams“, kad sukurtumėte patikimas ir keičiamo mastelio programas, atitinkančias šiandieninio sparčiai besikeičiančio skaitmeninio pasaulio reikalavimus.
Giliau gilindamiesi į srautinį apdorojimą su „Kafka Streams“, atrasite jo didžiulį potencialą transformuoti neapdorotus duomenis į veiksmingas įžvalgas realiu laiku. Pasinaudokite srautinio apdorojimo galia ir atverkite naujas galimybes savo verslui.