Introduksjon til Hazelcast Jet

1. Introduksjon

I denne opplæringen lærer vi om Hazelcast Jet. Det er en distribuert databehandlingsmotor levert av Hazelcast, Inc. og er bygget på toppen av Hazelcast IMDG.

Hvis du vil lære om Hazelcast IMDG, er det en artikkel for å komme i gang.

2. Hva er Hazelcast Jet?

Hazelcast Jet er en distribuert databehandlingsmotor som behandler data som strømmer. Den kan behandle data som er lagret i en database eller filer, samt data som streames av en Kafka-server.

Videre kan den utføre samlede funksjoner over uendelige datastrømmer ved å dele strømmene i delmengder og bruke aggregering over hvert delsett. Dette konseptet er kjent som vindusvindu i Jet-terminologien.

Vi kan distribuere Jet i en klynge av maskiner og deretter sende våre databehandlingsjobber til den. Jet vil få alle medlemmene i klyngen til å behandle dataene automatisk. Hvert medlem av klyngen bruker en del av dataene, og det gjør det enkelt å skalere opp til ethvert nivå av gjennomstrømning.

Her er de typiske brukssakene for Hazelcast Jet:

  • Sanntids strømbehandling
  • Rask batchbehandling
  • Behandler Java 8 Streams på en distribuert måte
  • Databehandling i Microservices

3. Oppsett

For å sette Hazelcast Jet i vårt miljø, trenger vi bare å legge til en enkelt Maven-avhengighet til vår pom.xml.

Slik gjør vi det:

 com.hazelcast.jet hasselcast-jet 4.2 

Inkludert denne avhengigheten lastes ned en 10 Mb jar-fil som gir oss all infrastrukturen vi trenger for å bygge en distribuert databehandlingsrørledning.

Den siste versjonen for Hazelcast Jet finner du her.

4. Eksempel på applikasjon

For å lære mer om Hazelcast Jet, oppretter vi et eksempel på et program som tar et inntak av setninger og et ord å finne i disse setningene, og returnerer antallet av det angitte ordet i disse setningene.

4.1. Rørledningen

En rørledning danner den grunnleggende konstruksjonen for en Jet-applikasjon. Behandling innen en rørledning følger disse trinnene:

  • lese data fra en kilde
  • transformere dataene
  • skrive data i en vask

For vår søknad vil rørledningen lese fra en distribuert Liste, bruke transformasjonen av gruppering og aggregering og til slutt skrive til en distribuert Kart.

Slik skriver vi rørledningen vår:

private 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)); retur p; }

Når vi har lest fra kilden, krysser vi dataene og deler dem rundt i rommet ved hjelp av et vanlig uttrykk. Etter det filtrerer vi ut emnene.

Til slutt grupperer vi ordene, samler dem og skriver resultatene til a Kart.

4.2. Jobben

Nå som rørledningen vår er definert, oppretter vi en jobb for å utføre rørledningen.

Slik skriver vi a countWord funksjon som godtar parametere og returnerer tellingen:

public Long countWord (List setninger, strengord) {long count = 0; JetInstance jet = Jet.newJetInstance (); prøv {List textList = jet.getList (LIST_NAME); textList.addAll (setninger); Rørledning p = createPipeLine (); jet.newJob (p). bli med (); Kartteller = jet.getMap (MAP_NAME); count = count.get (word); } til slutt {Jet.shutdownAll (); } returantall; }

Vi oppretter en Jet-forekomst først for å skape vår jobb og bruke rørledningen. Deretter kopierer vi inngangen Liste til en distribuert liste slik at den er tilgjengelig i alle tilfeller.

Vi sender deretter inn en jobb ved hjelp av rørledningen som vi har bygget ovenfor. Metoden ny jobb() returnerer en kjørbar jobb som startes av Jet asynkront. De bli med metoden venter på at jobben skal fullføres og kaster en unntak hvis jobben er fullført med en feil.

Når jobben er fullført, blir resultatene hentet i en distribuert Kart, som vi definerte i rørledningen vår. Så, vi får Kart fra Jet-forekomsten og få tellingen av ordet mot den.

Til slutt stengte vi Jet-forekomsten. Det er viktig å slå den av etter at henrettelsen vår er avsluttet, som Jet-forekomst starter sine egne tråder. Ellers vil Java-prosessen fortsatt være i live selv etter at metoden har avsluttet.

Her er en enhetstest som tester koden vi har skrevet for Jet:

@Test offentlig ugyldig nårGivenSentencesAndWord_ThenReturnCountOfWord () {Liste setninger = ny ArrayList (); sentences.add ("Det første sekundet var ok, men det andre sekundet var tøft."); WordCounter wordCounter = ny WordCounter (); lang countSecond = wordCounter.countWord (setninger, "andre"); assertEquals (3, countSecond); }

5. Konklusjon

I denne artikkelen har vi lært om Hazelcast Jet. For å lære mer om det og dets funksjoner, se håndboken.

Som vanlig kan koden for eksemplene som brukes i denne artikkelen finnes på Github.


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