Lietuvių

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:

„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:

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:

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:

Sujungimai

„Kafka Streams“ palaiko įvairių tipų sujungimus, skirtus duomenims iš skirtingų srautų ar lentelių sujungti:

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:

  1. Nuskaito užsakymų įvykius iš „Kafka“ temos.
  2. Praturtina užsakymo duomenis kliento informacija iš duomenų bazės.
  3. Apskaičiuoja bendrą užsakymo sumą ir taiko nuolaidas.
  4. Atnaujina atsargų lygius.
  5. Siunčia užsakymo patvirtinimo el. laiškus klientams.
  6. 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:

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.

Tolesnis mokymasis