Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi” Kaabo, awọn olugbe Khabro! Iwe yii dara fun idagbasoke eyikeyi ti o fẹ lati ni oye sisẹ okun. Loye siseto pinpin yoo ran ọ lọwọ lati loye Kafka ati Awọn ṣiṣan Kafka daradara. Yoo dara lati mọ ilana Kafka funrararẹ, ṣugbọn eyi kii ṣe pataki: Emi yoo sọ ohun gbogbo ti o nilo. Awọn olupilẹṣẹ Kafka ti o ni iriri ati awọn alakọbẹrẹ yoo kọ ẹkọ bii o ṣe le ṣẹda awọn ohun elo ṣiṣan ṣiṣan ti o nifẹ nipa lilo ile-ikawe Awọn ṣiṣan Kafka ninu iwe yii. Agbedemeji ati awọn olupilẹṣẹ Java ti ilọsiwaju ti faramọ pẹlu awọn imọran bii serialization yoo kọ ẹkọ lati lo awọn ọgbọn wọn lati ṣẹda awọn ohun elo Awọn ṣiṣan Kafka. Awọn koodu orisun ti iwe naa jẹ kikọ ni Java 8 ati pe o lo pataki ti Java 8 lambda syntax ikosile, nitorinaa mọ bi o ṣe le ṣiṣẹ pẹlu awọn iṣẹ lambda (paapaa ni ede siseto miiran) yoo wa ni ọwọ.

Apejuwe. 5.3. Akopọ ati windowing mosi

Ni apakan yii, a yoo tẹsiwaju lati ṣawari awọn ẹya ti o ni ileri julọ ti Awọn ṣiṣan Kafka. Nitorinaa a ti bo awọn abala wọnyi ti Awọn ṣiṣan Kafka:

  • ṣiṣẹda topology processing;
  • lilo ipinle ni awọn ohun elo ṣiṣanwọle;
  • ṣiṣe awọn asopọ ṣiṣan data;
  • awọn iyatọ laarin awọn ṣiṣan iṣẹlẹ (KStream) ati awọn ṣiṣan imudojuiwọn (KTable).

Ninu awọn apẹẹrẹ atẹle a yoo mu gbogbo awọn eroja wọnyi papọ. Iwọ yoo tun kọ ẹkọ nipa windowing, ẹya nla miiran ti awọn ohun elo ṣiṣanwọle. Apeere akọkọ wa yoo jẹ akopọ ti o rọrun.

5.3.1. Ijọpọ ti awọn ọja iṣura nipasẹ eka ile-iṣẹ

Iṣakojọpọ ati akojọpọ jẹ awọn irinṣẹ pataki nigbati o n ṣiṣẹ pẹlu data ṣiṣanwọle. Ṣiṣayẹwo awọn igbasilẹ kọọkan bi wọn ṣe gba wọn nigbagbogbo ko to. Lati jade alaye afikun lati data, o jẹ dandan lati ṣe akojọpọ ati darapọ wọn.

Ni apẹẹrẹ yii, iwọ yoo wọ aṣọ ti oniṣowo ọjọ kan ti o nilo lati tọpa iwọn tita ti awọn ọja ti awọn ile-iṣẹ ni awọn ile-iṣẹ pupọ. Ni pataki, o nifẹ si awọn ile-iṣẹ marun pẹlu awọn tita ipin ti o tobi julọ ni ile-iṣẹ kọọkan.

Iru akopọ bẹ yoo nilo awọn igbesẹ pupọ atẹle lati tumọ data si fọọmu ti o fẹ (sọ ni awọn ofin gbogbogbo).

  1. Ṣẹda orisun orisun koko ti o ṣe atẹjade alaye iṣowo ọja aise. A yoo ni lati ṣe maapu ohun kan ti iru StockTransaction si ohun iru ShareVolume. Oro naa ni pe nkan StockTransaction ni metadata tita, ṣugbọn a nilo data nikan nipa nọmba awọn mọlẹbi ti a ta.
  2. Group ShareVolume data nipa iṣura aami. Ni kete ti akojọpọ nipasẹ aami, o le ṣubu data yii sinu awọn ipin-ipin ti awọn iwọn tita ọja. O tọ lati ṣe akiyesi pe ọna KStream.groupBy dapada apẹẹrẹ ti iru KGroupedStream. Ati pe o le gba apẹẹrẹ KTable nipa pipe ọna KGroupedStream.reduce siwaju.

Kini wiwo KGroupedStream

Awọn ọna KStream.groupBy ati KStream.groupByKey pada apẹẹrẹ ti KGroupedStream. KGroupedStream jẹ aṣoju agbedemeji ti ṣiṣan awọn iṣẹlẹ lẹhin akojọpọ nipasẹ awọn bọtini. Ko ṣe ipinnu rara fun iṣẹ taara pẹlu rẹ. Dipo, KGroupedStream ni a lo fun awọn iṣẹ iṣakojọpọ, eyiti o ja si KTable nigbagbogbo. Ati pe niwọn bi abajade ti awọn iṣẹ ikojọpọ jẹ KTable ati pe wọn lo ile itaja ipinlẹ kan, o ṣee ṣe pe kii ṣe gbogbo awọn imudojuiwọn bi abajade ni a firanṣẹ siwaju si isalẹ opo gigun ti epo.

Ọna KTable.groupBy da pada iru KGroupedTable - aṣoju agbedemeji ti ṣiṣan awọn imudojuiwọn, ti a tun ṣe akojọpọ nipasẹ bọtini.

Jẹ ká ya a kukuru isinmi ati ki o wo ni Ọpọtọ. 5.9, eyiti o fihan ohun ti a ti ṣaṣeyọri. Topology yii yẹ ki o faramọ ọ tẹlẹ.

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”
Jẹ ki a ni bayi wo koodu fun topology yii (o le rii ninu faili src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (Atokọ 5.2).

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”
Koodu ti a fun ni iyatọ nipasẹ kukuru ati iwọn didun ti awọn iṣe ti a ṣe ni awọn laini pupọ. O le ṣe akiyesi nkan titun ni paramita akọkọ ti ọna builder.stream: iye kan ti iru enum AutoOffsetReset.EARLIEST (tun wa tuntun), ṣeto ni lilo ọna Consumed.withOffsetResetPolicy. Iru iṣiro yii le ṣee lo lati ṣalaye ilana atunto aiṣedeede fun KStream kọọkan tabi KTable ati gba iṣaaju lori aṣayan atunto aiṣedeede lati iṣeto.

GroupByKey ati GroupBy

Ni wiwo KStream ni awọn ọna meji fun awọn igbasilẹ akojọpọ: GroupByKey ati GroupBy. Awọn mejeeji da KGroupedTable pada, nitorinaa o le ṣe iyalẹnu kini iyatọ laarin wọn ati igba wo lati lo?

Ọna GroupByKey jẹ lilo nigbati awọn bọtini inu KStream ko ti ṣofo tẹlẹ. Ati pataki julọ, asia "nbeere tun-ipin" ko ṣeto rara.

Ọna GroupBy dawọle pe o ti yi awọn bọtini akojọpọ pada, nitorinaa asia ipadabọ ti ṣeto si otitọ. Ṣiṣe awọn akojọpọ, awọn akojọpọ, ati bẹbẹ lọ lẹhin ọna GroupBy yoo ja si ni atunṣe-ipin laifọwọyi.
Lakotan: Nigbakugba ti o ba ṣeeṣe, o yẹ ki o lo GroupByKey kuku ju GroupBy.

O jẹ ohun ti mapValues ​​ati awọn ọna ẹgbẹ ṣe, nitorinaa jẹ ki a wo ọna apao () (ti o wa ni src/main/java/bbejeck/model/ShareVolume.java)) (Atokọ 5.3).

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”
Ọna ShareVolume.sum da pada lapapọ ṣiṣiṣẹ ti iwọn tita ọja ọja, ati abajade ti gbogbo pq ti awọn iṣiro jẹ nkan KTable . Bayi o loye ipa ti KTable ṣe. Nigbati awọn nkan ShareVolume de, ohun ti o baamu KTable n tọju imudojuiwọn tuntun lọwọlọwọ. O ṣe pataki lati ranti wipe gbogbo awọn imudojuiwọn ti wa ni afihan ni išaaju shareVolumeKTable, sugbon ko gbogbo wa ni rán siwaju.

Lẹhinna a lo KTable yii lati ṣajọpọ (nipasẹ nọmba ti awọn mọlẹbi ti o ta ọja) lati de awọn ile-iṣẹ marun pẹlu awọn ipele ti o ga julọ ti awọn ipin ti o ta ni ile-iṣẹ kọọkan. Awọn iṣe wa ninu ọran yii yoo jẹ iru awọn ti iṣakojọpọ akọkọ.

  1. Ṣe ẹgbẹ miiranNipa iṣẹ ṣiṣe lati ṣe akojọpọ awọn nkan ShareVolume kọọkan nipasẹ ile-iṣẹ.
  2. Bẹrẹ akopọ awọn nkan ShareVolume. Ni akoko yii nkan ikojọpọ jẹ isinyi pataki iwọn ti o wa titi. Ninu isinyi iwọn ti o wa titi, awọn ile-iṣẹ marun nikan ti o ni awọn iye owo ti o tobi julọ ti awọn mọlẹbi ti o ta ni o wa ni idaduro.
  3. Ṣe maapu awọn ila lati paragi ti tẹlẹ si iye okun kan ki o da awọn ọja iṣura marun ti o ga julọ pada nipasẹ nọmba nipasẹ ile-iṣẹ.
  4. Kọ awọn abajade ni fọọmu okun si koko-ọrọ naa.

Ninu Ọpọtọ. olusin 5.10 fihan data sisan topology awonya. Bi o ti le rii, iyipo keji ti sisẹ jẹ ohun rọrun.

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”
Ni bayi ti a ni oye ti o ye nipa eto ti iṣẹ ṣiṣe yika keji, a le yipada si koodu orisun rẹ (iwọ yoo rii ninu faili src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (Atokọ 5.4) .

Ipilẹṣẹ ibẹrẹ ni oniyipada Queue ti o wa titi. Eyi jẹ ohun aṣa ti o jẹ ohun ti nmu badọgba fun java.util.TreeSet ti o lo lati tọpinpin awọn abajade N ti o ga julọ ni ọna ti o sọkalẹ ti awọn mọlẹbi ta.

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”
O ti rii tẹlẹ awọn ipe groupBy ati mapValues, nitorinaa a ko ni lọ sinu wọn (a n pe ọna KTable.toStream nitori ọna KTable.print ti parẹ). Ṣugbọn o ko tii rii ẹya KTable ti apapọ () sibẹsibẹ, nitorinaa a yoo lo akoko diẹ lati jiroro iyẹn.

Bi o ṣe ranti, kini o jẹ ki KTable yatọ ni pe awọn igbasilẹ pẹlu awọn bọtini kanna ni a gba awọn imudojuiwọn. KTable rọpo titẹsi atijọ pẹlu ọkan tuntun. Ijọpọ waye ni ọna kanna: awọn igbasilẹ titun pẹlu bọtini kanna ni a ṣajọpọ. Nigbati igbasilẹ kan ba de, o jẹ afikun si apẹẹrẹ kilasi FixedSizePriorityQueue nipa lilo paramita (paramita keji ninu ipe ọna apapọ), ṣugbọn ti igbasilẹ miiran ba wa tẹlẹ pẹlu bọtini kanna, lẹhinna igbasilẹ atijọ ti yọkuro ni lilo iyokuro kan (paramita kẹta ni ipe ọna apapọ).

Gbogbo eyi tumọ si pe alaropo wa, FixedSizePriorityQueue, ko ṣajọpọ gbogbo awọn iye pẹlu bọtini kan, ṣugbọn tọju apao gbigbe ti awọn iwọn ti N julọ awọn iru awọn ọja iṣowo. Akọsilẹ kọọkan ti nwọle ni apapọ nọmba ti awọn mọlẹbi ti o ta ni bayi. KTable yoo fun ọ ni alaye nipa iru awọn mọlẹbi ti awọn ile-iṣẹ ti wa ni iṣowo julọ lọwọlọwọ, laisi nilo ikojọpọ sẹsẹ ti imudojuiwọn kọọkan.

A kọ lati ṣe awọn nkan pataki meji:

  • awọn iye ẹgbẹ ni KTable nipasẹ bọtini ti o wọpọ;
  • ṣe awọn iṣẹ ṣiṣe to wulo gẹgẹbi yipo ati akojọpọ lori awọn iye akojọpọ wọnyi.

Mọ bi o ṣe le ṣe awọn iṣẹ wọnyi jẹ pataki lati ni oye itumọ ti data gbigbe nipasẹ ohun elo Kafka Streams ati oye kini alaye ti o gbejade.

A tun ti mu diẹ ninu awọn imọran pataki ti a sọrọ tẹlẹ ninu iwe yii papọ. Ni ori 4, a jiroro bawo ni ifarada-aṣiṣe, ipinlẹ agbegbe ṣe pataki fun ohun elo ṣiṣanwọle. Apẹẹrẹ akọkọ ninu ori yii ṣe afihan idi ti ipinlẹ agbegbe ṣe pataki tobẹẹ—o fun ọ ni agbara lati tọju abala iru alaye ti o ti rii tẹlẹ. Wiwọle agbegbe yago fun awọn idaduro nẹtiwọọki, ṣiṣe ohun elo diẹ sii ṣiṣẹ ati sooro aṣiṣe.

Nigbati o ba n ṣiṣẹ eyikeyi yipo tabi iṣẹ akojọpọ, o gbọdọ pato orukọ ile-itaja ipinlẹ naa. Yiyi ati awọn iṣẹ iṣakojọpọ pada apẹẹrẹ KTable kan, ati KTable nlo ibi ipamọ ipinlẹ lati rọpo awọn abajade atijọ pẹlu awọn tuntun. Gẹgẹbi o ti rii, kii ṣe gbogbo awọn imudojuiwọn ni a firanṣẹ si isalẹ opo gigun ti epo, ati pe eyi ṣe pataki nitori pe awọn iṣẹ akojọpọ jẹ apẹrẹ lati gbejade alaye akojọpọ. Ti o ko ba lo ipinlẹ agbegbe, KTable yoo dari gbogbo akojọpọ ati awọn abajade yipo.

Nigbamii ti, a yoo wo awọn iṣẹ ṣiṣe gẹgẹbi apapọ laarin akoko kan pato - awọn iṣẹ ti a npe ni windowing.

5.3.2. Awọn iṣẹ window

Ni abala ti tẹlẹ, a ṣe afihan iyipada sisun ati akojọpọ. Ohun elo naa ṣe iyipo lilọsiwaju ti iwọn tita ọja, atẹle nipa iṣakojọpọ ti awọn ọja iṣowo marun julọ lori paṣipaarọ naa.

Nigba miiran iru iṣakojọpọ lemọlemọfún ati yipo awọn abajade jẹ pataki. Ati nigba miiran o nilo lati ṣe awọn iṣẹ nikan ni akoko ti a fun. Fun apẹẹrẹ, ṣe iṣiro iye awọn iṣowo paṣipaarọ ti a ṣe pẹlu awọn ipin ti ile-iṣẹ kan ni awọn iṣẹju 10 to kẹhin. Tabi melo ni awọn olumulo ti tẹ lori asia ipolowo tuntun ni awọn iṣẹju 15 sẹhin. Ohun elo le ṣe iru awọn iṣẹ ṣiṣe ni ọpọlọpọ igba, ṣugbọn pẹlu awọn abajade ti o kan si awọn akoko kan pato (awọn window akoko).

Kika awọn iṣowo paṣipaarọ nipasẹ olura

Ninu apẹẹrẹ ti nbọ, a yoo tọpa awọn iṣowo ọja kọja ọpọlọpọ awọn oniṣowo — boya awọn ajọ nla tabi awọn oluṣowo onikaluku ọlọgbọn.

Awọn idi meji lo wa fun titele yii. Ọkan ninu wọn ni iwulo lati mọ kini awọn oludari ọja n ra / ta. Ti awọn oṣere nla wọnyi ati awọn oludokoowo fafa ti rii aye, o jẹ oye lati tẹle ilana wọn. Idi keji ni ifẹ lati rii eyikeyi awọn ami ti o ṣeeṣe ti iṣowo inu inu arufin. Lati ṣe eyi, iwọ yoo nilo lati ṣe itupalẹ ibamu ti awọn spikes tita nla pẹlu awọn idasilẹ titẹ pataki.

Iru ipasẹ bẹ ni awọn igbesẹ wọnyi:

  • ṣiṣẹda ṣiṣan fun kika lati koko-ọrọ awọn iṣowo-ọja;
  • ṣiṣe akojọpọ awọn igbasilẹ ti nwọle nipasẹ ID olura ati aami iṣura. Npe ẹgbẹNipa ọna da pada apẹẹrẹ ti kilasi KGroupedStream;
  • Ọna KGroupedStream.windowedBy n ṣe idapada ṣiṣan data ti o ni opin si window akoko kan, eyiti o fun laaye akojọpọ window. Da lori iru window, boya TimeWindowedKStream tabi SessionWindowedKStream kan ti pada;
  • idunadura kika fun awọn alaropo isẹ. Sisan data windowed pinnu boya igbasilẹ kan pato ni a ṣe akiyesi ni kika yii;
  • kikọ awọn abajade si koko-ọrọ tabi ṣijade wọn si console lakoko idagbasoke.

Topology ti ohun elo yii rọrun, ṣugbọn aworan ti o han gbangba yoo jẹ iranlọwọ. Jẹ ká ya a wo ni Ọpọtọ. 5.11.

Nigbamii ti, a yoo wo iṣẹ ṣiṣe ti awọn iṣẹ window ati koodu ti o baamu.

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”

Awọn iru window

Awọn oriṣi mẹta ti awọn window wa ni Awọn ṣiṣan Kafka:

  • igba;
  • "tumbling" (tumbling);
  • sisun / hopping.

Ewo ni lati yan da lori awọn ibeere iṣowo rẹ. Tumbling ati awọn ferese fo jẹ opin-akoko, lakoko ti awọn window igba jẹ opin nipasẹ iṣẹ olumulo — iye akoko igba(awọn) jẹ ipinnu nikan nipasẹ bawo ni olumulo ṣe n ṣiṣẹ. Ohun akọkọ lati ranti ni pe gbogbo awọn iru window da lori awọn ami-ọjọ / akoko ti awọn titẹ sii, kii ṣe akoko eto.

Nigbamii ti, a ṣe imuse topology wa pẹlu ọkọọkan awọn iru window. Awọn koodu pipe ni yoo fun nikan ni apẹẹrẹ akọkọ; fun awọn iru window miiran ko si ohun ti yoo yipada ayafi iru iṣẹ ṣiṣe window.

Awọn window akoko

Awọn ferese igba yatọ pupọ si gbogbo iru awọn window miiran. Wọn ko ni opin pupọ nipasẹ akoko bii iṣẹ ṣiṣe ti olumulo (tabi iṣẹ ṣiṣe ti nkan ti o fẹ lati tọpa). Awọn ferese igba jẹ opin nipasẹ awọn akoko aiṣiṣẹ.

olusin 5.12 sapejuwe awọn Erongba ti igba windows. Akoko ti o kere julọ yoo dapọ pẹlu igba si apa osi. Ati pe igba ti o wa ni apa ọtun yoo jẹ lọtọ nitori pe o tẹle igba pipẹ ti aiṣiṣẹ. Awọn ferese akoko da lori iṣẹ ṣiṣe olumulo, ṣugbọn lo awọn ontẹ ọjọ/akoko lati awọn titẹ sii lati pinnu iru igba titẹsi jẹ ti.

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”

Lilo awọn window igba lati tọpa awọn iṣowo ọja

Jẹ ki a lo awọn ferese igba lati gba alaye nipa awọn iṣowo paṣipaarọ. Awọn imuse ti igba windows han ni Akojọ 5.5 (eyi ti o le wa ni ri ni src/main/java/bbejeck/chapter_5/CountingWindowingAndKTableJoinExample.java).

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”
O ti rii pupọ julọ awọn iṣẹ ṣiṣe ni topology yii, nitorinaa ko si iwulo lati wo wọn lẹẹkansi nibi. Ṣugbọn ọpọlọpọ awọn eroja tuntun tun wa nibi, eyiti a yoo jiroro ni bayi.

Iṣe ẹgbẹ eyikeyi ni igbagbogbo ṣe diẹ ninu iṣẹ ṣiṣe akojọpọ (akopọ, yipo, tabi kika). O le ṣe boya ikojọpọ apapọ pẹlu apapọ ṣiṣiṣẹ, tabi akojọpọ awọn window, eyiti o gba sinu akọọlẹ awọn igbasilẹ laarin window akoko kan pato.

Awọn koodu ni Akojọ 5.5 ka awọn nọmba ti lẹkọ laarin igba windows. Ninu Ọpọtọ. 5.13 awọn iṣe wọnyi ni a ṣe atupale ni igbese nipa igbese.

Nipa pipe windowedBy(SessionWindows.with(twentySeconds)) .titi di (iṣẹju mẹdogun)) a ṣẹda ferese igba kan pẹlu aarin aiṣiṣẹ ti awọn aaya 20 ati aarin itẹramọṣẹ ti iṣẹju 15. Aarin laišišẹ ti awọn aaya 20 tumọ si pe ohun elo naa yoo pẹlu eyikeyi titẹsi ti o de laarin awọn aaya 20 ti ipari tabi ibẹrẹ ti igba lọwọlọwọ sinu igba lọwọlọwọ (lọwọ).

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”
Nigbamii ti, a pato iru iṣẹ apapọ ti o nilo lati ṣe ni window igba - ninu ọran yii, ka. Ti titẹsi ti nwọle ba ṣubu ni ita window aiṣiṣẹ (boya ẹgbẹ ti ọjọ/akoko ontẹ), ohun elo naa ṣẹda igba tuntun. Aarin idaduro tumọ si idaduro igba kan fun iye akoko kan ati gba laaye fun data pẹ ti o fa kọja akoko aiṣiṣẹ ti igba ṣugbọn o tun le somọ. Ni afikun, ibẹrẹ ati ipari ti igba tuntun ti o waye lati inu idapọ ṣe deede si akoko akọkọ ati ọjọ tuntun/akoko akoko.

Jẹ ki a wo awọn titẹ sii diẹ lati ọna kika lati rii bii awọn akoko ṣe n ṣiṣẹ (Table 5.1).

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”
Nigbati awọn igbasilẹ ba de, a wa awọn akoko ti o wa pẹlu bọtini kanna, akoko ipari ti o kere ju ọjọ / akoko ontẹ lọwọlọwọ - aarin aiṣiṣẹ, ati akoko ibẹrẹ ti o tobi ju ọjọ lọwọlọwọ/akoko ontẹ + aarin aiṣiṣẹ. Mu eyi sinu iroyin, awọn titẹ sii mẹrin lati tabili. 5.1 ti dapọ si igba kan gẹgẹbi atẹle.

1. Igbasilẹ 1 de akọkọ, nitorina akoko ibẹrẹ jẹ dogba si akoko ipari ati pe o jẹ 00:00:00.

2. Nigbamii ti, titẹsi 2 de, ati pe a wa awọn akoko ti o pari ni iṣaaju ju 23:59:55 ko si bẹrẹ ju 00:00:35 lọ. A wa igbasilẹ 1 ati darapọ awọn akoko 1 ati 2. A gba akoko ibẹrẹ ti igba 1 (ṣaaju) ati akoko ipari ti igba 2 (nigbamii), ki igba tuntun wa bẹrẹ ni 00:00:00 ati pari ni 00: 00:15.

3. Igbasilẹ 3 de, a wa fun awọn akoko laarin 00:00:30 ati 00:01:10 ati pe ko ri eyikeyi. Ṣafikun igba keji fun bọtini 123-345-654,FFBE, bẹrẹ ati ipari ni 00:00:50.

4. Igbasilẹ 4 de ati pe a n wa awọn akoko laarin 23:59:45 ati 00:00:25. Ni akoko yii awọn akoko mejeeji 1 ati 2. Gbogbo awọn akoko mẹta ni idapo sinu ọkan, with a start time of 00:00:00 ati akoko ipari ti 00:00:15.

Lati ohun ti a ṣalaye ni apakan yii, o tọ lati ranti awọn nuances pataki wọnyi:

  • Awọn akoko kii ṣe awọn ferese iwọn ti o wa titi. Iye akoko igba jẹ ipinnu nipasẹ iṣẹ ṣiṣe laarin akoko ti a fun;
  • Awọn ontẹ ọjọ/akoko ninu data pinnu boya iṣẹlẹ naa ṣubu laarin igba to wa tẹlẹ tabi lakoko akoko aiṣiṣẹ.

Nigbamii ti a yoo jiroro iru window ti o tẹle - awọn window "tumbling".

"Tumbling" windows

Tumbling windows Yaworan awọn iṣẹlẹ ti o ṣubu laarin awọn akoko kan. Fojuinu pe o nilo lati gba gbogbo awọn iṣowo ọja ti ile-iṣẹ kan ni gbogbo iṣẹju-aaya 20, nitorinaa o gba gbogbo awọn iṣẹlẹ lakoko akoko yẹn. Ni ipari aarin iṣẹju-aaya 20, window naa yipo lori ati gbe lọ si aarin akiyesi iṣẹju-aaya 20 tuntun. Nọmba 5.14 ṣe apejuwe ipo yii.

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”
Bi o ti le rii, gbogbo awọn iṣẹlẹ ti o gba ni iṣẹju-aaya 20 ti o wa ninu window naa. Ni opin akoko yii, window tuntun yoo ṣẹda.

Kikojọ 5.6 fihan koodu ti o ṣe afihan lilo awọn window tumbling lati gba awọn iṣowo ọja ni gbogbo iṣẹju-aaya 20 (ti a rii ni src / main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”
Pẹlu iyipada kekere yii si ipe ọna TimeWindows.of, o le lo window tumbling kan. Apeere yii ko pe ọna titi (), nitorinaa aarin idaduro aiyipada ti awọn wakati 24 yoo ṣee lo.

Nikẹhin, o to akoko lati lọ si ikẹhin ti awọn aṣayan window - awọn window "hopping".

Sisun ("fifo") windows

Awọn ferese sisun / hopping jẹ iru si awọn window tumbling, ṣugbọn pẹlu iyatọ diẹ. Awọn window sisun ko duro titi di opin akoko aarin ṣaaju ṣiṣẹda window tuntun lati ṣe ilana awọn iṣẹlẹ aipẹ. Wọn bẹrẹ awọn iṣiro tuntun lẹhin aarin iduro ti o kere ju iye akoko window.

Lati ṣapejuwe awọn iyatọ laarin tumbling ati awọn ferese fo, jẹ ki a pada si apẹẹrẹ ti kika awọn iṣowo paṣipaarọ ọja. Ibi-afẹde wa tun jẹ lati ka iye awọn iṣowo, ṣugbọn a ko fẹ lati duro gbogbo iye akoko ṣaaju mimu dojuiwọn counter naa. Dipo, a yoo ṣe imudojuiwọn counter ni awọn aaye arin kukuru. Fun apẹẹrẹ, a yoo tun ka iye awọn iṣowo ni gbogbo iṣẹju-aaya 20, ṣugbọn ṣe imudojuiwọn counter ni gbogbo iṣẹju-aaya 5, bi o ṣe han ni Ọpọtọ. 5.15. Ni idi eyi, a pari pẹlu awọn window esi mẹta pẹlu data agbekọja.

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”
Kikojọ 5.7 fihan koodu fun asọye sisun windows (ri ni src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”
Ferese tumbling le ṣe iyipada si window hopping nipa fifi ipe kun ọna ilosiwajuBy(). Ninu apẹẹrẹ ti o han, aarin fifipamọ jẹ iṣẹju 15.

O rii ni apakan yii bi o ṣe le ṣe idinwo awọn abajade akojọpọ si awọn window akoko. Ni pataki, Mo fẹ ki o ranti awọn nkan mẹta wọnyi lati apakan yii:

  • Iwọn awọn window igba ko ni opin nipasẹ akoko akoko, ṣugbọn nipasẹ iṣẹ olumulo;
  • "tumbling" windows pese ohun Akopọ ti awọn iṣẹlẹ laarin a fi fun akoko ti akoko;
  • Iye akoko awọn ferese ti n fo jẹ ti o wa titi, ṣugbọn wọn ṣe imudojuiwọn nigbagbogbo ati pe o le ni awọn titẹ sii agbekọja ninu gbogbo awọn window.

Nigbamii ti, a yoo kọ ẹkọ bi a ṣe le yi KTable pada si KStream kan fun asopọ kan.

5.3.3. Nsopọ KStream ati awọn nkan KTable

Ni ori 4, a sọrọ sisopọ awọn nkan KStream meji. Bayi a ni lati kọ bi a ṣe le sopọ KTable ati KStream. Eyi le nilo fun idi ti o rọrun wọnyi. KStream jẹ ṣiṣan ti awọn igbasilẹ, ati KTable jẹ ṣiṣan ti awọn imudojuiwọn igbasilẹ, ṣugbọn nigbami o le fẹ ṣafikun aaye afikun si ṣiṣan igbasilẹ nipa lilo awọn imudojuiwọn lati KTable.

Jẹ ki a gba data lori nọmba awọn iṣowo paṣipaarọ ọja ati ki o darapọ wọn pẹlu awọn iroyin paṣipaarọ ọja fun awọn ile-iṣẹ ti o yẹ. Eyi ni ohun ti o nilo lati ṣe lati ṣaṣeyọri eyi ti a fun ni koodu ti o ni tẹlẹ.

  1. Yipada ohun KTable kan pẹlu data lori nọmba awọn iṣowo ọja sinu KStream kan, atẹle nipa rirọpo bọtini pẹlu bọtini ti n tọka si eka ile-iṣẹ ti o baamu aami ọja iṣura yii.
  2. Ṣẹda ohun KTable kan ti o ka data lati koko kan pẹlu awọn iroyin paṣipaarọ ọja. KTable tuntun yii yoo jẹ tito lẹtọ nipasẹ eka ile-iṣẹ.
  3. So awọn imudojuiwọn iroyin pọ pẹlu alaye lori nọmba awọn iṣowo paṣipaarọ ọja nipasẹ eka ile-iṣẹ.

Bayi jẹ ki a wo bii o ṣe le ṣe imuse ero iṣe yii.

Yipada KTable si KStream

Lati ṣe iyipada KTable si KStream o nilo lati ṣe atẹle naa.

  1. Pe ọna KTable.toStream ().
  2. Nipa pipe ọna KStream.map, rọpo bọtini pẹlu orukọ ile-iṣẹ, lẹhinna gba ohun elo TransactionSummary pada lati apẹẹrẹ Windowed.

A yoo pq awọn wọnyi mosi papo bi wọnyi (koodu le ri ninu awọn faili src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Akojọ 5.8).

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”
Nitoripe a n ṣe iṣẹ KStream.map kan, apẹẹrẹ KStream ti o pada ti wa ni ipin laifọwọyi nigbati o ba lo ni asopọ kan.

A ti pari ilana iyipada, nigbamii ti a nilo lati ṣẹda ohun kan KTable fun kika awọn iroyin iṣura.

Ṣiṣẹda ti KTable fun awọn iroyin iṣura

O da, ṣiṣẹda ohun KTable kan gba laini koodu kan (koodu le rii ni src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Atokọ 5.9).

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”
O ti wa ni ye ki a kiyesi wipe ko si Serde ohun ti a beere lati wa ni pato, niwon okun Serdes ti lo ninu awọn eto. Paapaa, nipa lilo iṣiro EARLIEST, tabili naa kun fun awọn igbasilẹ ni ibẹrẹ.

Bayi a le lọ si ipele ikẹhin - asopọ.

Nsopọ awọn imudojuiwọn iroyin pẹlu data kika idunadura

Ṣiṣẹda asopọ ko nira. A yoo lo apa osi ni ọran ko si awọn iroyin ọja fun ile-iṣẹ ti o yẹ (koodu pataki ni a le rii ninu faili src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Atokọ 5.10).

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”
Oṣiṣẹ osiJoin yii rọrun pupọ. Ko dabi awọn idapọ ni ori 4, ọna JoinWindow ko lo nitori nigbati o ba n ṣe idapọ KStream-KTable, titẹ sii kan ṣoṣo ni KTable fun bọtini kọọkan. Iru asopọ bẹ ko ni opin ni akoko: igbasilẹ jẹ boya ni KTable tabi ko si. Ipari akọkọ: lilo awọn nkan KTable o le ṣe alekun KStream pẹlu data itọkasi nigbagbogbo imudojuiwọn nigbagbogbo.

Bayi a yoo wo ọna ti o munadoko diẹ sii lati ṣe alekun awọn iṣẹlẹ lati KStream.

5.3.4. GlobalKTable ohun

Bii o ti le rii, iwulo wa lati jẹki awọn ṣiṣan iṣẹlẹ tabi ṣafikun ọrọ-ọrọ si wọn. Ni ori 4 o rii awọn asopọ laarin awọn nkan KStream meji, ati ni apakan ti tẹlẹ o rii asopọ laarin KStream ati KTable kan. Ni gbogbo awọn iṣẹlẹ wọnyi, o jẹ dandan lati tun-pin ṣiṣan data nigbati o ba n ṣe aworan awọn bọtini si iru tabi iye tuntun. Nigba miiran ipadasẹhin ni a ṣe ni gbangba, ati nigbakan Awọn ṣiṣan Kafka ṣe laifọwọyi. Tun-pinpin jẹ pataki nitori awọn bọtini ti yipada ati awọn igbasilẹ gbọdọ pari ni awọn apakan titun, bibẹẹkọ asopọ yoo jẹ eyiti ko ṣee ṣe (eyi ti a sọrọ ni ori 4, ni apakan “Tun-pipin data” ni apakan 4.2.4).

Tun-pinpin ni iye owo kan

Atun-pinpin nilo awọn idiyele - awọn idiyele orisun afikun fun ṣiṣẹda awọn akọle agbedemeji, titoju data ẹda-iwe ni koko miiran; o tun tumọ si lairi ti o pọ si nitori kikọ ati kika lati koko yii. Ni afikun, ti o ba nilo lati darapọ mọ kọja abala kan ju ọkan lọ tabi iwọn, o gbọdọ dè awọn akojọpọ, ṣe maapu awọn igbasilẹ pẹlu awọn bọtini titun, ki o tun ṣe ilana ipinpin lẹẹkansii.

Nsopọ si awọn ipilẹ data kekere

Ni awọn igba miiran, iwọn didun data itọkasi lati sopọ jẹ kekere diẹ, nitorinaa awọn ẹda pipe rẹ le ni irọrun baamu ni agbegbe ni ipade kọọkan. Fun awọn ipo bii eyi, Awọn ṣiṣan Kafka n pese kilasi GlobalKTable.

Awọn iṣẹlẹ GlobalKTable jẹ alailẹgbẹ nitori ohun elo ṣe atunṣe gbogbo data si ọkọọkan awọn apa. Ati pe niwọn igba ti gbogbo data wa lori ipade kọọkan, ko si iwulo lati pin ṣiṣan iṣẹlẹ nipasẹ bọtini data itọkasi ki o wa si gbogbo awọn ipin. O tun le ṣe awọn asopọ ti ko ni bọtini ni lilo awọn nkan GlobalKTable. Jẹ ki a pada si ọkan ninu awọn apẹẹrẹ ti tẹlẹ lati ṣe afihan ẹya yii.

Nsopọ awọn nkan KStream si awọn nkan GlobalKTable

Ni apakan 5.3.2, a ṣe akojọpọ window ti awọn iṣowo paṣipaarọ nipasẹ awọn ti onra. Awọn abajade ti akojọpọ yii dabi nkan bi eleyi:

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

Lakoko ti awọn abajade wọnyi ṣe iranṣẹ idi naa, yoo ti jẹ iwulo diẹ sii ti orukọ alabara ati orukọ ile-iṣẹ kikun tun ti ṣafihan. Lati ṣafikun orukọ alabara ati orukọ ile-iṣẹ, o le ṣe awọn idapọ deede, ṣugbọn iwọ yoo nilo lati ṣe awọn maapu bọtini meji ati tun-pinpin. Pẹlu GlobalKTable o le yago fun awọn iye owo ti iru mosi.

Lati ṣe eyi, a yoo lo ohun countStream lati Atokọ 5.11 (koodu ti o baamu ni a le rii ni src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) ki o si so pọ mọ awọn nkan GlobalKTable meji.

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”
A ti jiroro lori eyi tẹlẹ, nitorinaa Emi kii yoo tun ṣe. Ṣugbọn Mo ṣe akiyesi pe koodu ti o wa ninu toStream () iṣẹ maapu jẹ ifasilẹ sinu nkan iṣẹ dipo ikosile lambda inline fun idi kika.

Igbesẹ ti o tẹle ni lati sọ awọn iṣẹlẹ meji ti GlobalKTable (koodu ti o han ni a le rii ninu faili src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (Akojọ 5.12).

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”

Jọwọ ṣe akiyesi pe awọn orukọ koko ni a ṣe apejuwe nipa lilo awọn oriṣi ti a ṣe akojọ.

Ni bayi ti a ti ṣetan gbogbo awọn paati, gbogbo ohun ti o ku ni lati kọ koodu fun asopọ (eyiti o le rii ninu faili src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (Atokọ 5.13).

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”
Botilẹjẹpe awọn idapọ meji wa ninu koodu yii, wọn ti di ẹwọn nitori ko si awọn abajade wọn ti a lo lọtọ. Awọn esi ti wa ni han ni opin ti gbogbo isẹ.

Nigbati o ba ṣiṣẹ iṣẹ iṣọpọ loke, iwọ yoo gba awọn abajade bii eyi:

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

Koko-ọrọ ko yipada, ṣugbọn awọn abajade wọnyi wo diẹ sii kedere.

Ti o ba ka si ori 4, o ti rii ọpọlọpọ awọn iru asopọ ni iṣe. Wọn ti wa ni akojọ si ni tabili. 5.2. Tabili yii ṣe afihan awọn agbara Asopọmọra bi ti ikede 1.0.0 ti Awọn ṣiṣan Kafka; Nkankan le yipada ni awọn idasilẹ ọjọ iwaju.

Iwe naa “Awọn ṣiṣan Kafka ni Iṣe. Awọn ohun elo ati awọn iṣẹ microservices fun iṣẹ akoko gidi”
Lati fi ipari si awọn nkan, jẹ ki a tun ṣe awọn ipilẹ: o le sopọ awọn ṣiṣan iṣẹlẹ (KStream) ati awọn ṣiṣan imudojuiwọn (KTable) ni lilo ipinlẹ agbegbe. Ni omiiran, ti iwọn data itọkasi ko ba tobi ju, o le lo ohun GlobalKTable. GlobalKTables tun ṣe gbogbo awọn ipin si oju ipade ohun elo ṣiṣan Kafka kọọkan, ni idaniloju pe gbogbo data wa laibikita ipin wo bọtini ni ibamu si.

Nigbamii ti a yoo rii ẹya Awọn ṣiṣan Kafka, ọpẹ si eyiti a le ṣe akiyesi awọn ayipada ipinlẹ laisi jijẹ data lati koko-ọrọ Kafka kan.

5.3.5. Ipo ti o le beere

A ti ṣe ọpọlọpọ awọn iṣẹ ṣiṣe ti o kan ipo ati nigbagbogbo gbejade awọn abajade si console (fun awọn idi idagbasoke) tabi kọ wọn si akọle kan (fun awọn idi iṣelọpọ). Nigbati o ba nkọ awọn abajade si koko-ọrọ, o ni lati lo olumulo Kafka lati wo wọn.

Awọn data kika lati awọn koko-ọrọ wọnyi ni a le kà si iru awọn iwo ohun elo. Fun awọn idi wa, a le lo itumọ ti wiwo ohun elo lati Wikipedia: “...ohun elo data ti ara ti o ni awọn abajade ibeere kan ninu. Fun apẹẹrẹ, o le jẹ ẹda agbegbe ti data jijin, tabi ipin ti awọn ori ila ati/tabi awọn ọwọn ti tabili tabi darapọ mọ awọn abajade, tabi tabili akojọpọ ti a gba nipasẹ akojọpọ” (https://en.wikipedia.org/wiki /Materialized_view).

Awọn ṣiṣan Kafka tun gba ọ laaye lati ṣiṣe awọn ibeere ibaraenisepo lori awọn ile itaja ipinlẹ, gbigba ọ laaye lati ka awọn iwo ohun elo taara taara. O ṣe pataki lati ṣe akiyesi pe ibeere si ile itaja ipinlẹ jẹ iṣẹ kika-nikan. Eyi ṣe idaniloju pe o ko ni lati ṣe aniyan nipa ṣiṣe lairotẹlẹ ni aisedede ipinlẹ lakoko ti ohun elo rẹ n ṣiṣẹ data.

Agbara lati beere taara awọn ile itaja ipinlẹ jẹ pataki. Eyi tumọ si pe o le ṣẹda awọn ohun elo dasibodu laisi nini lati kọkọ mu data lati ọdọ alabara Kafka. O tun ṣe alekun ṣiṣe ti ohun elo, nitori otitọ pe ko si iwulo lati kọ data lẹẹkansi:

  • o ṣeun si agbegbe ti data, wọn le wọle ni kiakia;
  • išẹpo data ti wa ni imukuro, niwon o ti wa ni ko kọ si ita ipamọ.

Ohun akọkọ ti Mo fẹ ki o ranti ni pe o le beere ipo taara lati inu ohun elo rẹ. Awọn anfani ti eyi fun ọ ko le ṣe apọju. Dipo jijẹ data lati Kafka ati titoju awọn igbasilẹ ni ibi ipamọ data fun ohun elo, o le beere awọn ile itaja ipinlẹ pẹlu abajade kanna. Awọn ibeere taara si awọn ile itaja ipinlẹ tumọ si koodu kekere (ko si olumulo) ati sọfitiwia kere si (ko si iwulo tabili tabili data lati tọju awọn abajade).

A ti bo ilẹ diẹ ni ori yii, nitorinaa a yoo fi ijiroro wa ti awọn ibeere ibaraenisepo si awọn ile itaja ipinlẹ fun bayi. Ṣugbọn maṣe yọ ara rẹ lẹnu: ni ori 9, a yoo ṣẹda ohun elo dasibodu ti o rọrun pẹlu awọn ibeere ibaraenisepo. Yoo lo diẹ ninu awọn apẹẹrẹ lati eyi ati awọn ipin ti tẹlẹ lati ṣe afihan awọn ibeere ibaraenisepo ati bii o ṣe le ṣafikun wọn si awọn ohun elo Awọn ṣiṣan Kafka.

Akopọ

  • Awọn nkan KStream ṣe aṣoju awọn ṣiṣan ti awọn iṣẹlẹ, ni afiwe si awọn ifibọ sinu aaye data. Awọn nkan KTable ṣe aṣoju awọn ṣiṣan imudojuiwọn, diẹ sii bii awọn imudojuiwọn si aaye data kan. Iwọn ohun KTable ko dagba, awọn igbasilẹ atijọ ti rọpo nipasẹ awọn tuntun.
  • Awọn nkan KTable nilo fun awọn iṣẹ apapọ.
  • Lilo awọn iṣẹ ṣiṣe window, o le pin data akojọpọ sinu awọn garawa akoko.
  • Ṣeun si awọn nkan GlobalKTable, o le wọle si data itọkasi nibikibi ninu ohun elo, laibikita ipin.
  • Awọn asopọ laarin KStream, KTable ati awọn nkan GlobalKTable ṣee ṣe.

Nitorinaa, a ti dojukọ lori kikọ awọn ohun elo Awọn ṣiṣan Kafka nipa lilo ipele giga KStream DSL. Botilẹjẹpe ọna ipele giga gba ọ laaye lati ṣẹda awọn eto afinju ati ṣoki, lilo rẹ duro fun iṣowo-pipa. Ṣiṣẹ pẹlu DSL KStream tumọ si jijẹ ṣoki ti koodu rẹ nipa idinku iwọn iṣakoso. Ni ori ti o tẹle, a yoo wo oju ipade API ti o ni ipele kekere ati gbiyanju awọn iṣowo-owo miiran. Awọn eto yoo gun ju ti tẹlẹ lọ, ṣugbọn a yoo ni anfani lati ṣẹda fere eyikeyi oju ipade olutọju ti a le nilo.

→ Awọn alaye diẹ sii nipa iwe le ṣee ri ni akede ká aaye ayelujara

→ Fun Habrozhiteli 25% ẹdinwo nipa lilo kupọọnu - Awọn ṣiṣan Kafka

→ Lori isanwo fun ẹya iwe ti iwe, iwe itanna kan yoo firanṣẹ nipasẹ imeeli.

orisun: www.habr.com

Fi ọrọìwòye kun