{"id":32632,"date":"2019-10-31T21:48:08","date_gmt":"2019-10-31T18:48:08","guid":{"rendered":"https:\/\/prohoster.info\/blog\/ne-tolko-obrabotka-kak-my-sdelali-iz-kafka-streams-raspredelennuyu-bazu-dannyh-i-chto-iz-etogo-vyshlo\/"},"modified":"2019-10-31T21:48:08","modified_gmt":"2019-10-31T18:48:08","slug":"ne-tolko-obrabotka-kak-my-sdelali-iz-kafka-streams-raspredelennuyu-bazu-dannyh-i-chto-iz-etogo-vyshlo","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/ne-tolko-obrabotka-kak-my-sdelali-iz-kafka-streams-raspredelennuyu-bazu-dannyh-i-chto-iz-etogo-vyshlo","title":{"rendered":"Jo vet\u00ebm p\u00ebrpunimi: Si e transformuam Kafka Streams n\u00eb nj\u00eb baz\u00eb t\u00eb shp\u00ebrndar\u00eb t\u00eb t\u00eb dh\u00ebnave dhe \u00e7far\u00eb doli nga kjo","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>P\u00ebrsh\u00ebndetje, Habr!<\/p>\n<p>Ju kujtojm\u00eb se pas librit p\u00ebr <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/112863410\">Kafka<\/a><\/noindex> ne kemi nxjerr\u00eb nj\u00eb vep\u00ebr t\u00eb tjera interesante p\u00ebr bibliotek\u00ebn <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/collection\/new\/product\/kafka-streams-v-deystvii-prilozheniya-i-mikroservisy-dlya-raboty-v-realnom-vremeni\">Kafka Streams API<\/a><\/noindex>. <\/p>\n<p><img decoding=\"async\" alt=\"Jo vet\u00ebm p\u00ebrpunimi: Si e transformuam Kafka Streams n\u00eb nj\u00eb baz\u00eb t\u00eb shp\u00ebrndar\u00eb t\u00eb t\u00eb dh\u00ebnave dhe \u00e7far\u00eb doli nga kjo\" src=\"\/wp-content\/uploads\/2019\/04\/7d16ba31ae06a96339a0755b62454f49.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNd\u00ebrkoh\u00eb q\u00eb komuniteti po zbret n\u00eb kufijt\u00eb e mund\u00ebsive t\u00eb k\u00ebtij mjeti t\u00eb fuqish\u00ebm. S\u00eb fundmi, u publikua nj\u00eb artikull, me p\u00ebrkthimin e t\u00eb cilit d\u00ebshirojm\u00eb t'ju njohim. Autori, p\u00ebrmes p\u00ebrvoj\u00ebs s\u00eb tij, tregon se si t\u00eb krijosh nj\u00eb depo t\u00eb shp\u00ebrndar\u00eb t\u00eb t\u00eb dh\u00ebnave nga Kafka Streams. Lexim t\u00eb k\u00ebndsh\u00ebm!<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex> <br \/>\nBiblioteka Apache <noindex><a rel=\"nofollow\" href=\"https:\/\/kafka.apache.org\/documentation\/streams\/\">Kafka Streams<\/a><\/noindex> p\u00ebrdoret n\u00eb mbar\u00eb bot\u00ebn n\u00eb nd\u00ebrmarrje p\u00ebr procesimin e shp\u00ebrndar\u00eb t\u00eb flukseve mbi Apache Kafka. Nj\u00eb nga aspektet e n\u00ebnvler\u00ebsuara t\u00eb k\u00ebtij framework-u \u00ebsht\u00eb se ai lejon ruajtjen e nj\u00eb gjendjeje lokale, e cila prodhohet n\u00eb baz\u00eb t\u00eb p\u00ebrpunimit t\u00eb flukseve.<\/p>\n<p>N\u00eb k\u00ebt\u00eb artikull, do t\u00eb flas p\u00ebr m\u00ebnyr\u00ebn sesi n\u00eb kompanin\u00eb ton\u00eb arrit\u00ebm t\u00eb p\u00ebrfitojm\u00eb nga kjo mund\u00ebsi gjat\u00eb zhvillimit t\u00eb nj\u00eb produkti p\u00ebr sigurin\u00eb e aplikacioneve n\u00eb re. Me ndihm\u00ebn e Kafka Streams, ne krijuam mikrosh\u00ebrbime me gjendje t\u00eb ndar\u00eb, secili prej t\u00eb cil\u00ebve na sh\u00ebrben si nj\u00eb burim i q\u00ebndruesh\u00ebm dhe me disponueshm\u00ebri t\u00eb lart\u00eb t\u00eb informacionit t\u00eb besuesh\u00ebm mbi gjendjen e objekteve n\u00eb sistem. P\u00ebr ne, kjo \u00ebsht\u00eb nj\u00eb p\u00ebrpar\u00ebsi sa n\u00eb aspektin e q\u00ebndrueshm\u00ebris\u00eb, ashtu edhe n\u00eb p\u00ebrmir\u00ebsimin e mb\u00ebshtetjes.<\/p>\n<p>N\u00ebse jeni t\u00eb interesuar p\u00ebr nj\u00eb qasje alternative q\u00eb lejon p\u00ebrdorimin e nj\u00eb baze t\u00eb dh\u00ebnash qendrore p\u00ebr t\u00eb mb\u00ebshtetur gjendjen formale t\u00eb objekteve tuaj \u2013 lexoni, do t\u00eb jet\u00eb interesante\u2026 <\/p>\n<p><b>Pse e konsideruam se ka ardhur koha p\u00ebr t\u00eb ndryshuar qasjet tona n\u00eb pun\u00ebn me gjendjen e ndar\u00eb <\/b><\/p>\n<p>Na duheshin mb\u00ebshtetje p\u00ebr gjendjen e objekteve t\u00eb ndryshme, duke u mb\u00ebshtetur n\u00eb raportet e agen\u00ebve (p.sh.: a \u00ebsht\u00eb sulmuar site-i)? Para kalimit n\u00eb Kafka Streams, shpesh kemi varur menaxhimin e gjendjes nga nj\u00eb baz\u00eb t\u00eb dh\u00ebnash qendrore (+ API sh\u00ebrbimi). Ky qasje ka disa disavantazhe: n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/collection\/all\/product\/vysokonagruzhennye-prilozheniya-programmirovanie-masshtabirovanie-podderzhka\">situatat e datenintensiv<\/a><\/noindex> mb\u00ebshtetje p\u00ebr konsistenc\u00ebn dhe sinkronizimin b\u00ebhet nj\u00eb sfid\u00eb e v\u00ebrtet\u00eb. Baza e t\u00eb dh\u00ebnave mund t\u00eb b\u00ebhet nyja e ngusht\u00eb, ose t\u00eb ndodhet n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/stackoverflow.com\/questions\/9850336\/database-race-conditions\">gjendje garash<\/a><\/noindex> dhe t\u00eb p\u00ebrbalet me pap\u00ebrcaktueshm\u00ebrin\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Jo vet\u00ebm p\u00ebrpunimi: Si e transformuam Kafka Streams n\u00eb nj\u00eb baz\u00eb t\u00eb shp\u00ebrndar\u00eb t\u00eb t\u00eb dh\u00ebnave dhe \u00e7far\u00eb doli nga kjo\" src=\"\/wp-content\/uploads\/2019\/04\/7fd4afa4d56578cf327e6391883933f1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Ilustrimi 1: nj\u00eb skenar tipik me ndarje t\u00eb gjendjes, q\u00eb ndodhi para kalimit n\u00eb <br \/>\nKafka dhe Kafka Streams: agent\u00ebt raportojn\u00eb p\u00ebrmbledhjet e tyre p\u00ebrmes API-s\u00eb, gjendja e azhurnuar llogaritet p\u00ebrmes nj\u00eb baze t\u00eb dh\u00ebnash qendrore <\/i><\/p>\n<p><b>Njoftohuni me Kafka Streams \u2013 tani \u00ebsht\u00eb b\u00ebr\u00eb e leht\u00eb t\u00eb krijoni mikros\u00ebrvime me gjendje t\u00eb ndar\u00eb <\/b><\/p>\n<p>Rreth nj\u00eb vit m\u00eb par\u00eb, ne vendos\u00ebm t\u00eb rishikojm\u00eb me kujdes skenar\u00ebt tan\u00eb p\u00ebr menaxhimin e gjendjes s\u00eb ndar\u00eb p\u00ebr t\u00eb trajtuar disa probleme. Menj\u00ebher\u00eb vendos\u00ebm t\u00eb provonim Kafka Streams \u2013 dihet se sa e shkall\u00ebzueshme, e disponueshme dhe e q\u00ebndrueshme \u00ebsht\u00eb, si dhe sa e pasur \u00ebsht\u00eb me funksionalitete p\u00ebr p\u00ebrpunim rrjedhash (transformime, p\u00ebrfshir\u00eb ato me ruajtjen e gjendjes). Pik\u00ebrisht ajo q\u00eb na nevojitej, pa p\u00ebrmendur se sa e pjekur dhe e besueshme \u00ebsht\u00eb sistemi i d\u00ebrgimit t\u00eb mesazheve n\u00eb Kafka.<\/p>\n<p>\u00c7do nj\u00eb nga sh\u00ebrbimet mikro q\u00eb krijuam me ruajtjen e gjendjes u nd\u00ebrtua mbi nj\u00eb instanc\u00eb t\u00eb Kafka Streams me nj\u00eb topologji mjaft t\u00eb thjesht\u00eb. Ajo p\u00ebrb\u00ebhej nga 1) burimi 2) procesori me nj\u00eb magazin\u00eb t\u00eb vazhdueshme t\u00eb \u00e7el\u00ebsave dhe vlerave 3) rrjedha:<\/p>\n<p><img decoding=\"async\" alt=\"Jo vet\u00ebm p\u00ebrpunimi: Si e transformuam Kafka Streams n\u00eb nj\u00eb baz\u00eb t\u00eb shp\u00ebrndar\u00eb t\u00eb t\u00eb dh\u00ebnave dhe \u00e7far\u00eb doli nga kjo\" src=\"\/wp-content\/uploads\/2019\/04\/b6bfdbb87ef774dd914b0e4e60405ec5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Ilustrimi 2: topologjia e paracaktuar e instancave tona t\u00eb rrjedhave p\u00ebr sh\u00ebrbimet mikro me ruajtjen e gjendjes. Vini re: k\u00ebtu ka gjithashtu nj\u00eb magazin\u00eb ku ruhen metadat p\u00ebr planifikimin. <\/i><\/p>\n<p>Me k\u00ebt\u00eb qasje t\u00eb re, agjent\u00ebt formulojn\u00eb mesazhe q\u00eb d\u00ebrgohen n\u00eb tem\u00ebn e origjin\u00ebs, nd\u00ebrsa konsumator\u00ebt \u2013 le t\u00eb themi, sh\u00ebrbimi i njoftimeve p\u00ebrmes post\u00ebs \u2013 marrin gjendjen e llogaritur t\u00eb ndar\u00eb p\u00ebrmes koleksionit (tem\u00ebs s\u00eb daljes).<\/p>\n<p><img decoding=\"async\" alt=\"Jo vet\u00ebm p\u00ebrpunimi: Si e transformuam Kafka Streams n\u00eb nj\u00eb baz\u00eb t\u00eb shp\u00ebrndar\u00eb t\u00eb t\u00eb dh\u00ebnave dhe \u00e7far\u00eb doli nga kjo\" src=\"\/wp-content\/uploads\/2019\/04\/de60549d9cc1d5c0c473364d5236a339.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Ilustrimi 3: nj\u00eb shembuj i ri i fluksit t\u00eb detyrave p\u00ebr skenar\u00eb me mikrosh\u00ebrbime t\u00eb ndara: 1) agjenti krijon nj\u00eb mesazh q\u00eb arrin n\u00eb tem\u00ebn e origjin\u00ebs Kafka; 2) mikrosh\u00ebrbimi me gjendje t\u00eb ndar\u00eb (duke p\u00ebrdorur Kafka Streams) e proceson at\u00eb dhe regjistron gjendjen e llogaritur n\u00eb tem\u00ebn p\u00ebrfundimtare Kafka; pas k\u00ebsaj, 3) konsumator\u00ebt marrin gjendjen e re.<\/i><\/p>\n<p><b>Hej, dhe kjo magazin\u00eb e integruar e \u00e7el\u00ebsave dhe vlerave \u00ebsht\u00eb v\u00ebrtet shum\u00eb e dobishme!<\/b><\/p>\n<p>Si\u00e7 u p\u00ebrmend m\u00eb sip\u00ebr, topologjia jon\u00eb me gjendje t\u00eb ndar\u00eb p\u00ebrmban nj\u00eb magazin\u00eb \u00e7el\u00ebsash dhe vlerash. Ne gjet\u00ebm disa m\u00ebnyra p\u00ebr ta p\u00ebrdorur at\u00eb, dhe dy prej tyre jan\u00eb p\u00ebrshkruar m\u00eb posht\u00eb.<\/p>\n<p><i><b>M\u00ebnyra #1: p\u00ebrdorimi i magazin\u00ebs s\u00eb \u00e7el\u00ebsave dhe vlerave gjat\u00eb llogaritjeve.<\/b><\/i><\/p>\n<p>Depozita jon\u00eb e par\u00eb e \u00e7el\u00ebsave dhe vlerave p\u00ebrmbante t\u00eb dh\u00ebna ndihm\u00ebse q\u00eb na duhej p\u00ebr llogaritjet. P\u00ebr shembull, n\u00eb disa raste, gjendja e ndar\u00eb u p\u00ebrcaktua sipas principit t\u00eb \"shumic\u00ebs s\u00eb votave\". N\u00eb depo mund t\u00eb mbaheshin t\u00eb gjitha raportet m\u00eb t\u00eb fundit t\u00ebagjent\u00ebve n\u00eb lidhje me nj\u00eb objekt t\u00eb caktuar. M\u00eb pas, duke marr\u00eb nj\u00eb raport t\u00eb ri nga ndonj\u00eb agent, ne mund t\u00eb ruanim at\u00eb, t\u00eb nxirrnim nga depo raportet e gjith\u00eb agjent\u00ebve t\u00eb tjer\u00eb p\u00ebr gjendjen e t\u00eb nj\u00ebjtit objekt dhe t\u00eb p\u00ebrs\u00ebrisnim llogaritjen.<br \/>\nM\u00eb posht\u00eb n\u00eb ilustrimin 4 tregohet se si ne hap\u00ebm aksesin n\u00eb depozitat e \u00e7el\u00ebsave dhe vlerave p\u00ebr metod\u00ebn e p\u00ebrpunimit t\u00eb procesorit, k\u00ebshtu q\u00eb m\u00eb pas mund t\u00eb p\u00ebrpunonim nj\u00eb mesazh t\u00eb ri.<\/p>\n<p><img decoding=\"async\" alt=\"Jo vet\u00ebm p\u00ebrpunimi: Si e transformuam Kafka Streams n\u00eb nj\u00eb baz\u00eb t\u00eb shp\u00ebrndar\u00eb t\u00eb t\u00eb dh\u00ebnave dhe \u00e7far\u00eb doli nga kjo\" src=\"\/wp-content\/uploads\/2019\/04\/8c11f9aac4c616b1ebf59d2fe5431ea0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Ilustrimi 4: hapja e aksesit n\u00eb depozitat e \u00e7el\u00ebsave dhe vlerave p\u00ebr metod\u00ebn e p\u00ebrpunimit t\u00eb procesorit (pas k\u00ebsaj, n\u00eb \u00e7do skenar q\u00eb punon me gjendjen e ndar\u00eb, nevojitet t\u00eb implementohet metoda <code>doProcess<\/code>)<\/i><\/p>\n<p><i><b>Opcioni #2: krijimi i nj\u00eb API CRUD mbi Kafka Streams<\/b><\/i><\/p>\n<p>Pas pasi p\u00ebr t\u00eb nd\u00ebrtuar fluxin ton\u00eb baz\u00eb t\u00eb detyrave, filluam t\u00eb provonim t\u00eb shkruanim nj\u00eb RESTful CRUD API p\u00ebr mikrosh\u00ebrbimet tona me gjendje t\u00eb ndar\u00eb. Ne donim q\u00eb t\u00eb mund t\u00eb nxirrnim gjendjen e disa ose t\u00eb gjitha objekteve, si dhe t\u00eb vendosnim ose hiqnim gjendjen e nj\u00eb objekti (kjo \u00ebsht\u00eb e dobishme p\u00ebr mb\u00ebshtetje n\u00eb an\u00ebn serverike).<\/p>\n<p>P\u00ebr t\u00eb mb\u00ebshtetur t\u00eb gjith\u00eb API-n\u00eb Get State, sa her\u00eb na nevojitej t\u00eb llogarisnim p\u00ebrs\u00ebri gjendjen gjat\u00eb p\u00ebrpunimit, ne e ruanim at\u00eb p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb n\u00eb ruajtjen e integruar t\u00eb \u00e7el\u00ebsave dhe vlerave. N\u00eb k\u00ebt\u00eb rast, \u00ebsht\u00eb mjaft e thjesht\u00eb t\u00eb implementoni nj\u00eb API t\u00eb till\u00eb duke p\u00ebrdorur nj\u00eb instanc\u00eb t\u00eb vetme t\u00eb Kafka Streams, si\u00e7 \u00ebsht\u00eb treguar n\u00eb listimin m\u00eb posht\u00eb:<\/p>\n<p><img decoding=\"async\" alt=\"Jo vet\u00ebm p\u00ebrpunimi: Si e transformuam Kafka Streams n\u00eb nj\u00eb baz\u00eb t\u00eb shp\u00ebrndar\u00eb t\u00eb t\u00eb dh\u00ebnave dhe \u00e7far\u00eb doli nga kjo\" src=\"\/wp-content\/uploads\/2019\/04\/614f601f7b4cf407c2b2a7826e377cbb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Ilustrimi 5: p\u00ebrdorimi i ruajtjes s\u00eb integruar t\u00eb \u00e7el\u00ebsave dhe vlerave p\u00ebr t\u00eb marr\u00eb gjendjen e parakalkuluar t\u00eb objektit <\/i><\/p>\n<p>P\u00ebrdit\u00ebsimi i gjendjes s\u00eb objektit p\u00ebrmes API-s\u00eb gjithashtu nuk \u00ebsht\u00eb e v\u00ebshtir\u00eb p\u00ebr t'u realizuar. N\u00eb parim, p\u00ebr k\u00ebt\u00eb vet\u00ebm duhet t\u00eb krijoni nj\u00eb prodhues Kafka, dhe me t\u00eb t\u00eb b\u00ebni nj\u00eb shkronj\u00eb, n\u00eb t\u00eb cil\u00ebn p\u00ebrmban gjendjen e re. K\u00ebshtu garanton q\u00eb t\u00eb gjitha mesazhet e gjeneruara p\u00ebrmes API-s\u00eb do t\u00eb p\u00ebrpunohen n\u00eb t\u00eb nj\u00ebjt\u00ebn m\u00ebnyr\u00eb si ato q\u00eb vijn\u00eb nga prodhues t\u00eb tjer\u00eb (p.sh. agjent\u00ebt).<\/p>\n<p><img decoding=\"async\" alt=\"Jo vet\u00ebm p\u00ebrpunimi: Si e transformuam Kafka Streams n\u00eb nj\u00eb baz\u00eb t\u00eb shp\u00ebrndar\u00eb t\u00eb t\u00eb dh\u00ebnave dhe \u00e7far\u00eb doli nga kjo\" src=\"\/wp-content\/uploads\/2019\/04\/0b03bbafb3cf5a41164e9df85b766fcf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Ilustrimi 6: mund t\u00eb p\u00ebrcaktojm\u00eb gjendjen e objektit p\u00ebrmes produesit Kafka <\/i><\/p>\n<p><b>Nj\u00eb komplikim i vog\u00ebl: Kafka ka shum\u00eb parti<\/b><\/p>\n<p>M\u00eb pas donim t\u00eb shp\u00ebrndanim ngarkes\u00ebn e p\u00ebrpunimit dhe t\u00eb p\u00ebrmir\u00ebsonim disponueshm\u00ebrin\u00eb, duke ofruar p\u00ebr \u00e7do skenar nj\u00eb klaster mikrosh\u00ebrbimesh me gjendje t\u00eb p\u00ebrbashk\u00ebt. Konfigurimi doli t\u00eb ishte mjaft i thjesht\u00eb: pasi konfiguruam t\u00eb gjith\u00eb instancat q\u00eb t\u00eb punonin me t\u00eb nj\u00ebjtin ID t\u00eb aplikacionit (dhe me t\u00eb nj\u00ebjtat server\u00eb t\u00eb ngarkes\u00ebs fillestare), pothuajse gjith\u00e7ka tjet\u00ebr u realizua automatikisht. Ne gjithashtu caktuam q\u00eb \u00e7do tem\u00eb burimi do t\u00eb p\u00ebrb\u00ebhej nga disa parti, n\u00eb m\u00ebnyr\u00eb q\u00eb secil\u00ebs instanc\u00eb t'i jepet nj\u00eb n\u00ebngrup i till\u00eb partitesh.<\/p>\n<p>Gjithashtu do t\u00eb p\u00ebrmend se k\u00ebtu \u00ebsht\u00eb zakon q\u00eb t\u00eb b\u00ebhet nj\u00eb kopje rezerv\u00eb e magazin\u00ebs s\u00eb gjendjeve, q\u00eb, p\u00ebr shembull, n\u00eb rast rikuperimi pas nj\u00eb d\u00ebshtimi, ajo t\u00eb transferohet n\u00eb nj\u00eb instanc\u00eb tjet\u00ebr. P\u00ebr \u00e7do magazin\u00eb gjendjesh n\u00eb Kafka Streams krijohet nj\u00eb tem\u00eb e riprodhueshme me nj\u00eb regjist\u00ebr ndryshimesh (ku ndiqen azhurnimet lokale). K\u00ebshtu, Kafka vazhdimisht mbulon magazin\u00ebn e gjendjeve. Prandaj, n\u00eb rast d\u00ebshtimi t\u00eb ndonj\u00eb instanc\u00eb t\u00eb Kafka Streams, magazina e gjendjeve mund t\u00eb rikuperohet shpejt n\u00eb nj\u00eb instanc\u00eb tjet\u00ebr, ku do t\u00eb transferohen partit\u00eb p\u00ebrkat\u00ebse. Testet tona treguan se kjo b\u00ebhet p\u00ebr pak sekonda, edhe n\u00ebse n\u00eb magazin\u00eb ka miliona regjistrime.<\/p>\n<p>Duke kaluar nga nj\u00eb mikrosh\u00ebrbim me nj\u00eb gjendje t\u00eb ndar\u00eb n\u00eb nj\u00eb klaster mikrosh\u00ebrbimesh, realizimi i Get State API nuk \u00ebsht\u00eb kaq triviale. N\u00eb situat\u00ebn e re, n\u00eb ruajtjen e gjendjeve t\u00eb \u00e7do mikrosh\u00ebrbimi ndodhet vet\u00ebm nj\u00eb pjes\u00eb e tablos\u00eb p\u00ebrkat\u00ebse (ato objekte t\u00eb cilat \u00e7el\u00ebsat e tyre u shfaq\u00ebn n\u00eb nj\u00eb parti t\u00eb caktuar). Duhej t\u00eb p\u00ebrcaktonim se n\u00eb cilin instanc\u00eb ndodhej gjendja e objektit q\u00eb na nevojitej, dhe k\u00ebt\u00eb e b\u00ebnim n\u00eb baz\u00eb t\u00eb metadata e rrjedhjeve, si\u00e7 tregohet m\u00eb posht\u00eb:<\/p>\n<p><img decoding=\"async\" alt=\"Jo vet\u00ebm p\u00ebrpunimi: Si e transformuam Kafka Streams n\u00eb nj\u00eb baz\u00eb t\u00eb shp\u00ebrndar\u00eb t\u00eb t\u00eb dh\u00ebnave dhe \u00e7far\u00eb doli nga kjo\" src=\"\/wp-content\/uploads\/2019\/04\/7182a396869f2f9692d895fc5084cccb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Ilustrimi 7: me ndihm\u00ebn e metadata e rrjedhave ne p\u00ebrcaktojm\u00eb nga cil\u00eb instanc\u00eb t\u00eb k\u00ebrkojm\u00eb gjendjen e objektit t\u00eb k\u00ebrkuar; nj\u00eb qasje e till\u00eb u p\u00ebrdor p\u00ebr GET ALL API<\/i><\/p>\n<p><b>Konkluzionet kryesore<\/b><\/p>\n<p>Ruajtjet e gjendjeve n\u00eb Kafka Streams de facto mund t\u00eb sh\u00ebrbejn\u00eb si nj\u00eb baz\u00eb t\u00eb dh\u00ebnash t\u00eb shp\u00ebrndar\u00eb, <\/p>\n<ul>\n<li>e cila riplikohet vazhdimisht n\u00eb Kafka<\/li>\n<li>P\u00ebr nj\u00eb sistem t\u00eb till\u00eb, \u00ebsht\u00eb e leht\u00eb t\u00eb nd\u00ebrtohet nj\u00eb CRUD API <\/li>\n<li>P\u00ebrpunimi i shum\u00eb partive \u00ebsht\u00eb pak m\u00eb kompleks <\/li>\n<li>Gjithashtu \u00ebsht\u00eb e mundur t\u00eb shtoni nj\u00eb ose m\u00eb shum\u00eb ruajtje gjendjesh n\u00eb topologjin\u00eb e rrjedh\u00ebs p\u00ebr t\u00eb ruajtur t\u00eb dh\u00ebna ndihm\u00ebse. Ky variant mund t\u00eb p\u00ebrdoret p\u00ebr:<\/li>\n<li>Ruajtjen afatgjat\u00eb t\u00eb t\u00eb dh\u00ebnave, t\u00eb nevojshme p\u00ebr llogaritjet gjat\u00eb p\u00ebrpunimit t\u00eb rrjedhave <\/li>\n<li>Dep\u00ebrtimi i t\u00eb dh\u00ebnave me afat t\u00eb gjat\u00eb, t\u00eb cilat mund t\u00eb jen\u00eb t\u00eb dobishme gjat\u00eb inicializimit t\u00eb ardhsh\u00ebm t\u00eb instanc\u00ebs s\u00eb transmetimit <\/li>\n<li>pjes\u00eb t\u00eb tjera\u2026<\/li>\n<\/ul>\n<p>Fal\u00eb k\u00ebtyre dhe avantazheve t\u00eb tjera, Kafka Streams \u00ebsht\u00eb nj\u00eb zgjidhje e shk\u00eblqyer p\u00ebr mb\u00ebshtetje globale t\u00eb gjendjes n\u00eb nj\u00eb sistem t\u00eb till\u00eb t\u00eb shp\u00ebrndar\u00eb si i yni. Kafka Streams ka treguar besueshm\u00ebri t\u00eb madhe n\u00eb prodhim (q\u00eb nga vendosja e saj, ne praktikisht nuk kemi humbur mesazhe), dhe jemi t\u00eb sigurt se kapacitetet e saj nuk p\u00ebrfundojn\u00eb k\u00ebtu!<br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/piter\/blog\/449928\/\">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! \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u0441\u043b\u0435\u0434 \u0437\u0430 \u043a\u043d\u0438\u0433\u043e\u0439 \u043e Kafka \u043c\u044b \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0442\u0440\u0443\u0434 \u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Kafka Streams API. \u041f\u043e\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0449\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430. \u0422\u0430\u043a, \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0432\u044b\u0448\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u044f, \u0441 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u0430\u0441 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c. \u041d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u0440 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 Kafka Streams \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f! [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24423,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32632","post","type-post","status-publish","format-standard","has-post-thumbnail","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! \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u0441\u043b\u0435\u0434 \u0437\u0430 \u043a\u043d\u0438\u0433\u043e\u0439 \u043e Kafka \u043c\u044b \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0442\u0440\u0443\u0434 \u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Kafka Streams API. \u041f\u043e\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0449\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430. \u0422\u0430\u043a, \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0432\u044b\u0448\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u044f, \u0441 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u0430\u0441 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c. \u041d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u0440 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 Kafka Streams \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f!\" \/>\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\/ne-tolko-obrabotka-kak-my-sdelali-iz-kafka-streams-raspredelennuyu-bazu-dannyh-i-chto-iz-etogo-vyshlo\" \/>\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\u041d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430: \u041a\u0430\u043a \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0438\u0437 Kafka Streams \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u0447\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0448\u043b\u043e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u0441\u043b\u0435\u0434 \u0437\u0430 \u043a\u043d\u0438\u0433\u043e\u0439 \u043e Kafka \u043c\u044b \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0442\u0440\u0443\u0434 \u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Kafka Streams API. \u041f\u043e\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0449\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430. \u0422\u0430\u043a, \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0432\u044b\u0448\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u044f, \u0441 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u0430\u0441 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c. \u041d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u0440 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 Kafka Streams \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/ne-tolko-obrabotka-kak-my-sdelali-iz-kafka-streams-raspredelennuyu-bazu-dannyh-i-chto-iz-etogo-vyshlo\" \/>\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-31T18:48:08+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:48:08+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\udd47Jo vet\u00ebm p\u00ebrpunimi: Si e b\u00ebm\u00eb Kafka Streams nj\u00eb baz\u00eb t\u00eb dh\u00ebnash t\u00eb shp\u00ebrndar\u00eb, dhe \u00e7far\u00eb doli prej saj | ProHoster","description":"P\u00ebrsh\u00ebndetje, Habr! Ju kujtojm\u00eb se pas librit mbi Kafka, ne publikuam nj\u00eb pun\u00eb po aq interesante mbi bibliotek\u00ebn Kafka Streams API. Nd\u00ebrsa komuniteti ende po e eksploron kufirin e k\u00ebtij instrumenti t\u00eb fuqish\u00ebm. S\u00eb fundmi, doli nj\u00eb artikull, me p\u00ebrkthimin e t\u00eb cilit d\u00ebshirojm\u00eb t'ju njohim. N\u00ebp\u00ebrmjet p\u00ebrvoj\u00ebs s\u00eb vet, autori p\u00ebrshkruan se si t\u00eb krijosh nj\u00eb magazin\u00eb t\u00eb shp\u00ebrndar\u00eb t\u00eb t\u00eb dh\u00ebnave nga Kafka Streams. Lexim t\u00eb k\u00ebndsh\u00ebm!","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/ne-tolko-obrabotka-kak-my-sdelali-iz-kafka-streams-raspredelennuyu-bazu-dannyh-i-chto-iz-etogo-vyshlo","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\u041d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430: \u041a\u0430\u043a \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0438\u0437 Kafka Streams \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u0447\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0448\u043b\u043e | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u0441\u043b\u0435\u0434 \u0437\u0430 \u043a\u043d\u0438\u0433\u043e\u0439 \u043e Kafka \u043c\u044b \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0442\u0440\u0443\u0434 \u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Kafka Streams API. \u041f\u043e\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0449\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430. \u0422\u0430\u043a, \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0432\u044b\u0448\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u044f, \u0441 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u0430\u0441 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c. \u041d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u0440 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 Kafka Streams \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f!","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/ne-tolko-obrabotka-kak-my-sdelali-iz-kafka-streams-raspredelennuyu-bazu-dannyh-i-chto-iz-etogo-vyshlo","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-31T18:48:08+00:00","article:modified_time":"2019-10-31T18:48:08+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32632","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-21 11:51:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:55:24","updated":"2026-01-21 11:51: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\/32632","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=32632"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/32632\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/24423"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=32632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=32632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=32632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}