Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy" Salama ry mponina ao Khabro! Ity boky ity dia mety ho an'ny mpamorona izay te hahatakatra ny fanodinana kofehy. Ny fahatakarana ny fandaharana zaraina dia hanampy anao hahatakatra bebe kokoa ny Kafka sy Kafka Streams. Tsara ny mahafantatra ny rafitra Kafka, saingy tsy ilaina izany: Holazaiko aminao izay rehetra ilainao. Ireo mpamorona Kafka efa za-draharaha sy ireo vao haingana dia hianatra ny fomba hamoronana rindranasa fanodinana stream mahaliana amin'ny alàlan'ny tranomboky Kafka Streams ato amin'ity boky ity. Ireo mpandrindra Java manelanelana sy mandroso izay efa zatra amin'ny foto-kevitra toa ny serialization dia hianatra hampihatra ny fahaizany amin'ny famoronana rindranasa Kafka Streams. Ny kaody loharanon'ny boky dia nosoratana tamin'ny Java 8 ary mampiasa be dia be ny Java 8 lambda expression syntax, ka ny fahafantarana ny fomba fiasa amin'ny fiasa lambda (na amin'ny fiteny fandaharana hafa aza) dia ho ilaina.

Sombiny. 5.3. Fanangonam-bokatra sy fikandrana

Ato amin'ity fizarana ity, hiroso amin'ny fijerena ireo faritra mampanantena indrindra amin'ny Kafka Streams isika. Hatreto dia efa nodinihinay ireto lafiny manaraka ireto ao amin'ny Kafka Streams:

  • famoronana topolojia fanodinana;
  • mampiasa fanjakana amin'ny fampiharana streaming;
  • manao fifandraisana amin'ny onjam-peo;
  • fahasamihafan'ny renirano hetsika (KStream) sy renirano fanavaozana (KTable).

Amin'ireto ohatra manaraka ireto dia hatambatra ireo singa rehetra ireo. Hianatra momba ny fikandrana ihany koa ianao, endri-javatra lehibe hafa amin'ny fampiharana streaming. Ny ohatra voalohany ataontsika dia ny fanangonana tsotra.

5.3.1. Fanangonam-bokatra amin'ny sehatry ny indostria

Ny fanangonana sy ny fanangonana dia fitaovana tena ilaina rehefa miasa amin'ny angon-drakitra streaming. Matetika tsy ampy ny fandinihana ny firaketana tsirairay rehefa voaray. Mba hanesorana fampahalalana fanampiny avy amin'ny angon-drakitra dia ilaina ny manangona sy manambatra azy ireo.

Amin'ity ohatra ity dia hitafy ny akanjon'ny mpivarotra andro iray ianao izay mila manara-maso ny habetsaky ny varotra amin'ny orinasa amin'ny indostria maro. Raha ny tena manokana, dia liana amin'ireo orinasa dimy manana fivarotana lehibe indrindra amin'ny indostria tsirairay ianao.

Ny fanangonana toy izany dia mitaky ireto dingana maromaro manaraka ireto mba handikana ny angona ho amin'ny endrika tiana (miresaka amin'ny teny ankapobeny).

  1. Mamorona loharano mifototra amin'ny lohahevitra izay mamoaka vaovao momba ny varotra stock manta. Tsy maintsy sari-tany zavatra iray karazana StockTransaction amin'ny zavatra iray karazana ShareVolume isika. Ny zava-misy dia ny zavatra StockTransaction dia misy metadata momba ny varotra, fa ny angon-drakitra momba ny isan'ny fizarana amidy ihany no ilainay.
  2. Vondrona ShareVolume angona amin'ny marika stock. Rehefa voavondrona amin'ny marika dia azonao atao ny manafoana ity angona ity amin'ny fitambaran'ny volan'ny varotra. Tsara ny manamarika fa ny fomba KStream.groupBy dia mamerina ohatra iray amin'ny karazana KGroupedStream. Ary afaka mahazo ohatra KTable ianao amin'ny fiantsoana bebe kokoa ny fomba KGroupedStream.reduce.

Inona ny interface KGroupedStream

Ny fomba KStream.groupBy sy KStream.groupByKey dia mamerina ohatra iray momba ny KGroupedStream. KGroupedStream dia fanehoana mpanelanelana amin'ny onjan'ny hetsika aorian'ny fanakambanana amin'ny fanalahidy. Tsy natao hanaovana asa mivantana miaraka aminy mihitsy. Fa kosa, KGroupedStream dia ampiasaina amin'ny hetsika fanangonana, izay miteraka KTtable foana. Ary satria ny vokatry ny asa fanangonam-bokatra dia KTable ary mampiasa fivarotam-panjakana izy ireo, dia azo inoana fa tsy ny fanavaozana rehetra vokatr'izany dia alefa any amin'ny fantsona.

Ny fomba KTable.groupBy dia mamerina KGroupedTable mitovy amin'izany - fanehoana mpanelanelana ny onjan'ny fanavaozana, natambatra indray amin'ny fanalahidy.

Andao haka aina kely ary hijery ny Fig. 5.9, izay mampiseho ny zava-bitantsika. Ity topolojia ity dia tokony ho efa mahazatra anao.

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"
Andeha hojerentsika izao ny kaody ho an'ity topolojia ity (azo jerena ao amin'ny rakitra src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (Listing 5.2).

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"
Ny fehezan-dalàna nomena dia miavaka amin'ny hafohezany sy ny habetsahan'ny hetsika atao amin'ny andalana maromaro. Mety mahatsikaritra zava-baovao ianao amin'ny mari-pamantarana voalohany amin'ny fomba builder.stream: sanda amin'ny karazana enum AutoOffsetReset.EARLIEST (misy koa ny farany), napetraka amin'ny fomba Consumed.withOffsetResetPolicy. Ity karazana fanisana ity dia azo ampiasaina hamaritana paikady famerenana amin'ny laoniny ho an'ny KStream na KTable tsirairay ary maka ny laharam-pahamehana amin'ny safidy famerenana offset avy amin'ny fandrindrana.

GroupByKey sy GroupBy

Ny interface KStream dia manana fomba roa amin'ny fanangonana rakitsoratra: GroupByKey sy GroupBy. Samy mamerina KGroupedTable izy roa, ka mety hanontany tena ianao hoe inona no mahasamihafa azy ireo ary rahoviana no hampiasaina?

Ny fomba GroupByKey dia ampiasaina rehefa efa tsy foana ny lakile ao amin'ny KStream. Ary ny tena zava-dehibe dia tsy napetraka mihitsy ny saina "mitaky fisarahana indray".

Ny fomba GroupBy dia mihevitra fa nanova ny fanalahidin'ny vondrona ianao, ka ny saina repartition dia napetraka ho marina. Ny fanatontosana fiarahana, fanangonam-bokatra, sns. aorian'ny fomba GroupBy dia hiteraka fizarazarana mandeha ho azy.
Famintinana: Raha azo atao dia tokony hampiasa GroupByKey ianao fa tsy GroupBy.

Mazava tsara ny fomba ataon'ny mapValues ​​sy groupBy, ka andeha hojerentsika ny fomba sum() (hita ao amin'ny src/main/java/bbejeck/model/ShareVolume.java) (Listing 5.3).

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"
Ny fomba ShareVolume.sum dia mamerina ny totalin'ny volan'ny varotra stock, ary ny vokatry ny rojo kajy manontolo dia zavatra KTable . Ankehitriny fantatrao ny anjara asan'ny KTable. Rehefa tonga ny zavatra ShareVolume dia mitahiry ny fanavaozana farany farany ny zavatra KTable mifandraika amin'izany. Zava-dehibe ny mahatsiaro fa ny fanavaozana rehetra dia hita taratra ao amin'ny ShareVolumeKTable teo aloha, fa tsy ny rehetra no alefa lavitra.

Ampiasainay avy eo ity KTable ity mba hanangonana (amin'ny isan'ny varotra) mba hahatongavana any amin'ireo orinasa dimy manana vola be indrindra amin'ny varotra isaky ny indostria. Ny hetsika ataontsika amin'ity tranga ity dia hitovy amin'ny an'ny fanangonana voalohany.

  1. Manaova hetsika groupBy hafa mba hanangonana zavatra ShareVolume tsirairay araka ny indostria.
  2. Atombohy ny famintinana ireo zavatra ShareVolume. Amin'ity indray mitoraka ity dia filaharana laharam-pahamehana amin'ny habeny raikitra ny zavatra aggregation. Amin'ity filaharana habe raikitra ity, ireo orinasa dimy manana ampahany betsaka indrindra amidy ihany no tazonina.
  3. Soraty amin'ny sandan'ny tady ny filaharana avy amin'ny andalana teo aloha ary avereno ireo tahiry dimy ambony indrindra amidy amin'ny isa amin'ny indostria.
  4. Soraty amin'ny endrika kofehy amin'ny lohahevitra ny valiny.

Ao amin'ny Fig. Ny sary 5.10 dia mampiseho ny tabilao topologie fikorianan'ny angona. Araka ny hitanao, ny dingana faharoa amin'ny fanodinana dia tsotra.

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"
Ankehitriny isika dia manana fahatakarana mazava ny firafitry ity fanodinana fihodinana faharoa ity, dia afaka mitodika any amin'ny kaody loharano (ho hitanao ao amin'ny rakitra src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (Listing 5.4) .

Ity initializer ity dia misy fari-pitsipika fixedQueue. Ity dia zavatra mahazatra izay adaptatera ho an'ny java.util.TreeSet izay ampiasaina hanaraha-maso ny vokatra N ambony amin'ny filaharana midina amin'ny fizarana varotra.

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"
Efa hitanao ny antson'ny groupBy sy mapValues, ka tsy hiditra amin'ireo izahay (antsoinay ny fomba KTable.toStream satria tsy ampiasaina intsony ny fomba KTable.print). Saingy mbola tsy nahita ny dikan-teny KTable an'ny aggregate() ianao, ka handany fotoana kely hiresaka momba izany isika.

Araka ny tsaroanao, ny mahasamihafa an'i KTable dia ny firaketana miaraka amin'ny fanalahidy mitovy dia heverina ho fanavaozana. KTable dia manolo ny fidirana taloha amin'ny vaovao. Miseho amin'ny fomba mitovy ny fanangonana: ny rakitra farany miaraka amin'ny fanalahidy mitovy dia atambatra. Rehefa tonga ny rakitsoratra dia ampidirina ao amin'ny kilasy FixedSizePriorityQueue amin'ny alàlan'ny adder (parameter faharoa amin'ny antso an-tariby), fa raha efa misy rakitra hafa miaraka amin'ny fanalahidy mitovy, dia esorina ny rakitra taloha amin'ny alàlan'ny subtractor (parameter fahatelo amin'ny ny fomba fiantsoana aggregate).

Izany rehetra izany dia midika fa ny aggregator antsika, FixedSizePriorityQueue, dia tsy manangona ny soatoavina rehetra amin'ny fanalahidy iray, fa mitahiry vola mihetsiketsika amin'ny habetsahan'ny karazana tahiry N be varotra indrindra. Ny fidirana tsirairay avy dia ahitana ny fitambaran'ny ampahany amidy hatreto. Ny KTable dia hanome anao vaovao momba ny anjaran'ny orinasa amin'izao fotoana izao no be varotra indrindra, nefa tsy mitaky fanangonam-bokatra isaky ny fanavaozana.

Nianatra nanao zavatra lehibe roa izahay:

  • sanda vondrona ao amin'ny KTable amin'ny fanalahidy iraisana;
  • manaova asa mahasoa toy ny fanangonam-bokatra sy fanangonam-bokatra amin'ireo soatoavina voavondrona ireo.

Zava-dehibe ny fahafantarana ny fomba hanatanterahana ireo asa ireo mba hahatakarana ny dikan'ny angon-drakitra mandeha amin'ny alalan'ny fampiharana Kafka Streams sy ny fahatakarana ny vaovao entiny.

Nanangona ny sasany amin'ireo hevi-dehibe noresahina tany aloha ato amin'ity boky ity koa izahay. Ao amin'ny Toko faha-4, dia niresaka momba ny maha-zava-dehibe ny fanjakana eo an-toerana ny fandeferana diso amin'ny fampiharana streaming. Ny ohatra voalohany amin'ity toko ity dia naneho ny antony maha-zava-dehibe ny fanjakana eo an-toerana — izany dia manome anao fahafahana hanara-maso izay fampahalalana efa hitanao. Ny fidirana eo an-toerana dia misoroka ny fahataran'ny tambajotra, mahatonga ny fampiharana ho mahomby kokoa sy mahatohitra ny fahadisoana.

Rehefa manatanteraka hetsika fanodinkodinana na fanangonam-bokatra ianao dia tsy maintsy mamaritra ny anaran'ny fivarotana fanjakana. Mamerina ohatra KTable ny fiasan'ny rollup sy aggregation, ary ny KTable dia mampiasa fitahirizana fanjakana hanoloana valiny taloha amin'ny vaovao. Araka ny hitanao, tsy ny fanavaozana rehetra no alefa any amin'ny fantsona, ary zava-dehibe izany satria natao hamokarana fampahalalana famintinana ny hetsika fanangonana. Raha tsy mampihatra ny fanjakana eo an-toerana ianao, ny KTable dia handefa ny valin'ny fanangonana sy ny fanangonana rehetra.

Manaraka izany dia hojerentsika ny fanatanterahana asa toy ny fanangonana ao anatin'ny fe-potoana voafaritra iray - ilay antsoina hoe fampandehanana varavarankely.

5.3.2. Hetsika varavarankely

Ao amin'ny fizarana teo aloha, dia nampiditra convolution sliding sy aggregation. Ny fampiharana dia nanao fanodinkodinana tsy an-kijanona ny habetsaky ny varotra stock, arahin'ny fanangonana ireo tahiry dimy be mpividy indrindra amin'ny fifanakalozana.

Indraindray dia ilaina ny fanangonam-bokatra tsy tapaka toy izany sy ny fanodinkodinana ny vokatra. Ary indraindray dia mila manao asa mandritra ny fe-potoana iray ihany ianao. Ohatra, kajy ny isan'ny fifanakalozam-bola natao tamin'ny ampahan'ny orinasa iray tao anatin'ny 10 minitra farany. Na firy ny mpampiasa nanindry sora-baventy vaovao tao anatin'ny 15 minitra farany. Ny fampiharana iray dia mety manao asa toy izany imbetsaka, saingy miaraka amin'ny valiny izay mihatra amin'ny fe-potoana voafaritra ihany (varavaran'ny fotoana).

Manisa ny fifanakalozana fifanakalozana ataon'ny mpividy

Amin'ny ohatra manaraka, hanara-maso ny fifampiraharaham-bola amin'ny mpivarotra maro isika—na fikambanana lehibe na mpanam-bola manokana.

Misy antony roa mety ho an'ity fanaraha-maso ity. Ny iray amin'izy ireo dia ny filàna ny fahafantarana izay mividy/mivarotra ny mpitarika tsena. Raha mahita fahafahana ireo mpilalao lehibe sy mpampiasa vola be pitsiny ireo dia mitombina ny manaraka ny paikadiny. Ny antony faharoa dia ny faniriana hahita izay mety ho famantarana ny varotra anatiny tsy ara-dalàna. Mba hanaovana izany dia mila manadihady ny fifandraisan'ny spike fivarotana lehibe miaraka amin'ny famoahana gazety manan-danja ianao.

Ny fanaraha-maso toy izany dia ahitana ireto dingana manaraka ireto:

  • mamorona stream ho an'ny famakiana avy amin'ny lohahevitra momba ny varotra;
  • manambatra ny firaketana an-tsoratra amin'ny alàlan'ny ID mpividy sy marika stock. Ny fiantsoana ny fomba groupBy dia mamerina ohatra iray amin'ny kilasy KGroupedStream;
  • Ny fomba KGroupedStream.windowedBy dia mamerina ny angon-drakitra voafetra amin'ny varavarankelin'ny fotoana iray, izay mamela ny fanangonana fikandrana. Miankina amin'ny karazana varavarankely, na TimeWindowedKStream na SessionWindowedKStream dia averina;
  • isan'ny fifanakalozana ho an'ny asa fanangonana. Ny fikorianan'ny angon-drakitra misy varavarankely dia mamaritra raha raisina amin'ity fanisana ity ny firaketana manokana iray;
  • manoratra valiny amin'ny lohahevitra iray na mamoaka azy ireo amin'ny console mandritra ny fampandrosoana.

Tsotra ny topologie an'ity fampiharana ity, fa ny sary mazava momba izany dia hanampy. Andeha hojerentsika ny Fig. 5.11.

Manaraka izany, hojerentsika ny fampandehanan-draharahan'ny varavarankely sy ny kaody mifanaraka aminy.

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"

Karazana varavarankely

Misy karazana varavarankely telo ao amin'ny Kafka Streams:

  • sessional;
  • “mirodana” (mirodana);
  • mitsambikina / mitsambikina.

Miankina amin'ny fepetra takian'ny orinasanao izay hofidiana. Ny varavarankely mitsambikina sy mitsambikina dia voafetra ny fotoana, fa ny varavarankelin'ny fotoam-pivoriana kosa dia voafetra amin'ny asan'ny mpampiasa — ny faharetan'ny (ireo) dia miankina amin'ny fahavitrihan'ny mpampiasa ihany. Ny zava-dehibe tokony hotsaroana dia ny karazana varavarankely rehetra dia mifototra amin'ny mari-pamantarana daty / ora amin'ny fidirana, fa tsy ny ora rafitra.

Manaraka, mampihatra ny topolojia amin'ny karazana varavarankely tsirairay izahay. Ny kaody feno dia tsy homena afa-tsy amin'ny ohatra voalohany; ho an'ny karazana windows hafa dia tsy hisy hiova afa-tsy ny karazana fiasan'ny varavarankely.

Varavarankely fivoriana

Ny varavarankelin'ny fivoriana dia tsy mitovy amin'ny karazana varavarankely hafa rehetra. Tsy voafetra amin'ny fotoana izy ireo fa amin'ny asan'ny mpampiasa (na ny asan'ny orinasa tianao hojerena). Ny varavarankelin'ny fotoam-pivoriana dia ferana amin'ny vanim-potoanan'ny tsy fahavitrihana.

Ny sary 5.12 dia mampiseho ny foto-kevitry ny varavarankelin'ny fivoriana. Ny session kely kokoa dia hitambatra amin'ny session eo ankaviany. Ary hisaraka ny fivoriana eo amin'ny ankavanana satria manaraka fotoana maharitra tsy fanaovan-javatra. Ny varavarankelin'ny fotoam-pivoriana dia mifototra amin'ny asan'ny mpampiasa, fa ampiasao ny mari-pamantarana daty/ora avy amin'ny fidirana mba hamaritana hoe iza no misy ny fidirana.

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"

Mampiasa fikandrana session hanaraha-maso ny fifanakalozana tahiry

Andao hampiasa ny varavarankelin'ny session haka vaovao momba ny fifanakalozana. Ny fampiharana ny varavarankely session dia aseho ao amin'ny Listing 5.5 (izay hita ao amin'ny src/main/java/bbejeck/chapter_5/CountingWindowingAndKTableJoinExample.java).

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"
Efa hitanao ny ankamaroan'ny asa amin'ity topolojia ity, ka tsy ilaina ny mijery azy ireo eto. Saingy misy singa vaovao maromaro ihany koa eto, izay hodinihintsika izao.

Ny fiasan'ny groupBy dia mazàna manao karazana asa fanangonam-bokatra (fanangonana, fikosehana, na fanisana). Azonao atao ny manao fitambarana mitambatra miaraka amin'ny totalin'ny mandeha, na fanangonana fikandrana, izay mandray an-tsoratra ao anatin'ny fe-potoana voafaritra.

Ny kaody ao amin'ny Listing 5.5 dia manisa ny isan'ny fifanakalozana ao anatin'ny varavarankely session. Ao amin'ny Fig. 5.13 ireo hetsika ireo dia nodinihina tsikelikely.

Amin'ny fiantsoana ny windowedBy(SessionWindows.with(twentySeconds). until(fifteenMinutes)) dia mamorona varavarankelin'ny fotoam-pivoriana miaraka amin'ny elanelan'ny tsy fahavitrihana 20 segondra ary 15 minitra ny faharetana. Ny elanelam-potoana 20 segondra tsy miasa dia midika fa ny fampiharana dia hampiditra ny fidirana rehetra tonga ao anatin'ny 20 segondra amin'ny fiafaran'ny fiafaran'ny fotoam-pivoriana ankehitriny amin'ny fotoam-pivoriana ankehitriny (mavitrika).

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"
Manaraka, dia mamaritra hoe inona ny hetsika fanangonana tokony hatao ao amin'ny varavarankely fivoriana - amin'ity tranga ity, manisa. Raha toa ka latsaka ivelan'ny varavarankelin'ny tsy fahavitrihana ny fidirana miditra (na amin'ny lafiny iray amin'ny mari-pamantarana daty/ora), dia mamorona fivoriana vaovao ny fampiharana. Ny elanelam-potoana fihazonana dia midika hoe fitazonana fotoam-pivoriana mandritra ny fe-potoana voafaritra tsara ary mamela angon-drakitra tara izay mihoatra ny fe-potoana tsy fiasan'ny fotoam-pivoriana nefa mbola azo ampiarahina. Fanampin'izany, ny fanombohana sy fiafaran'ny fotoam-pivoriana vaovao vokatry ny fampivondronana dia mifanaraka amin'ny mari-pamantarana daty/ora voalohany sy farany indrindra.

Andeha hojerentsika ny fampidirana vitsivitsy avy amin'ny fomba fanisana mba hahitana ny fomba fiasan'ny session (Tabilao 5.1).

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"
Rehefa tonga ny firaketana dia mitady fotoam-pivoriana efa misy miaraka amin'ny lakile mitovy isika, fotoana fiafarana latsaka noho ny mari-pamantarana daty/ora ankehitriny - elanelam-potoanan'ny tsy fahavitrihana, ary fotoana fanombohana lehibe kokoa noho ny fitomboka daty/ora ankehitriny + elanelan'ny tsy fiasana. Raha raisina izany, dia misy fidirana efatra avy amin'ny latabatra. 5.1 dia mitambatra ho fivoriana iray toy izao manaraka izao.

1. Ny firaketana 1 dia tonga voalohany, ka ny ora fanombohana dia mitovy amin'ny ora farany ary 00:00:00.

2. Manaraka, tonga ny fidirana 2, ary mitady fivoriana izay mifarana tsy aloha kokoa amin'ny 23:59:55 ary manomboka amin'ny 00:00:35. Hitantsika ny firaketana 1 ary atambatra ny fotoam-pivoriana 1 sy 2. Raisinay ny ora fiatombohan'ny session 1 (aloha) sy ny fotoana fiafaran'ny session 2 (aty aoriana), ka ny fotoam-pivorianay vaovao dia manomboka amin'ny 00:00:00 ary mifarana amin'ny 00: 00:15.

3. Tonga ny firaketana 3, mitady fivoriana eo anelanelan'ny 00:00:30 sy 00:01:10 izahay ary tsy mahita. Ampio fivoriana faharoa ho an'ny fanalahidy 123-345-654,FFBE, manomboka sy mifarana amin'ny 00:00:50.

4. Tonga ny firaketana 4 ary mitady fivoriana eo anelanelan'ny 23:59:45 sy 00:00:25 izahay. Amin'ity indray mitoraka ity dia hita ny session 1 sy 2. Atambatra ho iray avokoa ireo session telo ireo, miaraka amin'ny ora fanombohana amin'ny 00:00:00 ary ora farany amin'ny 00:00:15.

Avy amin'ny zavatra voalaza ato amin'ity fizarana ity dia ilaina ny mitadidy ireto nuances manan-danja manaraka ireto:

  • ny sessions dia tsy windows raikitra habe. Ny faharetan'ny fotoam-pivoriana dia voafaritra amin'ny alalan'ny hetsika ao anatin'ny fe-potoana iray;
  • Ny mari-pamantarana daty/ora ao amin'ny angon-drakitra dia mamaritra raha ao anatin'ny fotoam-pivoriana efa misy ny hetsika na mandritra ny fotoana tsy miasa.

Avy eo isika dia hiresaka momba ny karazana varavarankely manaraka - varavarankely "mirodana".

"Mirodana" varavarankely

Ny varavarankely mitongilana dia mirakitra hetsika izay latsaka ao anatin'ny fe-potoana voafaritra. Alaivo sary an-tsaina fa mila maka ny varotra rehetra amin'ny orinasa iray ianao isaky ny 20 segondra, ka manangona ny zava-mitranga rehetra mandritra io vanim-potoana io ianao. Amin'ny fiafaran'ny elanelam-potoana 20 segondra dia mihodina ny varavarankely ary mifindra mankany amin'ny elanelam-pandinihana 20 segondra vaovao. Ny sary 5.14 dia mampiseho izany toe-javatra izany.

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"
Araka ny hitanao, ny hetsika rehetra azo tao anatin'ny 20 segondra farany dia tafiditra ao amin'ny varavarankely. Amin'ny fiafaran'io vanim-potoana io dia misy varavarankely vaovao noforonina.

Ny lisitra 5.6 dia mampiseho ny kaody mampiseho ny fampiasana varavarankely mitongilana mba hisintonana ny fifanakalozana tahiry isaky ny 20 segondra (hita ao amin'ny src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"
Miaraka amin'ity fanovana kely amin'ny TimeWindows.of method call ity dia azonao atao ny mampiasa varavarankely mitongilana. Ity ohatra ity dia tsy miantso ny fomba hatramin'ny() , noho izany dia ampiasaina ny elanelam-potoana fitazonana 24 ora.

Farany, tonga ny fotoana hifindra any amin'ny farany amin'ny varavarankely safidy - "hopping" windows.

Varavarankely mitsambikina ("mitsambikina")

Ny varavarankelin'ny sliding/hopping dia mitovy amin'ny varavarankely mitongilana, saingy misy fahasamihafana kely. Ny varavarankelin'ny sliding dia tsy miandry hatramin'ny faran'ny elanelam-potoana vao mamorona varavarankely vaovao handrafetana hetsika vao haingana. Manomboka kajy vaovao izy ireo aorian'ny elanelam-potoana fiandrasana latsaky ny fe-potoanan'ny varavarankely.

Mba hampisehoana ny fahasamihafana misy eo amin'ny varavarankely mitongilana sy mitsambikina, andao hiverina amin'ny ohatra amin'ny fanisana ny fifanakalozana fifanakalozana. Ny tanjonay dia ny hanisa ny isan'ny fifampiraharahana, saingy tsy te hiandry ny fe-potoana manontolo izahay vao hanavao ny kaontera. Ho solon'izay dia havaozinay amin'ny fotoana fohy kokoa ny kaontera. Ohatra, mbola manisa ny isan'ny fifanakalozana isaky ny 20 segondra isika, fa manavao ny kaontera isaky ny 5 segondra, araka ny aseho amin'ny sary. 5.15. Amin'ity tranga ity, miafara amin'ny varavarankely vokatra telo miaraka amin'ny angona mifanindry.

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"
Ny lisitra 5.7 dia mampiseho ny kaody hamaritana ny fikandrana sliding (hita ao amin'ny src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"
Ny varavarankely mitongilana dia azo ovaina ho varavarankely mitsambikina amin'ny fampidirana antso amin'ny fomba advanceBy(). Ao amin'ny ohatra aseho, ny elanelam-potoana fitahirizana dia 15 minitra.

Hitanao ato amin'ity fizarana ity ny fomba hamerana ny valin'ny fitambarana amin'ny fikandrana fotoana. Indrindra indrindra, tiako hotadidinao ireto zavatra telo ireto avy amin'ity fizarana ity:

  • ny haben'ny varavarankely fivoriana dia tsy voafetra amin'ny fe-potoana, fa amin'ny asan'ny mpampiasa;
  • Ny varavarankely "mirodana" dia manome topimaso ny zava-mitranga ao anatin'ny fe-potoana iray;
  • Ny faharetan'ny fikandrana mitsambikina dia raikitra, saingy havaozina matetika izy ireo ary mety misy fidirana mifanipaka amin'ny varavarankely rehetra.

Manaraka izany dia hianatra ny fomba hamadihana ny KTable ho KStream ho an'ny fifandraisana isika.

5.3.3. Mampifandray ireo zavatra KStream sy KTable

Ao amin'ny Toko 4, niresaka momba ny fampifandraisana zavatra roa KStream izahay. Ankehitriny dia mila mianatra ny fomba fampifandraisana ny KTable sy KStream isika. Mety ilaina izany noho ity antony tsotra ity. Ny KStream dia firaketana an-tsoratra, ary ny KTable dia fikorianan'ny fanavaozana firaketana, saingy indraindray ianao dia mety te-hanampy teny manodidina fanampiny amin'ny renirano firaketana amin'ny alàlan'ny fanavaozana avy amin'ny KTable.

Andao haka angon-drakitra momba ny isan'ny fifanakalozana fifanakalozana ary ampifandraiso amin'ny vaovao momba ny fifanakalozana ho an'ny indostria mifandraika amin'izany. Ity ny zavatra tokony hataonao mba hanatratrarana izany raha omena ny kaody efa anananao.

  1. Ampiova zavatra KTable miaraka amin'ny angona momba ny isan'ny fifanakalozana tahiry ho KStream, arahin'ny fanoloana ny lakile amin'ny fanalahidy manondro ny sehatry ny indostria mifanandrify amin'ity mariky ny tahiry ity.
  2. Mamorona zavatra KTable izay mamaky angona avy amin'ny lohahevitra iray miaraka amin'ny vaovao momba ny fifanakalozana. Ity KTtable vaovao ity dia hosokajiana amin'ny sehatry ny indostria.
  3. Ampifandraiso ny vaovao farany amin'ny fampahalalana momba ny isan'ny fifanakalozana fifanakalozana amin'ny sehatry ny indostria.

Andeha hojerentsika izao ny fomba fampiharana io drafitr'asa io.

Ampiova KTable ho KStream

Raha te hanova ny KTable ho KStream dia mila manao izao manaraka izao ianao.

  1. Antsoy ny fomba KTable.toStream().
  2. Amin'ny fiantsoana ny fomba KStream.map, soloy amin'ny anaran'ny indostria ny lakile, ary alao avy eo ny zavatra TransactionSummary avy amin'ny ohatra Windowed.

Hifamatotra ireo asa ireo isika toy izao manaraka izao (azo jerena ao amin'ny rakitra src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java ny code) (Listing 5.8).

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"
Satria manao hetsika KStream.map izahay, ny ohatra KStream niverina dia zaraina ho azy rehefa ampiasaina amin'ny fifandraisana.

Nahavita ny fizotry ny fiovam-po izahay, avy eo dia mila mamorona zavatra KTable ho an'ny famakiana vaovao momba ny tahiry.

Famoronana KTable ho an'ny vaovao stock

Soa ihany fa ny famoronana zavatra KTable dia mila andalana iray monja (ny code dia hita ao amin'ny src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Listing 5.9).

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"
Tsara ny manamarika fa tsy misy zavatra Serde takiana hofaritana, satria ny string Serdes dia ampiasaina amin'ny toe-javatra. Ary koa, amin'ny fampiasana ny fanisana TALOHA, dia feno firaketana ny latabatra any am-piandohana.

Ankehitriny dia afaka mandroso amin'ny dingana farany - fifandraisana.

Mampifandray ny vaovao farany amin'ny angona isan'ny fifampiraharahana

Tsy sarotra ny mamorona fifandraisana. Hampiasa fiarahana ankavia isika raha tsy misy vaovao momba ny tahiry ho an'ny indostria mifandraika amin'izany (ny kaody ilaina dia hita ao amin'ny rakitra src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Listing 5.10).

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"
Ity mpandraharaha leftJoin ity dia tsotra. Tsy toy ny fidirana ao amin'ny Toko 4, ny fomba JoinWindow dia tsy ampiasaina satria rehefa manao KSStream-KTable miaraka dia tsy misy afa-tsy fidirana iray ao amin'ny KTable isaky ny fanalahidy. Ny fifandraisana toy izany dia tsy voafetra amin'ny fotoana: ny rakitra dia ao amin'ny KTable na tsy eo. Ny fehin-kevitra lehibe: amin'ny fampiasana zavatra KTable dia azonao atao ny manatsara ny KStream amin'ny angon-drakitra reference tsy dia havaozina matetika.

Ankehitriny isika dia hijery fomba mahomby kokoa amin'ny fanatsarana ny hetsika avy amin'ny KStream.

5.3.4. GlobalKTable objects

Araka ny hitanao dia ilaina ny manatsara ny streams hetsika na manampy contexte amin'izy ireo. Ao amin'ny Toko 4 dia hitanao ny fifandraisana misy eo amin'ny zavatra KStream roa, ary ao amin'ny fizarana teo aloha dia hitanao ny fifandraisana misy eo amin'ny KStream sy ny KTtable. Amin'ireo toe-javatra rehetra ireo dia ilaina ny manasaraka indray ny onjam-peo rehefa manoratra ny lakile amin'ny karazana na sanda vaovao. Indraindray dia atao mazava ny fizarana, ary indraindray ny Kafka Streams dia manao izany ho azy. Ilaina ny fizarazarana indray satria niova ny lakile ary tsy maintsy miafara amin'ny fizarana vaovao ny firaketana, raha tsy izany dia tsy ho azo atao ny fifandraisana (izany dia noresahina tao amin'ny Toko faha-4, ao amin'ny fizarana "Angon-drakitra fisarahana indray" ao amin'ny fizarana 4.2.4).

Misy vidiny ny fisarahana indray

Mitaky vola lany ny fizarazarana - sandan'ny loharanon-karena fanampiny amin'ny famoronana lohahevitra mpanelanelana, fitehirizana angon-drakitra dika mitovy amin'ny lohahevitra hafa; midika koa izany fa mitombo ny fahatarana noho ny fanoratana sy famakiana ity lohahevitra ity. Fanampin'izany, raha mila manatevin-daharana amin'ny lafiny na refy mihoatra ny iray ianao, dia tsy maintsy rojohy ny fitambarana, sarintany miaraka amin'ny fanalahidy vaovao ireo rakitra, ary avereno indray ny fizotran'ny fizarana.

Mifandray amin'ny angona kely kokoa

Amin'ny toe-javatra sasany, somary kely ny habetsaky ny angon-drakitra mifandray, ka ny dika mitovy amin'izany dia azo ampidirina mora foana eo an-toerana amin'ny node tsirairay. Ho an'ny toe-javatra tahaka izao, ny Kafka Streams dia manome ny kilasy GlobalKTable.

Ny trangan'ny GlobalKTable dia miavaka satria ny fampiharana dia mamerina ny angona rehetra amin'ny tsirairay amin'ireo node. Ary satria ny angon-drakitra rehetra dia eo amin'ny node tsirairay, dia tsy ilaina ny manasaraka ny reniranon'ny hetsika amin'ny alàlan'ny fanalahidin'ny angon-drakitra mba ho azon'ny fizarana rehetra. Azonao atao ihany koa ny manambatra tsy misy fanalahidy amin'ny alàlan'ny zavatra GlobalKTable. Andeha isika hiverina amin'ny iray amin'ireo ohatra teo aloha mba hanehoana an'io endri-javatra io.

Mampifandray ny zavatra KStream amin'ny zavatra GlobalKTable

Ao amin'ny fizarana 5.3.2, dia nanao fanangonan-tsonia ny fifanakalozana fifanakalozana nataon'ny mpividy izahay. Toy izao ny vokatry ny aggregation:

{customerId='074-09-3705', stockTicker='GUTM'}, 17
{customerId='037-34-5184', stockTicker='CORK'}, 16

Na dia nahatontosa ny tanjona aza ireo vokatra ireo, dia ho nahasoa kokoa raha naseho ihany koa ny anaran'ny mpanjifa sy ny anaran'ny orinasa feno. Mba hanampiana ny anaran'ny mpanjifa sy ny anaran'ny orinasa dia azonao atao ny manatevin-daharana ara-dalàna, saingy mila manao sari-tany lehibe roa ianao ary mizara indray. Miaraka amin'ny GlobalKTable dia azonao atao ny misoroka ny vidin'ny asa toy izany.

Mba hanaovana izany, dia hampiasa ny zavatra countStream avy amin'ny Listing 5.11 (ny kaody mifanaraka amin'izany dia hita ao amin'ny src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) ary mampifandray izany amin'ny zavatra GlobalKTable roa.

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"
Efa niresaka an’io isika teo aloha ka tsy haveriko intsony. Saingy marihiko fa ny kaody ao amin'ny toStream() .map fonction dia nalaina ho zavatra fampiasa fa tsy fanehoana lambda inline mba ho mora vakina.

Ny dingana manaraka dia ny manambara tranga roa amin'ny GlobalKTable (ny kaody aseho dia hita ao amin'ny rakitra src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (Listing 5.12).

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"

Mariho fa ny anaran'ny lohahevitra dia faritana amin'ny fampiasana karazana voatanisa.

Amin'izao fotoana izao dia efa vonona ny singa rehetra, ny hany sisa tavela dia ny fanoratana ny kaody ho an'ny fifandraisana (izay hita ao amin'ny rakitra src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (Listing 5.13).

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"
Na dia misy fitambarana roa aza ao anatin'ity kaody ity dia voafatotra izy ireo satria tsy misy ny vokatra azo ampiasaina misaraka. Ny vokatra dia aseho amin'ny faran'ny asa manontolo.

Rehefa manatanteraka ny asa fampiarahana etsy ambony ianao dia hahazo vokatra toy izao:

{customer='Barney, Smith' company="Exxon", transactions= 17}

Tsy niova ny votoatiny, saingy hita mazava kokoa ireo vokatra ireo.

Raha manisa latsaka hatramin'ny Toko 4 ianao dia efa nahita karazana fifandraisana maromaro miasa. Voatanisa eo amin'ny latabatra izy ireo. 5.2. Ity tabilao ity dia maneho ny fahaiza-mifandraika amin'ny version 1.0.0 an'ny Kafka Streams; Mety hisy zavatra hiova amin'ny famoahana ho avy.

Ny boky “Kafka Streams in Action. Applications sy microservices ho an'ny asa tena izy"
Mba hamaranana ny zava-drehetra dia andao averina indray ny fototra: azonao atao ny mampifandray ny reniranon'ny hetsika (KStream) sy ny fanavaozana ny renirano (KTable) amin'ny fampiasana fanjakana eo an-toerana. Raha tsy izany, raha tsy lehibe loatra ny haben'ny angona fanondroana dia azonao ampiasaina ny zavatra GlobalKTable. GlobalKTables dia mamerina ny fizarazarana rehetra amin'ny node fampiharana Kafka Streams tsirairay, manome antoka fa misy ny angona rehetra na inona na inona fisarahana mifanandrify amin'ny lakile.

Avy eo dia ho hitantsika ny endri-javatra Kafka Streams, izay ahafahantsika mijery ny fiovan'ny fanjakana nefa tsy mandany angona avy amin'ny lohahevitra Kafka.

5.3.5. Fanjakana azo anontaniana

Efa nanao hetsika maromaro momba ny fanjakana izahay ary mamoaka ny valiny hatrany amin'ny console (ho an'ny fampandrosoana) na manoratra azy ireo amin'ny lohahevitra iray (ho an'ny tanjona famokarana). Rehefa manoratra valiny amin'ny lohahevitra iray ianao dia tsy maintsy mampiasa mpanjifa Kafka hijery azy ireo.

Ny famakiana angona avy amin'ireo lohahevitra ireo dia azo raisina ho karazana fomba fijery mivaingana. Ho an'ny tanjonay dia azonay ampiasaina ny famaritana ny fomba fijery mivaingana avy amin'ny Wikipedia: “...objekt an-databatra fizika misy ny valin'ny fangatahana. Ohatra, mety ho dika mitovy eo an-toerana amin'ny angon-drakitra lavitra izy io, na ampahany amin'ny andalana sy/na tsanganana amin'ny latabatra iray na ny vokatra ampifandraisina, na ny tabilao famintinana azo amin'ny alalan'ny fanangonana” (https://en.wikipedia.org/wiki /Materialized_view).

Ny Kafka Streams koa dia mamela anao handefa fanontaniana mifampiresaka amin'ny fivarotanam-panjakana, ahafahanao mamaky mivantana ireo fomba fijery mivaingana ireo. Zava-dehibe ny manamarika fa ny fangatahana any amin'ny tranom-panjakana dia asa vakiana fotsiny. Izany dia miantoka fa tsy mila manahy ianao amin'ny fanaovana tsinontsinona ny fanjakana raha toa ka manodina data ny fampiharanao.

Zava-dehibe ny fahafahana manontany mivantana ny fivarotam-panjakana. Midika izany fa afaka mamorona rindranasa dashboard ianao nefa tsy mila maka data amin'ny mpanjifa Kafka aloha. Mampitombo ny fahombiazan'ny fampiharana ihany koa izany, noho ny tsy ilana manoratra angona indray:

  • noho ny toerana misy ny angon-drakitra dia azo idirana haingana izy ireo;
  • esorina ny dika mitovy amin'ny angona, satria tsy voasoratra any amin'ny fitahirizana ivelany.

Ny zava-dehibe tiako ho tadidinao dia ny ahafahanao manontany mivantana ny fanjakana ao anatin'ny fampiharanao. Ny fahafahana omena anao dia tsy azo ovaina loatra. Raha tokony hampiasa angon-drakitra avy amin'ny Kafka sy mitahiry rakitra ao anaty angon-drakitra ho an'ny fampiharana ianao, dia azonao atao ny manontany ny fivarotana fanjakana miaraka amin'ny valiny mitovy. Ny fanontaniana mivantana amin'ny tranom-panjakana dia midika fa kely kokoa ny kaody (tsy misy mpanjifa) ary kely kokoa ny rindrambaiko (tsy mila tabilao angon-drakitra hitahiry ny valiny).

Somary nohadihadianay ato amin'ity toko ity, noho izany dia hamela ny fifanakalozan-dresaka momba ny fanontaniana ifanakalozan-kevitra momba ny fivarotanam-panjakana izahay amin'izao fotoana izao. Aza manahy anefa: ao amin'ny Toko faha-9, dia hamorona fampiharana dashboard tsotra miaraka amin'ny fanontaniana mifampiresaka izahay. Hampiasa ny sasany amin'ireo ohatra avy amin'ity sy ny toko teo aloha ity mba hampisehoana ireo fanontaniana mifampiresaka sy ny fomba ahafahanao manampy azy ireo amin'ny rindranasa Kafka Streams.

famintinana

  • Ny zavatra KStream dia maneho ny onjan'ny hetsika, azo ampitahaina amin'ny fampidirana ao anaty angon-drakitra. Ny zavatra KTable dia maneho ny renirano fanavaozana, toy ny fanavaozana amin'ny angon-drakitra. Tsy mitombo ny haben'ny zavatra KTable, soloina vaovao ny rakitra taloha.
  • Ny zavatra KTable dia ilaina amin'ny asa fanangonana.
  • Amin'ny fampiasana ny fampandehanana varavarankely, azonao atao ny manasaraka ny angona natambatra ho siny fotoana.
  • Noho ny zavatra GlobalKTable, azonao atao ny miditra amin'ny angon-drakitra reference na aiza na aiza ao amin'ny fampiharana, na inona na inona fisarahana.
  • Azo atao ny fifandraisana eo amin'ny zavatra KStream, KTable ary GlobalKTable.

Hatreto, nifantoka tamin'ny fananganana rindranasa Kafka Streams amin'ny fampiasana ny DSL KStream avo lenta izahay. Na dia mamela anao hamorona programa milamina sy fohy aza ny fomba fiasa avo lenta, ny fampiasana azy dia maneho ny fifampiraharahana. Ny fiaraha-miasa amin'ny DSL KStream dia midika fampitomboana ny famintinana ny kaody anao amin'ny alàlan'ny fampihenana ny haavon'ny fanaraha-maso. Ao amin'ny toko manaraka dia hijery ny API node mpitantana ambany isika ary hanandrana varotra hafa. Ny programa dia ho lava kokoa noho ny teo aloha, saingy ho afaka hamorona saika izay node mpitantana mety ilainay izahay.

→ Ny antsipiriany bebe kokoa momba ny boky dia azo jerena ao amin'ny tranokalan'ny mpanonta

→ Ho an'ny Habrozhiteli fihenam-bidy 25% amin'ny fampiasana tapakila - Kafka Streams

→ Rehefa vita ny fandoavana ny dikan-taratasy amin'ny taratasy dia misy boky elektronika halefa amin'ny mailaka.

Source: www.habr.com

Add a comment