Introduktion til Hazelcast Jet

1. Introduktion

I denne vejledning lærer vi om Hazelcast Jet. Det er en distribueret databehandlingsmotor leveret af Hazelcast, Inc. og er bygget oven på Hazelcast IMDG.

Hvis du vil lære mere om Hazelcast IMDG, er her en artikel til at komme i gang.

2. Hvad er Hazelcast Jet?

Hazelcast Jet er en distribueret databehandlingsmotor, der behandler data som streams. Det kan behandle data, der er gemt i en database eller filer såvel som de data, der streames af en Kafka-server.

Desuden kan den udføre samlede funktioner over uendelige datastrømme ved at opdele strømme i delmængder og anvende aggregering over hver delmængde. Dette koncept er kendt som vinduesvindue i Jet-terminologien.

Vi kan distribuere Jet i en klynge af maskiner og derefter sende vores databehandlingsjob til det. Jet får alle medlemmer af klyngen til at behandle dataene automatisk. Hvert medlem af klyngen bruger en del af dataene, og det gør det let at skalere op til ethvert niveau for gennemstrømning.

Her er de typiske brugssager for Hazelcast Jet:

  • Streaming i realtid
  • Hurtig batchbehandling
  • Behandling af Java 8 Streams distribueret
  • Databehandling i mikroservices

3. Opsætning

For at konfigurere Hazelcast Jet i vores miljø er vi bare nødt til at tilføje en enkelt Maven-afhængighed til vores pom.xml.

Sådan gør vi det:

 com.hazelcast.jet hazelcast-jet 4.2 

Inkludering af denne afhængighed downloader en 10 Mb jar-fil, der giver os al den infrastruktur, vi har brug for til at opbygge en distribueret databehandlingspipeline.

Den seneste version til Hazelcast Jet kan findes her.

4. Eksempel på anvendelse

For at lære mere om Hazelcast Jet opretter vi en prøveapplikation, der tager et input af sætninger og et ord at finde i disse sætninger og returnerer antallet af det angivne ord i disse sætninger.

4.1. Rørledningen

En rørledning danner den grundlæggende konstruktion for en Jet-applikation. Behandling inden for en rørledning følger disse trin:

  • læse data fra en kilde
  • transformere dataene
  • skriv data i en vask

For vores ansøgning vil rørledningen læse fra en distribueret Liste, anvende transformationen af ​​gruppering og aggregering og skriv til sidst til en distribueret Kort.

Sådan skriver vi vores pipeline:

privat Pipeline createPipeLine () {Pipeline p = Pipeline.create (); p.readFrom (Sources.list (LIST_NAME)) .flatMap (word -> traverseArray (word.toLowerCase (). split ("\ W +"))). filter (word ->! word.isEmpty ()) .groupingKey (wholeItem ()) .aggregate (counting ()) .writeTo (Sinks.map (MAP_NAME)); returnere p; }

Når vi først har læst fra kilden, krydser vi dataene og deler dem rundt i rummet ved hjælp af et regulært udtryk. Derefter filtrerer vi emnerne ud.

Endelig grupperer vi ordene, samler dem og skriver resultaterne til a Kort.

4.2. Jobbet

Nu hvor vores rørledning er defineret, opretter vi et job til udførelse af rørledningen.

Sådan skriver vi en countWord funktion, der accepterer parametre og returnerer antallet:

public Long countWord (List sætninger, strengord) {long count = 0; JetInstance jet = Jet.newJetInstance (); prøv {List textList = jet.getList (LIST_NAME); textList.addAll (sætninger); Rørledning p = createPipeLine (); jet.newJob (p). slutte sig til (); Kortoptællinger = jet.getMap (MAP_NAME); count = count.get (word); } endelig {Jet.shutdownAll (); } returantal }

Vi opretter en Jet-instans først for at skabe vores job og bruge pipelinen. Dernæst kopierer vi input Liste til en distribueret liste, så den er tilgængelig over alle forekomster.

Vi sender derefter et job ved hjælp af den rørledning, vi har bygget ovenfor. Metoden nyt job() returnerer et eksekverbart job, der startes af Jet asynkront. Det tilslutte metode venter på, at jobbet er afsluttet og kaster et undtagelse hvis jobbet er afsluttet med en fejl.

Når jobbet er afsluttet, hentes resultaterne i en distribueret Kort, som vi definerede i vores pipeline. Så vi får Kort fra Jet-forekomsten og få optællinger af ordet imod det.

Endelig lukkede vi Jet-instansen. Det er vigtigt at lukke det, når vores henrettelse er afsluttet, som Jet-instans starter sine egne tråde. Ellers vil vores Java-proces stadig være i live, selv efter vores metode er afsluttet.

Her er en enhedstest, der tester den kode, vi har skrevet til Jet:

@Test offentlig ugyldigt nårGivenSentencesAndWord_ThenReturnCountOfWord () {Liste sætninger = ny ArrayList (); sætninger.add ("Det første sekund var i orden, men det andet sekund var hårdt."); WordCounter wordCounter = ny WordCounter (); lang countSecond = wordCounter.countWord (sætninger, "anden"); assertEquals (3, countSecond); }

5. Konklusion

I denne artikel har vi lært om Hazelcast Jet. For at lære mere om det og dets funktioner henvises til manualen.

Som sædvanlig kan koden til eksemplerne i denne artikel findes på Github.


$config[zx-auto] not found$config[zx-overlay] not found