{"id":35786,"date":"2019-10-31T22:06:19","date_gmt":"2019-10-31T19:06:19","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kniga-kafka-streams-v-dejstvii-prilozheniya-i-mikroservisy-dlya-raboty-v-realnom-vremeni\/"},"modified":"2019-10-31T22:06:19","modified_gmt":"2019-10-31T19:06:19","slug":"kniga-kafka-streams-v-dejstvii-prilozheniya-i-mikroservisy-dlya-raboty-v-realnom-vremeni","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kniga-kafka-streams-v-dejstvii-prilozheniya-i-mikroservisy-dlya-raboty-v-realnom-vremeni","title":{"rendered":"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/piter\/blog\/457756\/\"><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/6f8bd2b31b87b0c760c1148515893c43.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex> P\u00ebrsh\u00ebndetje, Habrushit\u00ebs! Ky lib\u00ebr \u00ebsht\u00eb i p\u00ebrshtatsh\u00ebm p\u00ebr \u00e7do zhvillues q\u00eb d\u00ebshiron t\u00eb kuptoj\u00eb p\u00ebrpunimin e rrjedhave. Kuptimi i programimit t\u00eb shp\u00ebrndar\u00eb do t'ju ndihmoj\u00eb t\u00eb m\u00ebsoni m\u00eb mir\u00eb Kafka dhe Kafka Streams. Do t\u00eb ishte mir\u00eb t\u00eb njihni ndonj\u00ebher\u00eb edhe vete struktur\u00ebn Kafka, por nuk \u00ebsht\u00eb e nevojshme: un\u00eb do t'ju tregoj gjith\u00e7ka q\u00eb ju nevojitet. Zhvilluesit e avancuar t\u00eb Kafka, si dhe ata fillestar\u00eb, do t\u00eb m\u00ebsojn\u00eb t\u00eb krijojn\u00eb aplikacione interesante p\u00ebr p\u00ebrpunimin e rrjedhave me ndihm\u00ebn e bibliotek\u00ebs Kafka Streams. Zhvilluesit JAVA t\u00eb nivelit t\u00eb mes\u00ebm dhe t\u00eb lart\u00eb, q\u00eb jan\u00eb tashm\u00eb t\u00eb njohur me koncepte si serializimi, do t\u00eb m\u00ebsojn\u00eb si t\u00eb aplikojn\u00eb aft\u00ebsit\u00eb e tyre p\u00ebr t\u00eb krijuar aplikacione Kafka Streams. Kodi burimor i librit \u00ebsht\u00eb shkruar n\u00eb Java 8 dhe e p\u00ebrdor ndjesh\u00ebm sintaks\u00ebn e shprehjeve lambda n\u00eb Java 8, k\u00ebshtu q\u00eb aft\u00ebsia p\u00ebr t\u00eb punuar me funksionet lambda (edhe n\u00eb nj\u00eb gjuh\u00eb tjet\u00ebr programuese) do t'ju sh\u00ebrbej\u00eb.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Shkurtimi. 5.3. Agregimi dhe operacionet mbi dritaret<\/h3>\n<p>\nN\u00eb k\u00ebt\u00eb seksion do t\u00eb kalojm\u00eb n\u00eb studimin e pjes\u00ebve m\u00eb premtuese t\u00eb Kafka Streams. Deri tani kemi shqyrtuar k\u00ebto aspekte t\u00eb Kafka Streams:<\/p>\n<ul>\n<li>krijimi i topologjis\u00eb s\u00eb p\u00ebrpunimit;<\/li>\n<li>p\u00ebrdorimi i gjendjes n\u00eb aplikacionet e rrjedh\u00ebs;<\/li>\n<li>kryerja e lidhjeve t\u00eb rrjedhave t\u00eb t\u00eb dh\u00ebnave;<\/li>\n<li>dallimet midis rrymave t\u00eb ngjarjeve (KStream) dhe rrymave t\u00eb azhurnimeve (KTable).<\/li>\n<\/ul>\n<p>\nN\u00eb shembujt e ardhsh\u00ebm ne do t\u00eb mbledhim t\u00eb gjitha k\u00ebto elemente s\u00eb bashku. P\u00ebr m\u00eb tep\u00ebr, do t\u00eb njiheni me operacionet dritare \u2014 nj\u00eb mund\u00ebsi tjet\u00ebr fantastike p\u00ebr aplikacionet e rrjedh\u00ebs. Shembulli yn\u00eb i par\u00eb do t\u00eb jet\u00eb agregimi i thjesht\u00eb.<\/p>\n<h3>5.3.1. Agregimi i v\u00ebllimit t\u00eb shitjeve t\u00eb aksioneve sipas industrive<\/h3>\n<p>\nAgregimi dhe grupimi jan\u00eb mjete thelb\u00ebsore kur punohet me t\u00eb dh\u00ebna rrjedh\u00ebse. K\u00ebrkimi i regjistrimeve individuale p\u00ebrmes ardhjes shpesh nuk \u00ebsht\u00eb i mjaftuesh\u00ebm. P\u00ebr t\u00eb nxjerr\u00eb informacione shtes\u00eb nga t\u00eb dh\u00ebnat, nevojitet grupimi dhe kombinimi i tyre.<\/p>\n<p>N\u00eb k\u00ebt\u00eb shembull, ju do t\u00eb vishni kostumin e tregtarit t\u00eb brendsh\u00ebm, i cili duhet t\u00eb ndjek\u00eb v\u00ebllimet e shitjeve t\u00eb aksioneve t\u00eb kompanive n\u00eb disa industri. N\u00eb ve\u00e7anti, ju interesojn\u00eb pes\u00eb kompani me volumin m\u00eb t\u00eb lart\u00eb t\u00eb shitjeve t\u00eb aksioneve n\u00eb secil\u00ebn nga industrin\u00eb.<\/p>\n<p>P\u00ebr nj\u00eb agregim t\u00eb till\u00eb do t\u00eb nevojiten disa hapa t\u00eb ardhsh\u00ebm p\u00ebr t\u00eb p\u00ebrkthyer t\u00eb dh\u00ebnat n\u00eb form\u00ebn e duhur (kur flasim n\u00eb p\u00ebrgjith\u00ebsi).<\/p>\n<ol>\n<li>Krijoni nj\u00eb burim mbi nj\u00eb tem\u00eb q\u00eb botoni informacion t\u00eb pap\u00ebrpunuar n\u00eb tregtimin e aksioneve. Ne do t\u00eb duhet t\u00eb shfaqim nj\u00eb objekt t\u00eb tipit StockTransaction n\u00eb nj\u00eb objekt t\u00eb tipit ShareVolume. \u00c7\u00ebshtja \u00ebsht\u00eb se objekti StockTransaction p\u00ebrmban metadata t\u00eb shitjeve, nd\u00ebrsa ne na nevojiten vet\u00ebm t\u00eb dh\u00ebnat rreth numrit t\u00eb aksioneve t\u00eb shitur.<\/li>\n<li>Gruponi t\u00eb dh\u00ebnat e ShareVolume sipas simboleve t\u00eb aksioneve. Pas grupimit sipas simboleve, \u00ebsht\u00eb e mundur t\u00eb p\u00ebrmbledhni k\u00ebto t\u00eb dh\u00ebna n\u00eb shumat nd\u00ebrmjet\u00ebse t\u00eb volumit t\u00eb shitjeve t\u00eb aksioneve. Vlen t\u00eb theksohet se metoda KStream.groupBy kthen nj\u00eb instanc\u00eb t\u00eb tipit KGroupedStream. Nd\u00ebrsa p\u00ebr t\u00eb marr\u00eb nj\u00eb instanc\u00eb t\u00eb KTable, mund t\u00eb thirrni m\u00eb tej metod\u00ebn KGroupedStream.reduce.<\/li>\n<\/ol>\n<p><\/p>\n<blockquote><p><b>\u00c7far\u00eb \u00ebsht\u00eb nd\u00ebrfaqja KGroupedStream<\/b><\/p>\n<p>Metodat KStream.groupBy dhe KStream.groupByKey kthejn\u00eb nj\u00eb instanc\u00eb t\u00eb KGroupedStream. KGroupedStream \u00ebsht\u00eb nj\u00eb paraqitje nd\u00ebrmjet\u00ebse e rrjedh\u00ebs s\u00eb ngjarjeve pas grupimit sipas \u00e7el\u00ebsave. Ajo nuk \u00ebsht\u00eb aspak e destinuar p\u00ebr p\u00ebrdorim t\u00eb drejtp\u00ebrdrejt\u00eb. N\u00eb vend t\u00eb k\u00ebsaj, KGroupedStream p\u00ebrdoret p\u00ebr operacione agreguese, rezultat i t\u00eb cilave \u00ebsht\u00eb gjithmon\u00eb KTable. Dhe p\u00ebr sa koh\u00eb q\u00eb rezultati i operacioneve agreguese \u00ebsht\u00eb KTable dhe n\u00eb to aplikohet nj\u00eb depo e shtetit, ndoshta jo t\u00eb gjitha p\u00ebrdit\u00ebsimet rezultuese d\u00ebrgohen m\u00eb tutje n\u00eb pajisje.<\/p>\n<p>Metoda KTable.groupBy kthen nj\u00eb KGroupedTable t\u00eb ngjash\u00ebm \u2014 nj\u00eb p\u00ebrfaq\u00ebsim t\u00eb mes\u00ebm t\u00eb nj\u00eb rrjedhe azhurnimesh t\u00eb rregulluara sipas \u00e7elikut.<\/p><\/blockquote>\n<p>\nLe t\u00eb b\u00ebjm\u00eb nj\u00eb pushim t\u00eb vog\u00ebl dhe t\u00eb shohim figur\u00ebn 5.9, e cila tregon arritjet tona. Kjo topologji duhet t\u00eb jet\u00eb tashm\u00eb e njohur p\u00ebr ju.<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/9fd61317cde376362adcaeec72908919.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTani le t\u00eb shohim kodin p\u00ebr k\u00ebt\u00eb topologji (mund ta gjeni n\u00eb skedarin src\/main\/java\/bbejeck\/chapter_5\/AggregationsAndReducingExample.java) (listing 5.2).<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/f937287e448295fbd467c283ceca316a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKodi i paraqitur ve\u00e7ohet p\u00ebr shkurt\u00ebsin\u00eb dhe p\u00ebrb\u00ebrjen e madhe t\u00eb veprimeve t\u00eb kryera n\u00eb disa rreshta. N\u00eb parametrin e par\u00eb t\u00eb metod\u00ebs builder.stream mund t\u00eb v\u00ebreni di\u00e7ka t\u00eb re p\u00ebr ju: vler\u00ebn e enumeruar t\u00eb tipit AutoOffsetReset.EARLIEST (ka gjithashtu LATEST), e cila caktohet p\u00ebrmes metod\u00ebs Consumed.withOffsetResetPolicy. Me k\u00ebt\u00eb tip enumerimi mund t\u00eb specifikoni strategjin\u00eb e rikthimit t\u00eb pozicionit p\u00ebr \u00e7do KStream ose KTable, q\u00eb ka prioritet mbi parametrin e rikthimit t\u00eb pozicionit nga konfigurimi.<\/p>\n<blockquote><p><b>GroupByKey dhe GroupBy<\/b><\/p>\n<p>N\u00eb nd\u00ebrfaqen KStream, ka dy metoda p\u00ebr grupimin e regjistrimeve: GroupByKey dhe GroupBy. T\u00eb dyja kthejn\u00eb KGroupedTable, k\u00ebshtu q\u00eb mund t\u00eb keni nj\u00eb pyetje t\u00eb arsyeshme: \u00e7far\u00eb ndan ata dhe kur t\u00eb p\u00ebrdorni cilin prej tyre?<\/p>\n<p>Metoda GroupByKey p\u00ebrdoret kur \u00e7el\u00ebsat n\u00eb KStream tashm\u00eb jan\u00eb t\u00eb mbushur. E r\u00ebnd\u00ebsishme \u00ebsht\u00eb se flamuri \"k\u00ebrkon ripjes\u00ebzim\" nuk \u00ebsht\u00eb vendosur kurr\u00eb.<\/p>\n<p>Metoda GroupBy parashikon q\u00eb ju keni ndryshuar \u00e7el\u00ebsat p\u00ebr grupim, k\u00ebshtu q\u00eb flamuri i ripjes\u00ebzimit \u00ebsht\u00eb vendosur n\u00eb true. Ekzekutimi pas metod\u00ebs GroupBy p\u00ebr lidhje, agregat\u00eb, etj. do t\u00eb \u00e7oj\u00eb n\u00eb ripjes\u00ebzim automatik.<br \/>\nP\u00ebrmbledhje: duhet t\u00eb p\u00ebrdoret sa m\u00eb shum\u00eb t\u00eb jet\u00eb e mundur GroupByKey, dhe jo GroupBy.<\/p><\/blockquote>\n<p>\n\u00c7far\u00eb b\u00ebjn\u00eb metodat mapValues dhe groupBy \u2014 \u00ebsht\u00eb e qart\u00eb, prandaj le t'i hedhim nj\u00eb v\u00ebshtrim metod\u00ebs sum() (e cila mund t\u00eb gjendet n\u00eb skedarin src\/main\/java\/bbejeck\/model\/ShareVolume.java) (listimi 5.3).<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/8e9a6f873594f9b5fef9a96c42353a61.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nMetoda ShareVolume.sum kthen shum\u00ebn nd\u00ebrmjet\u00ebse t\u00eb volumit t\u00eb shitjeve t\u00eb aksioneve, dhe rezultati i gjith\u00eb zinxhirit t\u00eb llogaritjeve paraqet nj\u00eb objekt KTable. Tani e kuptoni rolin q\u00eb luan KTable. Kur objekte ShareVolume arrijn\u00eb, p\u00ebrdit\u00ebsimi m\u00eb i fundit i r\u00ebnd\u00ebsish\u00ebm ruhet n\u00eb objektin p\u00ebrkat\u00ebs KTable. \u00cbsht\u00eb e r\u00ebnd\u00ebsishme t\u00eb mos e harroni se t\u00eb gjitha p\u00ebrdit\u00ebsimet reflektohen n\u00eb shareVolumeKTable paraprak, por jo t\u00eb gjitha d\u00ebrgohen m\u00eb tej.<\/p>\n<p>M\u00eb pas, me k\u00ebt\u00eb KTable, ne do t\u00eb kryejm\u00eb agregimin (sip\u00ebr numrit t\u00eb aksioneve t\u00eb shitur), p\u00ebr t\u00eb marr\u00eb pes\u00eb kompani me volumin m\u00eb t\u00eb madh t\u00eb shitjeve t\u00eb aksioneve n\u00eb secil\u00ebn nga industrive. Veprimet tona do t\u00eb jen\u00eb t\u00eb ngjashme me ato gjat\u00eb agregimit t\u00eb par\u00eb.<\/p>\n<ol>\n<li>T\u00eb kryejm\u00eb nj\u00eb tjet\u00ebr operacion groupBy p\u00ebr t\u00eb grupuar objekte t\u00eb ve\u00e7anta ShareVolume sipas industrive.<\/li>\n<li>T\u00eb fillojm\u00eb me p\u00ebrllogaritjen e objekteve ShareVolume. K\u00ebt\u00eb her\u00eb, objekti i agregimit p\u00ebrfaq\u00ebson nj\u00eb radh\u00eb me p\u00ebrpar\u00ebsi t\u00eb caktuar. N\u00eb nj\u00eb radh\u00eb me p\u00ebrpar\u00ebsi t\u00eb caktuar ruhen vet\u00ebm pes\u00eb kompani me numrin m\u00eb t\u00eb madh t\u00eb aksioneve t\u00eb shitura.<\/li>\n<li>T\u00eb shfaqim radh\u00ebt nga pika e m\u00ebparshme n\u00eb nj\u00eb vler\u00eb string dhe t\u00eb kthejm\u00eb pes\u00eb aksionet m\u00eb t\u00eb shitura sipas numrit t\u00eb aksioneve n\u00eb industri.<\/li>\n<li>T\u00eb shkruajm\u00eb rezultatet n\u00eb form\u00eb string n\u00eb tem\u00eb.<\/li>\n<\/ol>\n<p>\nN\u00eb fig. 5.10, tregohet grafiku i topologjis\u00eb s\u00eb l\u00ebvizjes s\u00eb t\u00eb dh\u00ebnave. Si\u00e7 e shihni, cikli i dyt\u00eb i p\u00ebrpunimit \u00ebsht\u00eb mjaft i thjesht\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/dabd1507eee267038edb7f8d76d8d8ae.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTani, pasi keni kuptuar qart\u00eb struktur\u00ebn e k\u00ebtij rrethi t\u00eb dyt\u00eb t\u00eb p\u00ebrpunimit, mund t\u00eb kaloni n\u00eb kodin e tij origjinal (do ta gjeni n\u00eb skedarin src\/main\/java\/bbejeck\/chapter_5\/AggregationsAndReducingExample.java) (listing 5.4).<\/p>\n<p>N\u00eb k\u00ebt\u00eb inicializues ka nj\u00eb variab\u00ebl fixedQueue. Kjo \u00ebsht\u00eb nj\u00eb objekt i personalizuar - nj\u00eb adapter p\u00ebr java.util.TreeSet, i cili p\u00ebrdoret p\u00ebr t\u00eb ndjekur N rezultatet m\u00eb t\u00eb m\u00ebdha n\u00eb rendin n\u00eb r\u00ebnie t\u00eb numrit t\u00eb aksioneve t\u00eb shitura.<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/488b072b0d91b81c925ca72291e69e48.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJu keni hasur tashm\u00eb me thirrjet groupBy dhe mapValues, prandaj nuk do t\u00eb ndalemi tek ato (ne th\u00ebrrasim metod\u00ebn KTable.toStream, pasi metoda KTable.print \u00ebsht\u00eb e zastaruar). Por ende nuk keni par\u00eb versionin KTable t\u00eb metod\u00ebs aggregate(), k\u00ebshtu q\u00eb do t\u00eb kalojm\u00eb pak koh\u00eb p\u00ebr ta diskutuar at\u00eb.<\/p>\n<p>Si e mbani mend, KTable dallon nga fakti se regjistrimet me \u00e7el\u00ebsa t\u00eb nj\u00ebjt\u00eb merren si p\u00ebrdit\u00ebsime. KTable z\u00ebvend\u00ebson regjistrimin e vjet\u00ebr me t\u00eb riun. Agregimi ndodh n\u00eb nj\u00eb m\u00ebnyr\u00eb t\u00eb ngjashme: regjistrimet m\u00eb t\u00eb fundit me nj\u00eb \u00e7el\u00ebs mblidhen. Kur nj\u00eb regjistrim mb\u00ebrrin, ai shtohet n\u00eb instanc\u00ebn e klas\u00ebs FixedSizePriorityQueue me ndihm\u00ebn e somatorit (parametri i dyt\u00eb n\u00eb thirrjen e metod\u00ebs aggregate), por n\u00ebse ekziston tashm\u00eb nj\u00eb regjistrim tjet\u00ebr me t\u00eb nj\u00ebjtin \u00e7el\u00ebs, regjistrimi i vjet\u00ebr hiqet me ndihm\u00ebn e zbrit\u00ebsit (parametri i tret\u00eb n\u00eb thirrjen e metod\u00ebs aggregate).<\/p>\n<p>Kjo do t\u00eb thot\u00eb se agregatori yn\u00eb, FixedSizePriorityQueue, nuk agregon t\u00eb gjitha vlerat me nj\u00eb \u00e7el\u00ebs t\u00eb vet\u00ebm, por ruan shum\u00ebn l\u00ebviz\u00ebse t\u00eb sasis\u00eb s\u00eb N llojeve m\u00eb t\u00eb shitura t\u00eb aksioneve. N\u00eb \u00e7do regjistrim q\u00eb mb\u00ebrrin p\u00ebrmban numrin total t\u00eb aksioneve t\u00eb shitura deri tani. KTable do t'ju jap\u00eb informacion se cilat kompani kan\u00eb m\u00eb shum\u00eb aksione q\u00eb shiten n\u00eb k\u00ebt\u00eb moment, agregimi l\u00ebviz\u00ebs i \u00e7do p\u00ebrdit\u00ebsimi nuk \u00ebsht\u00eb i nevojsh\u00ebm.<\/p>\n<p>Ne m\u00ebsuam t\u00eb b\u00ebjm\u00eb dy gj\u00ebra t\u00eb r\u00ebnd\u00ebsishme:<\/p>\n<ul>\n<li>grupojm\u00eb vlerat n\u00eb KTable sipas \u00e7el\u00ebsit t\u00eb p\u00ebrbashk\u00ebt;<\/li>\n<li>kryejm\u00eb operacione t\u00eb dobishme mbi k\u00ebto vlera t\u00eb grupuara, si\u00e7 jan\u00eb reduktimi dhe agregimi.<\/li>\n<\/ul>\n<p>\nAft\u00ebsia p\u00ebr t\u00eb kryer k\u00ebto operacione \u00ebsht\u00eb e r\u00ebnd\u00ebsishme p\u00ebr t\u00eb kuptuar kuptimin e t\u00eb dh\u00ebnave q\u00eb l\u00ebvizin p\u00ebrmes aplikacionit Kafka Streams dhe p\u00ebr t\u00eb zbuluar se \u00e7far\u00eb informacioni mbartin ato.<\/p>\n<p>Ne gjithashtu e kemi lidhur s\u00eb bashku disa nga konceptet ky\u00e7e q\u00eb jan\u00eb diskutuar m\u00eb par\u00eb n\u00eb k\u00ebt\u00eb lib\u00ebr. N\u00eb kapitullin 4, fol\u00ebm p\u00ebr r\u00ebnd\u00ebsin\u00eb e q\u00ebndrueshm\u00ebris\u00eb dhe gjendjes lokale p\u00ebr aplikacionet e rrjedh\u00ebs. Shembulli i par\u00eb nga ky kapitel demonstroi pse \u00ebsht\u00eb kaq e r\u00ebnd\u00ebsishme gjendja lokale \u2014 ajo ofron mund\u00ebsin\u00eb p\u00ebr t\u00eb ndjekur se \u00e7far\u00eb informacioni keni par\u00eb tashm\u00eb. Qasja lokale ndihmon p\u00ebr t\u00eb shmangur vonesat n\u00eb rrjet, duke e b\u00ebr\u00eb aplikacionin m\u00eb t\u00eb shpejt\u00eb dhe m\u00eb t\u00eb q\u00ebndruesh\u00ebm ndaj gabimeve.<\/p>\n<p>Kur realizoni \u00e7do operacion t\u00eb reduktimit ose p\u00ebrmbledhjes, duhet t\u00eb tregoni emrin e depozit\u00ebs s\u00eb gjendjes. Operacionet e reduktimit dhe p\u00ebrmbledhjes kthejn\u00eb nj\u00eb ekzemplar t\u00eb KTable, dhe KTable p\u00ebrdor depozit\u00ebn e gjendjes p\u00ebr t\u00eb z\u00ebvend\u00ebsuar rezultatet e vjetra me t\u00eb reja. Si\u00e7 e keni par\u00eb, jo t\u00eb gjitha p\u00ebrdit\u00ebsimet d\u00ebrgohen m\u00eb tej n\u00eb tub, dhe kjo \u00ebsht\u00eb e r\u00ebnd\u00ebsishme, sepse operacionet e p\u00ebrmbledhjes jan\u00eb t\u00eb destinuara p\u00ebr t\u00eb marr\u00eb informacionin p\u00ebrfundimtar. N\u00ebse nuk p\u00ebrdoret gjendja lokale, KTable do t\u00eb d\u00ebrgoj\u00eb m\u00eb tej t\u00eb gjitha rezultatet e p\u00ebrmbledhjes dhe reduktimit.<\/p>\n<p>M\u00eb pas do t\u00eb shohim si realizohen operacione t\u00eb tilla si p\u00ebrmbledhja brenda nj\u00eb intervali t\u00eb caktuar kohor \u2014 ato q\u00eb quhen operacione dritare (windowing operations).<\/p>\n<h3>5.3.2. Operacionet dritare<\/h3>\n<p>\nN\u00eb seksionin e m\u00ebparsh\u00ebm u njoh\u00ebm me reduktimin dhe p\u00ebrmbledhjen \u00abl\u00ebviz\u00ebse\u00bb. Aplikacioni realizoi nj\u00eb reduktim t\u00eb vazhduesh\u00ebm t\u00eb volumit t\u00eb shitjeve t\u00eb aksioneve duke e p\u00ebrmbledhur m\u00eb pas pes\u00eb aksionet m\u00eb t\u00eb shitura n\u00eb burs\u00eb.<\/p>\n<p>Ndonj\u00ebher\u00eb, agregimi dhe kompresimi i vazhduesh\u00ebm i rezultateve \u00ebsht\u00eb i nevojsh\u00ebm. Nd\u00ebrsa her\u00eb t\u00eb tjera duhet t\u00eb kryhen operacione vet\u00ebm p\u00ebr nj\u00eb interval t\u00eb caktuar kohor. P\u00ebr shembull, llogaritur se sa operacione tregtare jan\u00eb kryer me aksionet e nj\u00eb kompanie t\u00eb caktuar n\u00eb 10 minutat e fundit. Ose sa p\u00ebrdorues klikuan n\u00eb nj\u00eb banner t\u00eb ri reklamor n\u00eb 15 minutat e fundit. Aplikacioni mund t\u00eb kryej\u00eb k\u00ebto operacione p\u00ebrs\u00ebrit\u00ebsisht, por me rezultatet q\u00eb lidhen vet\u00ebm me intervalet e caktuara kohore (dritaret e koh\u00ebs).<\/p>\n<h3>Num\u00ebrimi i transaksioneve bursore sipas bler\u00ebsit<\/h3>\n<p>\nN\u00eb shembullin e m\u00ebposht\u00ebm, ne do t\u00eb merremi me ndjekjen e transaksioneve bursore p\u00ebr disa tregtar\u00eb \u2014 ose organizata t\u00eb m\u00ebdha, ose financist\u00eb t\u00eb zgjuar dhe t\u00eb vetmuar.<\/p>\n<p>Ka ekzistojn\u00eb dy shkak t\u00eb mundsh\u00ebm p\u00ebr nj\u00eb ndjekje t\u00eb till\u00eb. Nj\u00ebra \u00ebsht\u00eb nevoja p\u00ebr t\u00eb ditur se \u00e7far\u00eb blejn\u00eb\/shesin lider\u00ebt e tregut. N\u00ebse k\u00ebta lojtar\u00eb t\u00eb m\u00ebdhenj dhe investitor\u00ebt e shkath\u00ebt shohin mund\u00ebsi q\u00eb hapen p\u00ebr ta, ka kuptim t\u00eb ndiqen strategjit\u00eb e tyre. Arsyeja tjet\u00ebr \u00ebsht\u00eb d\u00ebshira p\u00ebr t\u00eb v\u00ebn\u00eb re \u00e7do shenj\u00eb t\u00eb mundshme t\u00eb marr\u00ebveshjeve t\u00eb paligjshme duke p\u00ebrdorur informacionin e brendsh\u00ebm. P\u00ebr k\u00ebt\u00eb, do t'ju nevojitet t\u00eb analizoni korelacionin e shp\u00ebrthimeve t\u00eb m\u00ebdha t\u00eb shitjeve me njoftimet e r\u00ebnd\u00ebsishme p\u00ebr shtyp.<\/p>\n<p>Kjo ndjekje p\u00ebrb\u00ebhet nga faza t\u00eb tilla si:<\/p>\n<ul>\n<li>krijimi i nj\u00eb rrjedhe leximi nga tema stock-transactions;<\/li>\n<li>grupimi i t\u00eb dh\u00ebnave hyr\u00ebse sipas identifikuesit t\u00eb bler\u00ebsit dhe simbolit t\u00eb tregtis\u00eb s\u00eb aksioneve. Thirrja e metod\u00ebs groupBy kthen nj\u00eb instanc\u00eb t\u00eb klas\u00ebs KGroupedStream;<\/li>\n<li>kthimi i nj\u00eb rrjedhe t\u00eb dh\u00ebnash nga KGroupedStream.windowedBy e kufizuar n\u00eb nj\u00eb dritare kohore, e cila lejon realizimin e agregimit n\u00eb dritare. N\u00eb var\u00ebsi t\u00eb llojit t\u00eb dritares, kthehet ose TimeWindowedKStream ose SessionWindowedKStream;<\/li>\n<li>num\u00ebrimi i transaksioneve p\u00ebr operacionin e agregimit. Rryma e dh\u00ebnash n\u00eb dritare p\u00ebrcakton n\u00ebse nj\u00eb regjistrim i caktuar p\u00ebrfshihet n\u00eb k\u00ebt\u00eb num\u00ebrim;<\/li>\n<li>sh\u00ebnimi i rezultateve n\u00eb nj\u00eb tem\u00eb ose dalja e tyre n\u00eb konsol\u00eb gjat\u00eb zhvillimit.<\/li>\n<\/ul>\n<p>\nTopologjia e k\u00ebsaj aplikacioni \u00ebsht\u00eb e thjesht\u00eb, por nj\u00eb imazh vizual nuk do t\u00eb d\u00ebmtonte. Le t\u00eb hedhim nj\u00eb sy n\u00eb fig. 5.11.<\/p>\n<p>M\u00eb pas do t\u00eb shqyrtojm\u00eb funksionalitetin e operacioneve me dritare dhe kodin p\u00ebrkat\u00ebs.<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/67d9d8d8acb1370a7c7fe5cd9a8b6aa7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Llojet e dritareve<\/h3>\n<p>\nN\u00eb Kafka Streams ka tre lloje dritaresh:<\/p>\n<ul>\n<li>seanc\u00eb;<\/li>\n<li>\u00ablidhen\u00bb (tumbling);<\/li>\n<li>l\u00ebviz\u00ebse\/\u00abskakuese\u00bb (sliding\/hopping).<\/li>\n<\/ul>\n<p>\nCilin t\u00eb zgjidhni varet nga k\u00ebrkesat e biznesit. Dritaret \u00ablidhen\u00bb dhe \u00abskakuese\u00bb jan\u00eb k\u00ebto me kufizime n\u00eb koh\u00eb, nd\u00ebrsa kufizimet e dritareve t\u00eb seanc\u00ebs varen nga veprimet e p\u00ebrdoruesve \u2014 koh\u00ebzgjatja e seanc\u00ebs (-ave) p\u00ebrcaktohet vet\u00ebm nga sa aktivisht vepron p\u00ebrdoruesi. E r\u00ebnd\u00ebsishme \u00ebsht\u00eb t\u00eb mos harrohet se t\u00eb gjitha llojet e dritareve bazohen n\u00eb etiketat e dat\u00ebs\/koha t\u00eb sh\u00ebnimeve, jo n\u00eb koh\u00ebn sistemike.<\/p>\n<p>M\u00eb pas do ta realizojm\u00eb topologjin\u00eb ton\u00eb me secilin nga llojet e dritareve. Kodi i plot\u00eb do t\u00eb jepet vet\u00ebm n\u00eb shembullin e par\u00eb, p\u00ebr llojet e tjera t\u00eb dritareve asgj\u00eb nuk do t\u00eb ndryshoj\u00eb, p\u00ebrve\u00e7 llojit t\u00eb operacionit t\u00eb dritares.<\/p>\n<h3>Dritaret e seanc\u00ebs<\/h3>\n<p>\nDritaret e sesioneve shum\u00eb ndahen nga t\u00eb gjitha llojet e tjera t\u00eb dritareve. Ato kufizohen jo aq sa n\u00eb koh\u00eb, sa n\u00eb aktivitetin e p\u00ebrdoruesit (ose aktivitetin e asaj entiteti q\u00eb d\u00ebshironi t\u00eb gjurmoni). Dritaret e sesioneve ndahen nga periudha t\u00eb papun\u00ebsis\u00eb.<\/p>\n<p>Figura 5.12 ilustron konceptin e dritareve t\u00eb sesioneve. Nj\u00eb sesion m\u00eb i vog\u00ebl do t\u00eb bashkohet me sesionin n\u00eb t\u00eb majt\u00eb t\u00eb tij. Nd\u00ebrsa sesioni n\u00eb t\u00eb djatht\u00eb do t\u00eb jet\u00eb i ve\u00e7ant\u00eb, pasi pason nj\u00eb periudh\u00eb t\u00eb gjat\u00eb papun\u00ebsie. Dritaret e sesioneve bazohen n\u00eb veprimet e p\u00ebrdoruesve, por aplikojn\u00eb etiketat e dat\u00ebs\/koh\u00ebs nga regjistrimet p\u00ebr t\u00eb p\u00ebrcaktuar se cilit sesion i p\u00ebrket regjistrimi.<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/d39a5db7af7d6aa2194802622b2b47fd.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>P\u00ebrdorimi i dritareve t\u00eb sesioneve p\u00ebr t\u00eb gjurmuar transaksionet n\u00eb treg<\/h3>\n<p>\nDo t\u00eb p\u00ebrdorim dritaret e sesioneve p\u00ebr t\u00eb kapur informacion mbi transaksionet n\u00eb treg. Zhvillimi i dritareve t\u00eb sesioneve \u00ebsht\u00eb demonstruar n\u00eb listimin 5.5 (i cili mund t\u00eb gjendet n\u00eb skedarin src\/main\/java\/bbejeck\/chapter_5\/CountingWindowingAndKTableJoinExample.java).<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/2dcbd9a36baec0e746aad165121451b3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nShumica e operacioneve t\u00eb k\u00ebsaj topologjie tashm\u00eb i keni par\u00eb, k\u00ebshtu q\u00eb nuk ka nevoj\u00eb t'i shqyrtojm\u00eb ato k\u00ebtu p\u00ebrs\u00ebri. Por ka disa elemente t\u00eb reja k\u00ebtu, t\u00eb cilat do t'i diskutojm\u00eb tani.<\/p>\n<p>N\u00eb \u00e7do operacion groupBy zakonisht kryhet nj\u00eb operacion agregimi (agregim, p\u00ebrmbledhje ose num\u00ebrim). Mund t\u00eb b\u00ebhet ose agregim kumulativ me nj\u00eb total n\u00eb rritje, ose agregim dritare ku merret parasysh regjistrohet brenda nj\u00eb dritare kohore t\u00eb caktuar.<\/p>\n<p>Kodi n\u00eb listimin 5.5 kryen num\u00ebrimin e transaksioneve brenda dritareve t\u00eb seanc\u00ebs. N\u00eb fig. 5.13 k\u00ebto veprime analizohen hap pas hapi.<\/p>\n<p>Me thirrjen windowedBy(SessionWindows.with(twentySeconds).until(fifteenMinutes)) krijojm\u00eb nj\u00eb dritare seance me nj\u00eb interval inaktiviteti prej 20 sekondash dhe nj\u00eb periudh\u00eb ruajtjeje prej 15 minutash. Intervali i inaktivitetit prej 20 sekondash do t\u00eb thot\u00eb se aplikacioni do t\u00eb p\u00ebrfshij\u00eb \u00e7do regjistrim q\u00eb arrin brenda 20 sekondash nga p\u00ebrfundimi ose fillimi i seanc\u00ebs aktuale n\u00eb k\u00ebt\u00eb (aktive) seanc\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/9bd47b04698086872fd135b4c67eb938.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nM\u00eb pas, ne tregojm\u00eb se cila operacioni agregimi duhet t\u00eb kryhet n\u00eb dritaren e sesionit \u2014 n\u00eb k\u00ebt\u00eb rast count. N\u00ebse regjistrimi hyr\u00ebs tejkalon intervalin e mosaktivitetit (n\u00eb cilindo nga an\u00ebt e timestamps), aplikacioni krijon nj\u00eb sesion t\u00eb ri. Intervali i ruajtjes do t\u00eb thot\u00eb mbajtjen e sesionit p\u00ebr nj\u00eb periudh\u00eb t\u00eb caktuar dhe lejon t\u00eb dh\u00ebna q\u00eb vonohen dhe dalin jasht\u00eb periudh\u00ebs s\u00eb mosaktivitetit t\u00eb sesionit, por q\u00eb ende mund t\u00eb bashkohen. P\u00ebr m\u00eb tep\u00ebr, fillimi dhe fundi i sesionit t\u00eb ri, q\u00eb rezulton nga bashkimi, p\u00ebrputhen me timestamp-in m\u00eb t\u00eb hersh\u00ebm dhe m\u00eb t\u00eb von\u00eb.<\/p>\n<p>Le t\u00eb shqyrtojm\u00eb disa regjistrime nga metoda count, p\u00ebr t\u00eb par\u00eb se si funksionojn\u00eb sesionet (Tabela 5.1).<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/ec04aae466d88c2d2349474069c8d541.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKur regjistrimet arrijn\u00eb, ne k\u00ebrkojm\u00eb p\u00ebr sesionet ekzistuese me t\u00eb nj\u00ebjtin \u00e7el\u00ebs, koh\u00ebn e p\u00ebrfundimit m\u00eb t\u00eb vog\u00ebl se timestamp-i aktual \u2014 intervali i mosaktivitetit dhe koh\u00ebn e fillimit m\u00eb t\u00eb madhe se timestamp-i aktual + intervali i mosaktivitetit. Duke marr\u00eb k\u00ebt\u00eb parasysh, kat\u00ebr regjistrime nga Tabela 5.1 bashkohen n\u00eb nj\u00eb sesion t\u00eb vet\u00ebm n\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb.<\/p>\n<p>1. E para q\u00eb arrin \u00ebsht\u00eb regjistrimi 1, k\u00ebshtu q\u00eb koha e fillimit \u00ebsht\u00eb e barabart\u00eb me koh\u00ebn e p\u00ebrfundimit dhe \u00ebsht\u00eb 00:00:00.<\/p>\n<p>2. M\u00eb pas vjen regjistrimi 2, dhe k\u00ebrkojm\u00eb seancat q\u00eb p\u00ebrfundojn\u00eb jo m\u00eb her\u00ebt se 23:59:55 dhe fillojn\u00eb jo m\u00eb von\u00eb se 00:00:35. Gjejm\u00eb regjistrimin 1 dhe bashkojm\u00eb seancat 1 dhe 2. Marrim koh\u00ebn e fillimit t\u00eb seanc\u00ebs 1 (m\u00eb e hershme) dhe koh\u00ebn e p\u00ebrfundimit t\u00eb seanc\u00ebs 2 (m\u00eb t\u00eb vonshme), pra seanca jon\u00eb e re fillon n\u00eb 00:00:00 dhe p\u00ebrfundon n\u00eb 00:00:15.<\/p>\n<p>3. Vjen regjistrimi 3, k\u00ebrkojm\u00eb seancat midis 00:00:30 dhe 00:01:10 dhe nuk gjejm\u00eb asnj\u00eb. Shtojm\u00eb seanc\u00ebn e dyt\u00eb p\u00ebr \u00e7el\u00ebsin 123-345-654,FFBE, q\u00eb fillon dhe p\u00ebrfundon n\u00eb 00:00:50.<\/p>\n<p>4. Vjen regjistrimi 4, dhe k\u00ebrkojm\u00eb seancat midis 23:59:45 dhe 00:00:25. K\u00ebt\u00eb her\u00eb gjejm\u00eb t\u00eb dyja seancat \u2014 1 dhe 2. T\u00eb gjitha tre seancat bashkohen n\u00eb nj\u00eb, me koh\u00ebn e fillimit 00:00:00 dhe koh\u00ebn e p\u00ebrfundimit 00:00:15.<\/p>\n<p>Nga ajo \u00e7far\u00eb \u00ebsht\u00eb tregohet n\u00eb k\u00ebt\u00eb seksion, \u00ebsht\u00eb e r\u00ebnd\u00ebsishme t\u00eb mbani mend k\u00ebto nuanca t\u00eb r\u00ebnd\u00ebsishme:<\/p>\n<ul>\n<li>seancat \u2014 nuk jan\u00eb dritare me p\u00ebrmasa fikse. Koh\u00ebzgjatja e nj\u00eb seance p\u00ebrcaktohet nga aktiviteti brenda nj\u00eb periudhe t\u00eb caktuar kohore;<\/li>\n<li>t\u00eb dh\u00ebnat e dat\u00ebs\/koh\u00ebs n\u00eb t\u00eb dh\u00ebna p\u00ebrcaktojn\u00eb n\u00ebse nj\u00eb ngjarje b\u00ebn pjes\u00eb n\u00eb nj\u00eb seanc\u00eb ekzistuese ose n\u00eb nj\u00eb periudh\u00eb pa aktivitet.<\/li>\n<\/ul>\n<p>\nM\u00eb pas ne do t\u00eb diskutojm\u00eb p\u00ebr llojin tjet\u00ebr t\u00eb dritareve \u2014 \"t\u00eb rrotulluara\".<\/p>\n<h3>\"Dritaret e rrotulluara\"<\/h3>\n<p>\nDritaret \"tumbling\" kapin ngjarjet q\u00eb bien n\u00eb nj\u00eb periudh\u00eb t\u00eb caktuar kohe. Imagjinoni sikur duhet t\u00eb kapni t\u00eb gjitha transaksionet burs\u00eb t\u00eb nj\u00eb kompanie \u00e7do 20 sekonda, k\u00ebshtu q\u00eb mbledhni t\u00eb gjitha ngjarjet p\u00ebr k\u00ebt\u00eb periudh\u00eb kohe. Pas p\u00ebrfundimit t\u00eb intervalit 20-sekond\u00ebsh, dritarja \"kuvyrka\" dhe kalon n\u00eb nj\u00eb interval t\u00eb ri 20-sekond\u00ebsh t\u00eb v\u00ebzhgimit. Figura 5.14 ilustron k\u00ebt\u00eb situat\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/e90e560d9ddda5e2e524b7c387ad9874.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSi\u00e7 mund ta shihni, t\u00eb gjitha ngjarjet e ardhura gjat\u00eb 20 sekondave t\u00eb fundit jan\u00eb t\u00eb p\u00ebrfshira n\u00eb dritare. Pas p\u00ebrfundimit t\u00eb k\u00ebsaj periudhe kohore, krijohet nj\u00eb dritare e re.<\/p>\n<p>N\u00eb listingun 5.6 \u00ebsht\u00eb paraqitur kodi q\u00eb demonstruar p\u00ebrdorimin e dritareve \"kuvyrka\" p\u00ebr t\u00eb kapur transaksionet burs\u00eb \u00e7do 20 sekonda (mund ta gjeni n\u00eb skedarin src\/main\/java\/bbejeck\/chapter_5\/CountingWindowingAndKtableJoinExample.java).<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/e055bb1b288c7d500b64372fe3fbf064.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nP\u00ebr shkak t\u00eb k\u00ebtij ndryshimi t\u00eb vog\u00ebl n\u00eb thirrjen e metod\u00ebs TimeWindows.of, mund t\u00eb p\u00ebrdoret dritarja \"kuvyrk\". N\u00eb k\u00ebt\u00eb shembull, nuk ka thirrje t\u00eb metod\u00ebs until(), duke p\u00ebrdorur intervalin e ruajtjes n\u00eb m\u00ebnyr\u00eb default, q\u00eb \u00ebsht\u00eb 24 or\u00eb.<\/p>\n<p>S\u00eb fundi, \u00ebsht\u00eb koha t\u00eb kalojm\u00eb te opsioni i fundit i dritareve \u2014 dritaret \"hopping\".<\/p>\n<h3>Dritaret l\u00ebviz\u00ebse (\"hopping\")<\/h3>\n<p>\nDritaret e kalimit\/\"k\u00ebrcit\u00ebse\" jan\u00eb t\u00eb ngjashme me dritaret \"rrotulluese\", por me nj\u00eb ndryshim t\u00eb vog\u00ebl. Dritaret e kalimit nuk presin p\u00ebrfundimin e intervalit t\u00eb koh\u00ebs p\u00ebr t\u00eb krijuar nj\u00eb dritare t\u00eb re p\u00ebr t\u00eb trajtuar ngjarjet e fundit. Ato fillojn\u00eb llogaritjet e reja pas nj\u00eb intervali pritjeje m\u00eb t\u00eb vog\u00ebl se sa zgjatja e dritares.<\/p>\n<p>P\u00ebr t\u00eb ilustruar dallimet midis dritareve \"rrotulluese\" dhe \"k\u00ebrcit\u00ebse\", le t\u00eb kthehemi te shembulli i num\u00ebrimit t\u00eb transaksioneve t\u00eb burs\u00ebs. Q\u00ebllimi yn\u00eb mbetet num\u00ebrimi i numrit t\u00eb transaksioneve, por nuk d\u00ebshirojm\u00eb t\u00eb presim t\u00eb gjith\u00eb intervalin e koh\u00ebs p\u00ebrpara se t\u00eb azhurnojm\u00eb num\u00ebruesin. N\u00eb vend t\u00eb k\u00ebsaj, do t\u00eb azhurnojm\u00eb num\u00ebruesin \u00e7do her\u00eb pas intervaleve m\u00eb t\u00eb shkurt\u00ebr t\u00eb koh\u00ebs. P\u00ebr shembull, do t\u00eb num\u00ebrojm\u00eb transaksionet \u00e7do 20 sekonda, por do ta azhurnojm\u00eb num\u00ebruesin \u00e7do 5 sekonda, si\u00e7 tregohet n\u00eb fig. 5.15. K\u00ebshtu, do t\u00eb kemi tre dritare rezultatesh me t\u00eb dh\u00ebna t\u00eb mbivendosura.<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/415c8cd9f2b60d453a1a01c3bc99331f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nN\u00eb listimin 5.7 \u00ebsht\u00eb paraqitur kodi p\u00ebr p\u00ebrcaktimin e dritareve t\u00eb kalimit (mund t\u00eb gjendet n\u00eb skedarin src\/main\/java\/bbejeck\/chapter_5\/CountingWindowingAndKtableJoinExample.java).<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/ab2d1a64380d256d3fb084e16597417c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNj\u00eb dritare \"f\u00eblliq\u00ebse\" mund t\u00eb shnd\u00ebrrohet n\u00eb nj\u00eb \"k\u00ebrcimtare\" duke shtuar thirrjen e metod\u00ebs advanceBy(). N\u00eb shembullin e dh\u00ebn\u00eb, intervali i ruajtjes \u00ebsht\u00eb 15 minuta.<\/p>\n<p>N\u00eb k\u00ebt\u00eb seksion, keni par\u00eb si t\u00eb kufizoni rezultatet e agregimit me dritare t\u00eb p\u00ebrkohshme. Sidomos, do t\u00eb doja q\u00eb t\u00eb mbani mend nga ky seksion tri gj\u00ebra t\u00eb m\u00ebposhtme:<\/p>\n<ul>\n<li>p\u00ebrmasat e dritareve t\u00eb sesioneve kufizohen jo nga intervali i koh\u00ebs, por nga aktiviteti i p\u00ebrdoruesve;<\/li>\n<li>dritaret \"f\u00eblliq\u00ebse\" ofrojn\u00eb nj\u00eb pasqyr\u00eb t\u00eb ngjarjeve brenda nj\u00eb periudhe t\u00eb caktuar;<\/li>\n<li>koh\u00ebzgjatja e dritareve \"k\u00ebrcimtare\" \u00ebsht\u00eb e fiksuar, por ato p\u00ebrdit\u00ebsohen shpesh dhe mund t\u00eb p\u00ebrmbajn\u00eb n\u00eb t\u00eb gjitha dritaret regjistrime q\u00eb prek\u00ebn.<\/li>\n<\/ul>\n<p>\nM\u00eb pas do t\u00eb m\u00ebsojm\u00eb si t\u00eb kthejm\u00eb KTable p\u00ebrs\u00ebri n\u00eb KStream p\u00ebr lidhje.<\/p>\n<h3>5.3.3. Lidhja e objekteve KStream dhe KTable<\/h3>\n<p>\nN\u00eb kapitullin 4 ne diskutuam lidhjen e dy objekteve KStream. Tani na mbetet t\u00eb m\u00ebsojm\u00eb si t\u00eb lidhim KTable me KStream. Kjo mund t\u00eb nevojitet p\u00ebr nj\u00eb arsye t\u00eb thjesht\u00eb. KStream \u00ebsht\u00eb nj\u00eb rrjedh\u00eb regjistrimesh, nd\u00ebrsa KTable \u00ebsht\u00eb nj\u00eb rrjedh\u00eb p\u00ebrdit\u00ebsimesh regjistrimesh, por ndonj\u00ebher\u00eb mund t\u00eb jet\u00eb e nevojshme t\u00eb shtohet nj\u00eb kontekst shtes\u00eb n\u00eb rrjedh\u00ebn e regjistrimeve me p\u00ebrdit\u00ebsime nga KTable.<\/p>\n<p>T\u00eb marrim t\u00eb dh\u00ebnat mbi numrin e transaksioneve n\u00eb burs\u00eb dhe t'i lidhim ato me lajmet e burs\u00ebs p\u00ebr sektor\u00ebt p\u00ebrkat\u00ebs ekonomik\u00eb. K\u00ebto jan\u00eb hapat q\u00eb duhet t\u00eb ndiqni p\u00ebr ta arritur k\u00ebt\u00eb duke marr\u00eb parasysh kodin ekzistues.<\/p>\n<ol>\n<li>T\u00eb konvertojm\u00eb objektin KTable me t\u00eb dh\u00ebnat p\u00ebr numrin e transaksioneve n\u00eb burs\u00eb n\u00eb KStream, duke z\u00ebvend\u00ebsuar \u00e7el\u00ebsin me nj\u00eb \u00e7el\u00ebs q\u00eb tregon sektorin ekonomik t\u00eb k\u00ebtij simboli aksionesh.<\/li>\n<li>T\u00eb krijojm\u00eb nj\u00eb objekt KTable q\u00eb lexon t\u00eb dh\u00ebnat nga topic-i me lajmet e burs\u00ebs. Ky KTable i ri do t\u00eb kategorizohet sipas sektor\u00ebve ekonomik\u00eb.<\/li>\n<li>T\u00eb lidhim azhurnimet e lajmeve me informacionin mbi numrin e transaksioneve n\u00eb burs\u00eb sipas sektor\u00ebve ekonomik\u00eb.<\/li>\n<\/ol>\n<p>\nTani le t\u00eb shohim se si ta zbatojm\u00eb k\u00ebt\u00eb plan aksioni.<\/p>\n<h3>Konvertimi i KTable n\u00eb KStream<\/h3>\n<p>\nP\u00ebr t\u00eb konvertuar KTable n\u00eb KStream, duhet t\u00eb b\u00ebni si m\u00eb posht\u00eb.<\/p>\n<ol>\n<li>T\u00eb th\u00ebrrisni metod\u00ebn KTable.toStream().<\/li>\n<li>Me thirrjen e metod\u00ebs KStream.map, z\u00ebvend\u00ebsoni \u00e7el\u00ebsin me emrin e sektorit ekonomik dhe m\u00eb pas nxirrni nga instanca Windowed objektin TransactionSummary.<\/li>\n<\/ol>\n<p>\nNe do t\u00eb lidhim k\u00ebto operacione n\u00eb nj\u00eb zinxhir si\u00e7 tregohet m\u00eb posht\u00eb (kodi mund t\u00eb gjendet n\u00eb skedarin src\/main\/java\/bbejeck\/chapter_5\/CountingWindowingAndKtableJoinExample.java) (listing 5.8).<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/0d43c2650f6e66e2816ed383da3a29c2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDuke ne realizojm\u00eb operacionin KStream.map, rikthimi i sekcionimit p\u00ebr instanc\u00ebn KStream t\u00eb kthehet automatikisht kur p\u00ebrdoret n\u00eb bashkim.<\/p>\n<p>Ne p\u00ebrfunduam procesin e transformimit, tani nevojitet t\u00eb krijojm\u00eb nj\u00eb objekt KTable p\u00ebr t\u00eb lexuar lajmet e tregut.<\/p>\n<h3>Krijimi i KTable p\u00ebr lajmet e tregut<\/h3>\n<p>\nFatmir\u00ebsisht, p\u00ebr t\u00eb krijuar objektin KTable mjafton nj\u00eb varg kodi (ky kod mund t\u00eb gjendet n\u00eb skedarin src\/main\/java\/bbejeck\/chapter_5\/CountingWindowingAndKtableJoinExample.java) (listimi 5.9).<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/6e83a393fdc9ab74fda4cbdddddb5213.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVlen t\u00eb p\u00ebrmendet se nuk k\u00ebrkohet identifikimi i asnj\u00eb objekti Serde, pasi p\u00ebrdoren Serde me varg. Gjithashtu, fal\u00eb p\u00ebrdorimit t\u00eb enumerat\u00ebs EARLIEST, tabela plot\u00ebsohet me regjistrime q\u00eb n\u00eb fillim.<\/p>\n<p>Tani mund t\u00eb kalojm\u00eb n\u00eb hapin p\u00ebrfundimtar \u2014 bashkimin.<\/p>\n<h3>Bashkimi i p\u00ebrdit\u00ebsimeve t\u00eb lajmeve me t\u00eb dh\u00ebnat e numrit t\u00eb transaksioneve<\/h3>\n<p>\nKrijimi i bashkimit nuk paraqet ndonj\u00eb v\u00ebshtir\u00ebsi. Ne do t\u00eb p\u00ebrdorim nj\u00eb bashkim t\u00eb majt\u00eb p\u00ebr rastin se nuk ka lajme t\u00eb tregut p\u00ebr p\u00ebrkat\u00ebsin\u00eb sektoriale (kode e nevojshme mund t\u00eb gjendet n\u00eb skedarin src\/main\/java\/bbejeck\/chapter_5\/CountingWindowingAndKtableJoinExample.java) (listimi 5.10).<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/92ed70f98927d2f778ad14dbc2a5aa26.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKy operatore leftJoin \u00ebsht\u00eb mjaft i thjesht\u00eb. N\u00eb dallim nga bashkimet n\u00eb kapitullin 4, metoda JoinWindow nuk p\u00ebrdoret, sepse gjat\u00eb kryerjes s\u00eb bashkimit KStream-KTable p\u00ebr \u00e7do \u00e7el\u00ebs n\u00eb KTable ekziston vet\u00ebm nj\u00eb regjistrim. Ky bashkim nuk \u00ebsht\u00eb i kufizuar n\u00eb koh\u00eb: regjistrimi \u00ebsht\u00eb ose n\u00eb KTable, ose nuk ekziston. P\u00ebrfundimi kryesor: p\u00ebrdorimi i objekteve KTable mund\u00ebson pasurimin e KStream me t\u00eb dh\u00ebna referuese q\u00eb p\u00ebr updates jan\u00eb m\u00eb pak t\u00eb shpeshta.<\/p>\n<p>Tani do t\u00eb shqyrtojm\u00eb nj\u00eb m\u00ebnyr\u00eb m\u00eb efektive p\u00ebr pasurimin e ngjarjeve nga KStream.<\/p>\n<h3>5.3.4. Objektet GlobalKTable<\/h3>\n<p>\nSi e kuptoni, ekzistenca e nevoj\u00ebs p\u00ebr t\u00eb pasuruar rrjedhat e ngjarjeve ose p\u00ebr t\u00eb shtuar kontekstin p\u00ebr to. N\u00eb kapitullin 4, keni par\u00eb lidhjet e dy objekteve KStream, dhe n\u00eb seksionin e m\u00ebparsh\u00ebm - lidhjen e KStream dhe KTable. N\u00eb t\u00eb gjitha k\u00ebto raste, \u00ebsht\u00eb e nevojshme t\u00eb b\u00ebhet ri-sekcionimi i rrjedh\u00ebs s\u00eb t\u00eb dh\u00ebnave kur \u00e7el\u00ebsat jan\u00eb t\u00eb shnd\u00ebrruar n\u00eb nj\u00eb tip t\u00eb ri ose vler\u00eb. Ndonj\u00ebher\u00eb ri-sekcionimi b\u00ebhet n\u00eb m\u00ebnyr\u00eb eksplicite, dhe ndonj\u00ebher\u00eb Kafka Streams e b\u00ebn k\u00ebt\u00eb automatikisht. Rii-sekcionimi \u00ebsht\u00eb i nevojsh\u00ebm sepse \u00e7el\u00ebsat jan\u00eb ndryshuar dhe regjistrimet duhet t\u00eb flasin n\u00eb seksione t\u00eb reja, p\u00ebrndryshe lidhja do t\u00eb jet\u00eb e pamundur (kjo u diskutua n\u00eb kapitullin 4, n\u00eb pika \u00abRii-sekcionimi i t\u00eb dh\u00ebnave\u00bb n\u00ebnseksioni 4.2.4).<\/p>\n<h3>Rii-sekcionimi ka nj\u00eb \u00e7mim t\u00eb tij.<\/h3>\n<p>\nRiorganizimi k\u00ebrkon shpenzime - shpenzime t\u00eb m\u00ebtejshme p\u00ebr krijimin e temave nd\u00ebrmjet\u00ebse, ruajtjen e t\u00eb dh\u00ebnave t\u00eb dyfishta n\u00eb nj\u00eb tem\u00eb tjet\u00ebr; kjo gjithashtu n\u00ebnkupton nj\u00eb rritje t\u00eb vones\u00ebs p\u00ebr shkak t\u00eb shkrimit dhe leximit nga kjo tem\u00eb. P\u00ebr m\u00eb tep\u00ebr, n\u00ebse nevojitet t\u00eb realizohet lidhja p\u00ebr m\u00eb shum\u00eb se nj\u00eb aspekt ose dimension, duhet t\u00eb organizohen lidhje n\u00eb zinxhir, t\u00eb shfaqen regjistrimet me \u00e7el\u00ebsa t\u00eb rinj dhe t\u00eb p\u00ebrs\u00ebritet procesi i riorganizimit.<\/p>\n<h3>Lidhja me grupe t\u00eb dh\u00ebnash m\u00eb t\u00eb vogla<\/h3>\n<p>\nN\u00eb disa raste, sasia e t\u00eb dh\u00ebnave referuese me t\u00eb cilat \u00ebsht\u00eb planifikuar lidhja \u00ebsht\u00eb relativisht e vog\u00ebl, k\u00ebshtu q\u00eb kopjet e plota t\u00eb tyre mund t\u00eb ndodhen leht\u00ebsisht lokalisht n\u00eb secilin nga node-t. P\u00ebr k\u00ebto situata, Kafka Streams ofron klas\u00ebn GlobalKTable.<\/p>\n<p>Exemplar\u00ebt e GlobalKTable jan\u00eb unik\u00eb, pasi aplikacioni replikon t\u00eb gjitha t\u00eb dh\u00ebnat n\u00eb \u00e7do nga nyjet. Dhe, pasi t\u00eb gjitha t\u00eb dh\u00ebnat jan\u00eb t\u00eb pranishme n\u00eb \u00e7do nyje, nuk ka nevoj\u00eb p\u00ebr t\u00eb seksionuar rrjedh\u00ebn e ngjarjeve sipas \u00e7el\u00ebsit t\u00eb t\u00eb dh\u00ebnave referuese p\u00ebr ta b\u00ebr\u00eb at\u00eb t\u00eb disponuesh\u00ebm p\u00ebr t\u00eb gjitha seksionet. Me objektet GlobalKTable, gjithashtu mund t\u00eb kryhen bashkime pa \u00e7el\u00ebs. Le t\u00eb kthehemi n\u00eb nj\u00eb nga shembujt e m\u00ebparsh\u00ebm p\u00ebr t\u00eb demonstruar k\u00ebt\u00eb mund\u00ebsi.<\/p>\n<h3>Bashkimi i objekteve KStream me objektet GlobalKTable<\/h3>\n<p>\nN\u00eb n\u00ebnseksionin 5.3.2, ne kryem agregimin e dritareve t\u00eb transaksioneve t\u00eb burs\u00ebs sipas bler\u00ebsve. Rezultatet e k\u00ebtij agregimi dukeshin p\u00ebraf\u00ebrsisht k\u00ebshtu:<\/p>\n<pre><code class=\"plaintext\">{customerId='074-09-3705', stockTicker='GUTM'}, 17\n{customerId='037-34-5184', stockTicker='CORK'}, 16<\/code><\/pre>\n<p>\nMegjith\u00ebse k\u00ebto rezultate p\u00ebrputhen me q\u00ebllimin e p\u00ebrcaktuar, do t\u00eb ishte m\u00eb e dobishme n\u00ebse gjithashtu do t\u00eb shfaqej emri i klientit dhe emri i plot\u00eb i kompanis\u00eb. P\u00ebr t\u00eb shtuar emrin e bler\u00ebsit dhe emrin e kompanis\u00eb, mund t\u00eb kryhen bashkime t\u00eb zakonshme, por do t\u00eb nevojitet t\u00eb b\u00ebhen dy p\u00ebrkthime \u00e7elesh dhe seksionimi i ri. Me GlobalKTable, mund t\u00eb shmangen kostot p\u00ebr k\u00ebto operacione.<\/p>\n<p>P\u00ebr k\u00ebt\u00eb do ta p\u00ebrdorim objektin countStream nga lista 5.11 (kodin p\u00ebrkat\u00ebs e gjeni n\u00eb skedarin src\/main\/java\/bbejeck\/chapter_5\/GlobalKTableExample.java), duke e lidhur at\u00eb me dy objekta GlobalKTable.<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/fc4d91bbe062ceb94f5650224840b81e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKjo \u00ebsht\u00eb diskutuar m\u00eb par\u00eb, prandaj nuk do t\u00eb p\u00ebrs\u00ebris. Por dua t\u00eb theksoj se kodi n\u00eb funksionin toStream().map \u00ebsht\u00eb abstrahuar n\u00eb nj\u00eb objekt-funksion p\u00ebr leht\u00ebsin\u00eb e lexueshm\u00ebris\u00eb, n\u00eb vend t\u00eb nj\u00eb shprehjeje lambda t\u00eb vendosur.<\/p>\n<p>Hapi tjet\u00ebr \u00ebsht\u00eb shpallja e dy instancave GlobalKTable (kodin e dh\u00ebn\u00eb e gjeni n\u00eb skedarin src\/main\/java\/bbejeck\/chapter_5\/GlobalKTableExample.java) (lista 5.12).<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/db3918895f174c8cfb5fc927b55f87a1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Vini re se emrat e temave p\u00ebrshkruhen me ndihm\u00ebn e llojeve enumeruese.<\/p>\n<p>Tani q\u00eb kemi p\u00ebrgatitur t\u00eb gjith\u00eb komponent\u00ebt, mbetet t\u00eb shkruajm\u00eb kodin p\u00ebr lidhjen (t\u00eb cilin e gjeni n\u00eb skedarin src\/main\/java\/bbejeck\/chapter_5\/GlobalKTableExample.java) (lista 5.13).<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/799360cc99f1920c190a61fd4685d4ff.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nMegjithat\u00eb, n\u00eb k\u00ebt\u00eb kod ka dy lidhje, t\u00eb cilat jan\u00eb organizuar n\u00eb form\u00eb zinxhiri, pasi asnj\u00eb nga rezultatet e tyre nuk p\u00ebrdoret ve\u00e7mas. Rezultatet shfaqen n\u00eb fund t\u00eb gjith\u00eb operacionit.<\/p>\n<p>Kur t\u00eb ekzekutoni operacionin e lidhjes t\u00eb m\u00ebsip\u00ebrm, do t\u00eb merrni rezultate t\u00eb k\u00ebtij lloji:<\/p>\n<pre><code class=\"plaintext\">{customer='Barney, Smith' company=\"Exxon\", transactions= 17}<\/code><\/pre>\n<p>\nP\u00ebrmbajtja nuk ka ndryshuar, por k\u00ebto rezultate duken m\u00eb t\u00eb qarta.<\/p>\n<p>N\u00ebse p\u00ebrfshijm\u00eb kapitullin 4, tashm\u00eb keni par\u00eb disa lloje lidhjesh n\u00eb veprim. Ato jan\u00eb listuar n\u00eb tabela 5.2. Kjo tabel\u00eb reflekton mund\u00ebsit\u00eb e lidhjes q\u00eb jan\u00eb t\u00eb r\u00ebnd\u00ebsishme p\u00ebr versionin 1.0.0 t\u00eb Kafka Streams; n\u00eb botimet e ardhshme, ndoshta do t\u00eb ket\u00eb disa ndryshime.<\/p>\n<p><img decoding=\"async\" alt=\"Libri \u00abKafka Streams n\u00eb Veprim. Aplikacione dhe Mikroservis p\u00ebr Pun\u00ebn n\u00eb Koh\u00eb Reale\u00bb\" src=\"\/wp-content\/uploads\/8e4cf35c64a8431bda43a5e748de275f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nN\u00eb p\u00ebrfundim, dua t\u00eb theksoj thelb\u00ebsoren: mund t\u00eb lidhni rrjedhat e ngjarjeve (KStream) dhe rrjedhat e p\u00ebrdit\u00ebsimeve (KTable) duke p\u00ebrdorur gjendjen lokale. P\u00ebr m\u00eb tep\u00ebr, n\u00ebse madh\u00ebsia e t\u00eb dh\u00ebnave ndihm\u00ebse nuk \u00ebsht\u00eb tep\u00ebr e madhe, mund t\u00eb p\u00ebrdorni objektin GlobalKTable. GlobalKTable replikon t\u00eb gjitha seksionet n\u00eb secil\u00ebn nga nodet e aplikacionit Kafka Streams, duke siguruar n\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb disponueshm\u00ebrin\u00eb e t\u00eb gjitha t\u00eb dh\u00ebnave pavar\u00ebsisht nga cilit seksion i p\u00ebrket \u00e7el\u00ebsi.<\/p>\n<p>M\u00eb pas do t\u00eb shohim nj\u00eb mund\u00ebsi t\u00eb Kafka Streams, e cila lejon q\u00eb t\u00eb v\u00ebzhgoni ndryshimet n\u00eb gjendje pa konsumuar t\u00eb dh\u00ebna nga topic-i Kafka.<\/p>\n<h3>5.3.5. Gjendja e disponueshme p\u00ebr k\u00ebrkesa<\/h3>\n<p>\nNe kemi kryer disa operacione q\u00eb p\u00ebrfshijn\u00eb gjendjen dhe gjithmon\u00eb kemi shfaqur rezultatet n\u00eb konsol\u00eb (p\u00ebr q\u00ebllime zhvillimi) ose i kemi regjistruar ato n\u00eb nj\u00eb tem\u00eb (p\u00ebr q\u00ebllime industriale). Kur regjistrojm\u00eb rezultatet n\u00eb nj\u00eb tem\u00eb, duhet t\u00eb p\u00ebrdorim konsumatorin Kafka p\u00ebr t'i par\u00eb ato.<\/p>\n<p>Leximi i t\u00eb dh\u00ebnave nga k\u00ebto tema mund t\u00eb konsiderohet si nj\u00eb lloj vizionesh t\u00eb materializuara (materialized views). P\u00ebr ne, mund t\u00eb p\u00ebrdorim p\u00ebrkufizimin e vizionit t\u00eb materializuar nga \u00abWikipedia\u00bb: \u00ab\u2026nj\u00eb objekt fizik i baz\u00ebs s\u00eb t\u00eb dh\u00ebnave q\u00eb p\u00ebrmban rezultatet e ekzekutimit t\u00eb nj\u00eb k\u00ebrkese. P\u00ebr shembull, ajo mund t\u00eb jet\u00eb nj\u00eb kopje lokale e t\u00eb dh\u00ebnave t\u00eb larg\u00ebta, ose nj\u00eb n\u00ebngrup rreshtash dhe\/ose kolonash t\u00eb nj\u00eb tabele ose rezultateve t\u00eb bashkimit, apo nj\u00eb tabel\u00eb e p\u00ebrmbledhur e marr\u00eb p\u00ebrmes agregimit\u00bb (https:\/\/en.wikipedia.org\/wiki\/Materialized_view).<\/p>\n<p>Kafka Streams gjithashtu lejon ekzekutimin e pyetjeve interaktive ndaj depozitave t\u00eb gjendjes, duke ofruar mund\u00ebsin\u00eb e leximit t\u00eb drejtp\u00ebrdrejt\u00eb t\u00eb k\u00ebtyre pamjeve t\u00eb materializuara. \u00cbsht\u00eb e r\u00ebnd\u00ebsishme t\u00eb theksohet se pyetja ndaj depozitave t\u00eb gjendjes ka karakterin e nj\u00eb operacioni 'vet\u00ebm p\u00ebr lexim'. K\u00ebshtu, mund t\u00eb mos shqet\u00ebsoheni p\u00ebr aksidentalisht t\u00eb b\u00ebni gjendjen t\u00eb papajtueshme gjat\u00eb p\u00ebrpunimit t\u00eb t\u00eb dh\u00ebnave nga aplikacioni.<\/p>\n<p>Mund\u00ebsia e pyetjeve t\u00eb drejtp\u00ebrdrejta ndaj depozitave t\u00eb gjendjes ka r\u00ebnd\u00ebsi t\u00eb madhe. Kjo do t\u00eb thot\u00eb se mund t\u00eb krijoni aplikacione \u2014 tabela informuese pa e nevojitur m\u00eb par\u00eb marrjen e t\u00eb dh\u00ebnave nga konsumatori i Kafka. Ajo rrit edhe efikasitetin e aplikacionit, p\u00ebr shkak se nuk \u00ebsht\u00eb e nevojshme t\u00eb shkruhen p\u00ebrs\u00ebri t\u00eb dh\u00ebnat:<\/p>\n<ul>\n<li>p\u00ebr shkak t\u00eb lokalitetit t\u00eb t\u00eb dh\u00ebnave, ato mund t\u00eb aksesohen shpejt;<\/li>\n<li>p\u00ebrjashtohet dublimi i t\u00eb dh\u00ebnave, pasi ato nuk shkruhen n\u00eb nj\u00eb depo t\u00eb jashtme.<\/li>\n<\/ul>\n<p>\nGj\u00ebja m\u00eb e r\u00ebnd\u00ebsishme q\u00eb do doja q\u00eb ju ta mbani mend \u00ebsht\u00eb: mund t\u00eb b\u00ebni k\u00ebrkesa direkt n\u00eb magazinat e gjendjes nga aplikacioni. Asnj\u00ebher\u00eb nuk mund t\u00eb n\u00ebnvler\u00ebsoni mund\u00ebsit\u00eb q\u00eb kjo ju ofron. N\u00eb vend q\u00eb t\u00eb konsumoni t\u00eb dh\u00ebna nga Kafka dhe t\u00eb ruani regjistrat n\u00eb nj\u00eb baz\u00eb t\u00eb dh\u00ebnash p\u00ebr aplikacionin, mund t\u00eb b\u00ebni k\u00ebrkesa n\u00eb magazinat e gjendjes me t\u00eb nj\u00ebjtin rezultat. K\u00ebrkesat e drejtp\u00ebrdrejta n\u00eb magazinat e gjendjes n\u00ebnkuptojn\u00eb m\u00eb pak kod (pa nevoj\u00ebn p\u00ebr nj\u00eb konsumator) dhe m\u00eb pak softuer (pa nevoj\u00ebn p\u00ebr nj\u00eb tabel\u00eb t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave p\u00ebr ruajtjen e rezultateve).<\/p>\n<p>Ne kemi mbuluar nj\u00eb sasi t\u00eb konsiderueshme informacioni n\u00eb k\u00ebt\u00eb kapitull, prandaj p\u00ebr nj\u00eb koh\u00eb do ta nd\u00ebrpresim diskutimin ton\u00eb mbi k\u00ebrkesat interaktive n\u00eb magazinat e gjendjes. Por mos u shqet\u00ebsoni: n\u00eb kapitullin 9 do t\u00eb krijojm\u00eb nj\u00eb aplikacion t\u00eb thjesht\u00eb \u2014 nj\u00eb panel informacioni me k\u00ebrkesa interaktive. P\u00ebr t\u00eb demonstruar k\u00ebrkesat interaktive dhe mund\u00ebsit\u00eb e tyre p\u00ebr t'u shtuar n\u00eb aplikacionet Kafka Streams, do t\u00eb p\u00ebrdoren disa nga shembujt e k\u00ebtij kapitulli dhe t\u00eb kapitujve t\u00eb m\u00ebparsh\u00ebm.<\/p>\n<h3>Curriculum Vitae<\/h3>\n<p><\/p>\n<ul>\n<li>Objektet KStream p\u00ebrfaq\u00ebsojn\u00eb rrjedha eventi, t\u00eb ngjashme me futjet n\u00eb nj\u00eb baz\u00eb t\u00eb dh\u00ebnash. Objektet KTable p\u00ebrfaq\u00ebsojn\u00eb rrjedha azhurnimesh, jan\u00eb m\u00eb shum\u00eb t\u00eb ngjashme me azhurnimet n\u00eb nj\u00eb baz\u00eb t\u00eb dh\u00ebnash. Madh\u00ebsia e objektit KTable nuk rritet, t\u00eb dh\u00ebnat e vjetra z\u00ebvend\u00ebsohen nga t\u00eb rejat.<\/li>\n<li>Objektet KTable jan\u00eb t\u00eb nevojshme p\u00ebr operacionet e agregimit.<\/li>\n<li>Me ndihm\u00ebn e operacioneve t\u00eb dritareve, mund t\u00eb ndahen t\u00eb dh\u00ebnat e agreguara n\u00eb kosha kohor\u00eb.<\/li>\n<li>Me ndihm\u00ebn e objekteve GlobalKTable, mund t\u00eb aksesohen t\u00eb dh\u00ebnat referuese n\u00eb \u00e7do pik\u00eb t\u00eb aplikacionit, pavar\u00ebsisht ndarjes sipas sekcioneve.<\/li>\n<li>Jan\u00eb t\u00eb mundshme lidhjet mes objekteve KStream, KTable dhe GlobalKTable.<\/li>\n<\/ul>\n<p>\nDer\u00ebt e fundit, ne kemi p\u00ebrqendruar v\u00ebmendjen ton\u00eb n\u00eb krijimin e aplikacioneve Kafka Streams duke p\u00ebrdorur DSL t\u00eb nivelit t\u00eb lart\u00eb KStream. Megjith\u00ebse qasja e nivelit t\u00eb lart\u00eb lejon krijimin e programeve t\u00eb pastra dhe t\u00eb p\u00ebrmbledhura, p\u00ebrdorimi i saj p\u00ebrfaq\u00ebson nj\u00eb kompromis t\u00eb caktuar. Puna me DSL KStream do t\u00eb thot\u00eb se po e rrisim p\u00ebrmbledhjen e kodit duke ulur shkall\u00ebn e kontrollit. N\u00eb kapitullin e ardhsh\u00ebm do t\u00eb shqyrtojm\u00eb API-n\u00eb e nivelit t\u00eb ul\u00ebt t\u00eb nyjave p\u00ebrpunuese dhe do t\u00eb provojm\u00eb kompromise t\u00eb tjera. Programet do t\u00eb b\u00ebhen m\u00eb t\u00eb gjata se sa ishin deri tani, por k\u00ebshtu do t\u00eb kemi mund\u00ebsin\u00eb t\u00eb krijojm\u00eb pothuajse \u00e7do nyje p\u00ebrpunuese q\u00eb na nevojitet.<\/p>\n<p>\u2192 M\u00eb shum\u00eb informacione p\u00ebr librin mund t\u00eb gjenden n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/collection\/best\/product\/kafka-streams-v-deystvii-prilozheniya-i-mikroservisy-dlya-raboty-v-realnom-vremeni\">faqen e botuesit<\/a><\/noindex><\/p>\n<p>\u2192 P\u00ebr p\u00ebrdoruesit e Habra, zbritje 25% me kodin \u2014 <b>Kafka Streams<\/b><\/p>\n<p>\u2192 Pas pages\u00ebs s\u00eb versionit t\u00eb printuar t\u00eb librit, d\u00ebrgohet nj\u00eb lib\u00ebr elektronik n\u00eb e-mail.<br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/piter\/blog\/457756\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440\u043e\u0436\u0438\u0442\u0435\u043b\u0438! \u042d\u0442\u0430 \u043a\u043d\u0438\u0433\u0430 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u043e\u0447\u0435\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u041f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043b\u0443\u0447\u0448\u0435 \u0438\u0437\u0443\u0447\u0438\u0442\u044c Kafka \u0438 Kafka Streams. \u0411\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0437\u043d\u0430\u0442\u044c \u0438 \u0441\u0430\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a Kafka, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e: \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0432\u0430\u043c \u0432\u0441\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e. \u041e\u043f\u044b\u0442\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Kafka, \u043a\u0430\u043a \u0438 \u043d\u043e\u0432\u0438\u0447\u043a\u0438, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u0439 \u043a\u043d\u0438\u0433\u0435 \u043e\u0441\u0432\u043e\u044f\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35786","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440\u043e\u0436\u0438\u0442\u0435\u043b\u0438! \u042d\u0442\u0430 \u043a\u043d\u0438\u0433\u0430 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u043e\u0447\u0435\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u041f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043b\u0443\u0447\u0448\u0435 \u0438\u0437\u0443\u0447\u0438\u0442\u044c Kafka \u0438 Kafka Streams. \u0411\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0437\u043d\u0430\u0442\u044c \u0438 \u0441\u0430\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a Kafka, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e: \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0432\u0430\u043c \u0432\u0441\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e. \u041e\u043f\u044b\u0442\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Kafka, \u043a\u0430\u043a \u0438 \u043d\u043e\u0432\u0438\u0447\u043a\u0438, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u0439 \u043a\u043d\u0438\u0433\u0435 \u043e\u0441\u0432\u043e\u044f\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kniga-kafka-streams-v-dejstvii-prilozheniya-i-mikroservisy-dlya-raboty-v-realnom-vremeni\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u043d\u0438\u0433\u0430 \u00abKafka Streams \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438. \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438\u00bb | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440\u043e\u0436\u0438\u0442\u0435\u043b\u0438! \u042d\u0442\u0430 \u043a\u043d\u0438\u0433\u0430 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u043e\u0447\u0435\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u041f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043b\u0443\u0447\u0448\u0435 \u0438\u0437\u0443\u0447\u0438\u0442\u044c Kafka \u0438 Kafka Streams. \u0411\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0437\u043d\u0430\u0442\u044c \u0438 \u0441\u0430\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a Kafka, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e: \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0432\u0430\u043c \u0432\u0441\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e. \u041e\u043f\u044b\u0442\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Kafka, \u043a\u0430\u043a \u0438 \u043d\u043e\u0432\u0438\u0447\u043a\u0438, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u0439 \u043a\u043d\u0438\u0433\u0435 \u043e\u0441\u0432\u043e\u044f\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kniga-kafka-streams-v-dejstvii-prilozheniya-i-mikroservisy-dlya-raboty-v-realnom-vremeni\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:06:19+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:06:19+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Libri \u00abKafka Streams n\u00eb veprim. Aplikacione dhe mikrosh\u00ebrbime p\u00ebr pun\u00eb n\u00eb koh\u00eb reale\u00bb | ProHoster","description":"P\u00ebrshendetje, Habrons! Kjo lib\u00ebr \u00ebsht\u00eb e p\u00ebrshtatshme p\u00ebr \u00e7do zhvillues q\u00eb d\u00ebshiron t\u00eb kuptoj\u00eb p\u00ebrpunimin e skenave. T\u00eb kuptuarit e programimit t\u00eb shp\u00ebrndar\u00eb do t'ju ndihmoj\u00eb t\u00eb studioni m\u00eb mir\u00eb Kafka dhe Kafka Streams. Do t\u00eb ishte mir\u00eb t\u00eb njihni edhe vet\u00eb framework-un Kafka, por kjo nuk \u00ebsht\u00eb e domosdoshme: un\u00eb do t'ju tregoj gjith\u00e7ka q\u00eb ju nevojitet. Zhvilluesit e p\u00ebrvojsh\u00ebm t\u00eb Kafka, ashtu si dhe fillestar\u00ebt, do t\u00eb m\u00ebsojn\u00eb t\u00eb krijojn\u00eb aplikacione interesante me ndihm\u00ebn e k\u00ebsaj libri.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kniga-kafka-streams-v-dejstvii-prilozheniya-i-mikroservisy-dlya-raboty-v-realnom-vremeni","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u043d\u0438\u0433\u0430 \u00abKafka Streams \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438. \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438\u00bb | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440\u043e\u0436\u0438\u0442\u0435\u043b\u0438! \u042d\u0442\u0430 \u043a\u043d\u0438\u0433\u0430 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u043e\u0447\u0435\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u041f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043b\u0443\u0447\u0448\u0435 \u0438\u0437\u0443\u0447\u0438\u0442\u044c Kafka \u0438 Kafka Streams. \u0411\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0437\u043d\u0430\u0442\u044c \u0438 \u0441\u0430\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a Kafka, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e: \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0432\u0430\u043c \u0432\u0441\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e. \u041e\u043f\u044b\u0442\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Kafka, \u043a\u0430\u043a \u0438 \u043d\u043e\u0432\u0438\u0447\u043a\u0438, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u0439 \u043a\u043d\u0438\u0433\u0435 \u043e\u0441\u0432\u043e\u044f\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kniga-kafka-streams-v-dejstvii-prilozheniya-i-mikroservisy-dlya-raboty-v-realnom-vremeni","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:06:19+00:00","article:modified_time":"2019-10-31T19:06:19+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35786","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 00:45:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:56:32","updated":"2026-01-22 00:45:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/35786","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=35786"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/35786\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=35786"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=35786"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=35786"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}