{"id":37849,"date":"2019-10-31T22:20:09","date_gmt":"2019-10-31T19:20:09","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kafka-i-mikroservisy-obzor\/"},"modified":"2019-10-31T22:20:09","modified_gmt":"2019-10-31T19:20:09","slug":"kafka-i-mikroservisy-obzor","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kafka-i-mikroservisy-obzor","title":{"rendered":"Kafka \u0219i microserviciile: o prezentare general\u0103","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Kafka \u0219i microserviciile: o prezentare general\u0103\" src=\"\/wp-content\/uploads\/2019\/09\/ab0534ad5d28b3c3aa03e4e0b2d3101b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00ebrsh\u00ebndetje t\u00eb gjith\u00ebve. N\u00eb k\u00ebt\u00eb artikull do t\u00eb flas p\u00ebr arsyet pse ne n\u00eb Avito zgjodh\u00ebm Kafka n\u00ebnt\u00eb muaj m\u00eb par\u00eb, dhe \u00e7far\u00eb p\u00ebrfaq\u00ebson ajo. Do t\u00eb ndaj nj\u00eb nga rastet e p\u00ebrdorimit - broker mesazhesh. Dhe n\u00eb fund, do t\u00eb flasim p\u00ebr p\u00ebrfitimet q\u00eb kemi marr\u00eb nga aplikimi i qasjes Kafka si Sh\u00ebrbim.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"problema\">Problemi<\/h1>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kafka \u0219i microserviciile: o prezentare general\u0103\" src=\"\/wp-content\/uploads\/2019\/09\/dfa5e231847cee67259da17867a11812.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Fillimisht, pak kontekst. Disa koh\u00eb m\u00eb par\u00eb filluam t\u00eb largoheshim nga arkitektura monolitike, dhe tani n\u00eb Avito kemi disa qindra sh\u00ebrbime t\u00eb ndryshme. Ato kan\u00eb depozitat e tyre, stakun e teknologjis\u00eb dhe p\u00ebrgjigjen p\u00ebr pjes\u00ebn e tyre t\u00eb logjik\u00ebs s\u00eb biznesit. <\/p>\n<p><\/p>\n<p>Nj\u00eb nga problemet me numrin e madh t\u00eb sh\u00ebrbimeve \u00ebsht\u00eb komunikimi. Sh\u00ebrbimi A shpesh d\u00ebshiron t\u00eb dij\u00eb informacionin q\u00eb ka sh\u00ebrbimi B. N\u00eb k\u00ebt\u00eb rast, sh\u00ebrbimi A i drejtohet sh\u00ebrbimit B n\u00ebp\u00ebrmjet nj\u00eb API-s\u00eb sinkrone. Sh\u00ebrbimi B d\u00ebshiron t\u00eb dij\u00eb se \u00e7far\u00eb ndodh me sh\u00ebrbimet G dhe D, dhe ato, nga ana e tyre, interesohen p\u00ebr sh\u00ebrbimet A dhe B. Kur ka shum\u00eb sh\u00ebrbime 'kurioze', lidhjet mes tyre kthehen n\u00eb nj\u00eb ka\u00e7ub\u00eb t\u00eb ngat\u00ebrruar.<\/p>\n<p><\/p>\n<p>Megjithat\u00eb, n\u00eb \u00e7do moment sh\u00ebrbimi A mund t\u00eb b\u00ebhet i pap\u00ebrshkuesh\u00ebm. \u00c7far\u00eb duhet t\u00eb b\u00ebj\u00eb sh\u00ebrbimi B dhe t\u00eb gjith\u00eb sh\u00ebrbimet e tjera t\u00eb lidhura me t\u00eb n\u00eb k\u00ebt\u00eb rast? Dhe n\u00ebse p\u00ebr t\u00eb realizuar nj\u00eb operacion biznesi duhet t\u00eb kryhen nj\u00eb zinxhir thirrjesh sinkrone, probabiliteti i d\u00ebshtimit t\u00eb t\u00ebr\u00eb operacionit b\u00ebhet edhe m\u00eb i lart\u00eb (dhe aq m\u00eb i lart\u00eb sa m\u00eb i gjat\u00eb t\u00eb jet\u00eb ky zinxhir). <\/p>\n<p><\/p>\n<h1 id=\"vybor-tehnologii\">Zgjedhja e teknologjis\u00eb<\/h1>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kafka \u0219i microserviciile: o prezentare general\u0103\" src=\"\/wp-content\/uploads\/2019\/09\/3acd7bcf3dded8093bdef6d627eb4071.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mir\u00eb, problemet jan\u00eb t\u00eb qarta. Ato mund t\u00eb zgjidhen duke krijuar nj\u00eb sistem t\u00eb centralizuar t\u00eb shk\u00ebmbimit t\u00eb mesazheve midis sh\u00ebrbimeve. Tani \u00e7do sh\u00ebrbim duhet vet\u00ebm t\u00eb dij\u00eb p\u00ebr k\u00ebt\u00eb sistem shk\u00ebmbimi mesazhesh. P\u00ebr m\u00eb tep\u00ebr, vet\u00eb sistemi duhet t\u00eb jet\u00eb i q\u00ebndruesh\u00ebm ndaj par\u00ebveshjeve dhe n\u00eb gjendje t\u00eb shkall\u00ebzohet horizontalisht, si dhe, n\u00eb rast t\u00eb nj\u00eb defekti, t\u00eb mbaj\u00eb nj\u00eb tampon thirrjesh p\u00ebr p\u00ebrpunimin e m\u00ebvonsh\u00ebm. <\/p>\n<p><\/p>\n<p>Tani le t\u00eb zgjedhim teknologjin\u00eb n\u00eb t\u00eb cil\u00ebn do t\u00eb realizohet dor\u00ebzimi i mesazheve. P\u00ebr k\u00ebt\u00eb, s\u00eb pari, le t\u00eb kuptojm\u00eb \u00e7far\u00eb presim nga ajo:<\/p>\n<p><\/p>\n<ul>\n<li>mesazhet mes sh\u00ebrbimeve nuk duhet t\u00eb humbasin;<\/li>\n<li>mesazhet mund t\u00eb jen\u00eb t\u00eb dyfishuara;<\/li>\n<li>mesazhet mund t\u00eb ruhen dhe t\u00eb lexohen p\u00ebr nj\u00eb thell\u00ebsi prej disa dit\u00ebsh (tampon i q\u00ebndruesh\u00ebm);<\/li>\n<li>sh\u00ebrbimet mund t\u00eb regjistrohen p\u00ebr t\u00eb dh\u00ebnat q\u00eb i interesojn\u00eb;<\/li>\n<li>disa sh\u00ebrbime mund t\u00eb lexojn\u00eb t\u00eb nj\u00ebjtat t\u00eb dh\u00ebna;<\/li>\n<li>mesazhet mund t\u00eb p\u00ebrmbajn\u00eb nj\u00eb payload t\u00eb detajuar dhe voluminoz (transfer i gjendjes s\u00eb mbajtur nga ngjarjet);<\/li>\n<li>ndonj\u00ebher\u00eb nevojitet nj\u00eb garanci p\u00ebr rendin e mesazheve.<\/li>\n<\/ul>\n<p><\/p>\n<p>Po t\u00ebrheqjes, ishte kritikisht e r\u00ebnd\u00ebsishme p\u00ebr ne t\u00eb zgjidhnim nj\u00eb sistem sa m\u00eb t\u00eb shkall\u00ebzues dhe t\u00eb besuesh\u00ebm me kapacitet t\u00eb lart\u00eb (t\u00eb pakt\u00ebn 100k mesazhe p\u00ebr disa kilobajt n\u00eb sekond\u00eb).<\/p>\n<p><\/p>\n<p>N\u00eb k\u00ebt\u00eb faz\u00eb, ne u ndam\u00eb me RabbitMQ (e v\u00ebshtir\u00eb p\u00ebr ta mbajtur stabil n\u00eb rps t\u00eb larta), PGQ nga SkyTools (jo mjaft i shpejt\u00eb dhe i shkall\u00ebzuesh\u00ebm) dhe NSQ (jo i p\u00ebrhersh\u00ebm). T\u00eb gjitha k\u00ebto teknologji p\u00ebrdoren n\u00eb kompanin\u00eb ton\u00eb, por p\u00ebr detyr\u00ebn e zgjidhur ato nuk ishin t\u00eb p\u00ebrshtatshme. <\/p>\n<p><\/p>\n<p>Pastaj filluam t\u00eb shqyrtonim teknologji t\u00eb reja p\u00ebr ne \u2014 Apache Kafka, Apache Pulsar dhe NATS Streaming.<\/p>\n<p><\/p>\n<p>I pari q\u00eb e p\u00ebrjashtuam ishte Pulsar. Ne vendos\u00ebm se Kafka dhe Pulsar jan\u00eb zgjidhje mjaft t\u00eb ngjashme. Pavar\u00ebsisht se Pulsar \u00ebsht\u00eb provuar nga kompani t\u00eb m\u00ebdha, \u00ebsht\u00eb m\u00eb e re dhe ofron latenc\u00eb m\u00eb t\u00eb ul\u00ebt (n\u00eb teori), ne vendos\u00ebm t\u00eb mbetemi me Kafka si standart de facto p\u00ebr k\u00ebto lloj detyrash. Ndoshta do t\u2019i kthehemi Apache Pulsar n\u00eb t\u00eb ardhmen. <\/p>\n<p><\/p>\n<p>Dhe k\u00ebshtu mbet\u00ebn dy kandidat\u00ebt: NATS Streaming dhe Apache Kafka. Ne studiuam mjaft n\u00eb detaje t\u00eb dyja zgjidhjet, dhe t\u00eb dyja ishin t\u00eb p\u00ebrshtatshme p\u00ebr detyr\u00eb. Por n\u00eb fund, ne u frik\u00ebsuam nga rinia relative e NATS Streaming (dhe nga fakti se nj\u00eb nga zhvilluesit kryesor\u00eb, Tyler Treat, vendosi t\u00eb largohet nga projekti dhe t\u00eb filloj\u00eb t\u00eb vetin \u2014 Liftbridge). Nd\u00ebrkoh\u00eb, modelet e Klasterizimit t\u00eb NATS Streaming nuk ofronin mund\u00ebsi t\u00eb shkall\u00ebzimit horizontal t\u00eb fuqish\u00ebm (ndoshta kjo nuk \u00ebsht\u00eb m\u00eb nj\u00eb problem pas shtimit t\u00eb modeleve t\u00eb ndarjes n\u00eb 2017).<\/p>\n<p><\/p>\n<p>Megjithat\u00eb, NATS Streaming \u00ebsht\u00eb nj\u00eb teknologji e shk\u00eblqyer, e shkruar n\u00eb Go dhe me mb\u00ebshtetje nga Cloud Native Computing Foundation. Ndryshe nga Apache Kafka, ajo nuk k\u00ebrkon Zookeeper p\u00ebr t\u00eb funksionuar (ndoshta, <noindex><a rel=\"nofollow\" href=\"https:\/\/cwiki.apache.org\/confluence\/display\/KAFKA\/KIP-500%3A+Replace+ZooKeeper+with+a+Self-Managed+Metadata+Quorum\">shpejt do t\u00eb mund t\u00eb themi t\u00eb nj\u00ebjt\u00ebn gj\u00eb edhe p\u00ebr Kafka<\/a><\/noindex>), pasi brenda saj realizon RAFT. N\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb, NATS Streaming \u00ebsht\u00eb m\u00eb e leht\u00eb p\u00ebr administrim. Ne nuk p\u00ebrjashtojm\u00eb q\u00eb n\u00eb t\u00eb ardhmen mund t\u00eb kthehemi p\u00ebrs\u00ebri tek kjo teknologji. <\/p>\n<p><\/p>\n<p>Sidoqoft\u00eb, deri m\u00eb sot, fituesi yn\u00eb \u00ebsht\u00eb Apache Kafka. N\u00eb testet tona, ajo tregoi se \u00ebsht\u00eb mjaft e shpejt\u00eb (m\u00eb shum\u00eb se nj\u00eb milion mesazhe n\u00eb sekond\u00eb p\u00ebr lexim dhe shkrim me volum mesazhesh prej 1 kilobajt), mjaft e besueshme, e shkall\u00ebzueshme mir\u00eb dhe e provuar n\u00eb prodhim nga kompani t\u00eb m\u00ebdha. P\u00ebr m\u00eb tep\u00ebr, Kafka mb\u00ebshtetet nga disa kompani komerciale t\u00eb m\u00ebdha (ne, p\u00ebr shembull, p\u00ebrdorim versionin Confluent), dhe gjithashtu ka nj\u00eb ekosistem t\u00eb zhvilluar.<br \/>\n<br clear=\"left\">\n <\/p>\n<p><\/p>\n<h1 id=\"obzor-kafka\">Pasqyr\u00eb e Kafka<\/h1>\n<p><\/p>\n<p>Para se t\u00eb filloni, menj\u00ebher\u00eb do t'ju rekomandoj nj\u00eb lib\u00ebr t\u00eb shk\u00eblqyer \u2014 <em>\u00abKafka: The Definitive Guide\u00bb<\/em> (ka ka \u00ebsht\u00eb edhe n\u00eb p\u00ebrkthimin rus, por terminologjia \u00ebsht\u00eb paksa e komplikuar). Aty mund t\u00eb gjeni informacionin e nevojsh\u00ebm p\u00ebr nj\u00eb kuptim bazik t\u00eb Kafka-s dhe madje edhe m\u00eb shum\u00eb. Dokumentacioni nga Apache dhe blogu nga Confluent gjithashtu jan\u00eb shkruar n\u00eb m\u00ebnyr\u00eb t\u00eb shk\u00eblqyer dhe leht\u00eb p\u00ebr t'u lexuar. <\/p>\n<p><\/p>\n<p>Pra, le ta shohim se si funksionon Kafka nga nj\u00eb perspektiv\u00eb m\u00eb e lart\u00eb. Topologjia bazike e Kafka-s p\u00ebrb\u00ebhet nga prodhuesi, konsumatori, brokeri dhe zookeeper.<\/p>\n<p><\/p>\n<h3 id=\"broker\">Broker<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kafka \u0219i microserviciile: o prezentare general\u0103\" src=\"\/wp-content\/uploads\/2019\/09\/82f34b5a1aadcdc07eef58eb5414b553.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Brokeri \u00ebsht\u00eb p\u00ebrgjegj\u00ebs p\u00ebr ruajtjen e t\u00eb dh\u00ebnave tuaja. T\u00eb gjitha t\u00eb dh\u00ebnat ruhen n\u00eb form\u00eb binare, dhe brokeri di pak p\u00ebr p\u00ebrmbajtjen dhe struktur\u00ebn e tyre. <\/p>\n<p><\/p>\n<p>\u00c7do lloj logjik i ngjarjeve zakonisht ndodhet n\u00eb nj\u00eb tem\u00eb t\u00eb ve\u00e7ant\u00eb (topic). P\u00ebr shembull, ngjarja e krijimit t\u00eb nj\u00eb njoftimi mund t\u00eb shkoj\u00eb n\u00eb tem\u00ebn item.created, nd\u00ebrsa ngjarja e ndryshimit t\u00eb tij n\u00eb item.changed. Temat mund t\u00eb merren si klasifikues ngjarjesh. N\u00eb nivelin e tem\u00ebs, mund t\u00eb caktohen parametra t\u00eb till\u00eb konfigurations si: <\/p>\n<p><\/p>\n<ul>\n<li>v\u00ebllimi i t\u00eb dh\u00ebnave t\u00eb ruajtura dhe\/ose mosha e tyre (retention.bytes, retention.ms); <\/li>\n<li>faktori i redundanc\u00ebs s\u00eb t\u00eb dh\u00ebnave (replication factor);<\/li>\n<li>madh\u00ebsia maksimale e nj\u00eb mesazhi t\u00eb vet\u00ebm (max.message.bytes);<\/li>\n<li>numri minimal i kopjeve t\u00eb pajtueshme, n\u00eb t\u00eb cilat mund t\u00eb shkruhen t\u00eb dh\u00ebna n\u00eb tem\u00eb (min.insync.replicas);<\/li>\n<li>mund\u00ebsia p\u00ebr t\u00eb kaluar n\u00eb nj\u00eb kopje t\u00eb prapambetur t\u00eb pa-sinkronizuar me humbje t\u00eb mundshme t\u00eb t\u00eb dh\u00ebnave (unclean.leader.election.enable);<\/li>\n<li>dhe shum\u00eb t\u00eb tjera (<noindex><a rel=\"nofollow\" href=\"https:\/\/kafka.apache.org\/documentation\/#topicconfigs\">https:\/\/kafka.apache.org\/documentation\/#topicconfigs<\/a><\/noindex>).<\/li>\n<\/ul>\n<p><\/p>\n<p>Nga ana tjet\u00ebr, \u00e7do tem\u00eb ndahet n\u00eb nj\u00eb ose m\u00eb shum\u00eb parti (partition). Pik\u00ebrisht n\u00eb parti p\u00ebrfundojn\u00eb ngjarjet. N\u00ebse n\u00eb klas\u00ebr ka m\u00eb shum\u00eb se nj\u00eb broker, partit\u00eb do t\u00eb shp\u00ebrndahen n\u00eb t\u00eb gjith\u00eb broker\u00ebt sa m\u00eb shum\u00eb t\u00eb jet\u00eb e mundur, q\u00eb do t'i lejoj\u00eb t\u00eb shkall\u00ebzojn\u00eb ngarkes\u00ebn p\u00ebr t\u00eb shkruar dhe lexuar n\u00eb nj\u00eb tem\u00eb n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb n\u00eb disa broker\u00eb.<\/p>\n<p><\/p>\n<p>N\u00eb disk, t\u00eb dh\u00ebnat p\u00ebr secil\u00ebn parti ruhen si skedar\u00eb segmentesh, t\u00eb barabarta me nj\u00eb gigabayt (kjo kontrollohet p\u00ebrmes log.segment.bytes). Nj\u00eb ve\u00e7ori e r\u00ebnd\u00ebsishme \u00ebsht\u00eb se fshirja e t\u00eb dh\u00ebnave nga partit\u00eb (kur aktivizohet retention) ndodh pik\u00ebrisht n\u00ebp\u00ebrmjet segmenteve (nuk mund t\u00eb fshihet nj\u00eb ngjarje e vetme nga nj\u00eb parti, por mund t\u00eb fshihet vet\u00ebm nj\u00eb segment i t\u00ebr\u00eb, dhe vet\u00ebm ai i pasivizuar).<\/p>\n<p><\/p>\n<h3 id=\"zookeeper\">Zookeeper<\/h3>\n<p><\/p>\n<p>Zookeeper ka rolin e nj\u00eb depoje p\u00ebr metadatat dhe koordinatori. Ai mund t\u00eb thot\u00eb n\u00ebse broker\u00ebt jan\u00eb aktiv\u00eb (mund ta shihni k\u00ebt\u00eb nga k\u00ebndv\u00ebshtrimi i zookeeper me komand\u00ebn zookeeper-shell <code>ls \/brokers\/ids<\/code>), cili nga broker\u00ebt \u00ebsht\u00eb kontrollues (<code>get \/controller<\/code>), a jan\u00eb pjes\u00ebt n\u00eb gjendje t\u00eb sinkronizuar me replikat e tyre (<code>get \/brokers\/topics\/topic_name\/partitions\/partition_number\/state<\/code>). Po ashtu, fillimisht te zookeeper do t\u00eb shkojn\u00eb prodhuesi dhe konsumatori, p\u00ebr t\u00eb m\u00ebsuar se n\u00eb cilin broker cila tematika dhe pjes\u00ebt ruhen. N\u00eb rastet kur p\u00ebr tem\u00ebn \u00ebsht\u00eb caktuar nj\u00eb faktor replikimi m\u00eb shum\u00eb se 1, zookeeper do t\u00eb tregoj\u00eb cilat pjes\u00eb jan\u00eb lider (n\u00eb to do t\u00eb b\u00ebhet shkrimi dhe nga to do t\u00eb b\u00ebhet edhe leximi). N\u00eb rastin e d\u00ebshtimit t\u00eb brokerit, pik\u00ebrisht te zookeeper do t\u00eb regjistrohet informacioni mbi lider-pjes\u00ebt e reja (nga versioni 1.1.0 asinkronisht, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.confluent.io\/blog\/apache-kafka-supports-200k-partitions-per-cluster\">dhe kjo \u00ebsht\u00eb e r\u00ebnd\u00ebsishme<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>N\u00eb versionet m\u00eb t\u00eb vjetra t\u00eb Kafka, zookeeper ka ndihmuar gjithashtu n\u00eb ruajtjen e offset-eve, por tani ato ruhen n\u00eb nj\u00eb tematike speciale <code>__consumer_offsets<\/code> n\u00eb broker (edhe pse ju mund t\u00eb vazhdoni t\u00eb p\u00ebrdorni zookeeper p\u00ebr k\u00ebto q\u00ebllime). <\/p>\n<p><\/p>\n<p>M\u00ebnyra m\u00eb e thjesht\u00eb p\u00ebr t\u00eb shnd\u00ebrruar t\u00eb dh\u00ebnat tuaja n\u00eb nj\u00eb pump\u00eb \u00ebsht\u00eb pik\u00ebrisht humbja e informacionit nga zookeeper. N\u00eb nj\u00eb skenar t\u00eb till\u00eb, do t\u00eb jet\u00eb shum\u00eb e v\u00ebshtir\u00eb t\u00eb kuptohet se \u00e7far\u00eb dhe nga ku duhet t\u00eb lexoni. <\/p>\n<p><\/p>\n<h3 id=\"producer\">Producer<\/h3>\n<p><\/p>\n<p>Prodhuesi \u00ebsht\u00eb shpesh nj\u00eb sh\u00ebrbim q\u00eb kryen shkrimin e drejtp\u00ebrdrejt\u00eb t\u00eb t\u00eb dh\u00ebnave n\u00eb Apache Kafka. Prodhuesi zgjedh tem\u00ebn n\u00eb t\u00eb cil\u00ebn do t\u00eb ruhen mesazhet e tij tematike dhe fillon t\u00eb shkruaj\u00eb n\u00eb t\u00eb. P\u00ebr shembull, nj\u00eb prodhues mund t\u00eb jet\u00eb nj\u00eb sh\u00ebrbim shpalljesh. N\u00eb k\u00ebt\u00eb rast, ai do t\u00eb d\u00ebrgoj\u00eb n\u00eb tematikat p\u00ebrkat\u00ebse ngjarje t\u00eb tilla si \"shpallje e krijuar\", \"shpallje e azhurnuar\", \"shpallje e fshir\u00eb\" etj. \u00c7do ngjarje p\u00ebrfaq\u00ebson nj\u00eb \u00e7ift \u00e7el\u00ebs-vler\u00eb.<\/p>\n<p><\/p>\n<p>Sipas parazgjedhjes, t\u00eb gjitha ngjarjet shp\u00ebrndahen n\u00ebp\u00ebr pjes\u00ebt e tem\u00ebs n\u00eb m\u00ebnyr\u00eb rrethore, n\u00ebse \u00e7el\u00ebsi nuk \u00ebsht\u00eb caktuar (duke humbur renditjen), dhe p\u00ebrmes MurmurHash (\u00e7el\u00ebsi), n\u00ebse \u00e7el\u00ebsi \u00ebsht\u00eb i pranish\u00ebm (renditje brenda nj\u00eb pjese).<\/p>\n<p><\/p>\n<p>K\u00ebtu \u00ebsht\u00eb e r\u00ebnd\u00ebsishme t\u00eb theksohet se Kafka garanton rendin e ngjarjeve vet\u00ebm brenda nj\u00eb pjese. Por n\u00eb t\u00eb v\u00ebrtet\u00eb, shpesh kjo nuk p\u00ebrb\u00ebn nj\u00eb problem. P\u00ebr shembull, mund t\u00eb garantoni se t\u00eb gjitha ndryshimet e nj\u00eb shpalljeje t\u00eb nj\u00ebjt\u00eb do t\u00eb shtohen n\u00eb nj\u00eb pjes\u00eb (duke ruajtur k\u00ebshtu rendin e k\u00ebtyre ndryshimeve brenda shpalljes). Gjithashtu, mund t\u00eb kaloni numrin radh\u00ebs n\u00eb nj\u00eb nga fushat e ngjarjes.<\/p>\n<p><\/p>\n<h3 id=\"consumer\">Consumer<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kafka \u0219i microserviciile: o prezentare general\u0103\" src=\"\/wp-content\/uploads\/2019\/09\/1f69a53dc19bb6c587883b8754cde29f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Konsumatori \u00ebsht\u00eb p\u00ebrgjegj\u00ebs p\u00ebr marrjen e t\u00eb dh\u00ebnave nga Apache Kafka. N\u00ebse kthehemi te shembulli m\u00eb sip\u00ebr, konsumatori mund t\u00eb jet\u00eb sh\u00ebrbimi i moderimit. Ky sh\u00ebrbim do t\u00eb jet\u00eb i regjistruar n\u00eb tem\u00ebn e sh\u00ebrbimit t\u00eb shpalljeve, dhe kur nj\u00eb shpallje e re shfaqet, ai do ta marr\u00eb dhe do ta analizoj\u00eb p\u00ebr t'u p\u00ebrputhur me disa politika t\u00eb caktuara.<\/p>\n<p><\/p>\n<p>Apache Kafka mban mend, cilat jan\u00eb ngjarjet m\u00eb t\u00eb fundit q\u00eb ka marr\u00eb konsumatori (p\u00ebr k\u00ebt\u00eb p\u00ebrdoret tema e sh\u00ebrbimit <code>__consumer__offsets<\/code>), duke garantuar n\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb q\u00eb pas nj\u00eb leximi t\u00eb suksessh\u00ebm, konsumatori mos t\u00eb marr\u00eb t\u00eb nj\u00ebjt\u00ebn mesazh dy her\u00eb. Megjithat\u00eb, n\u00ebse p\u00ebrdoret opsioni enable.auto.commit = true dhe i jepet krejt\u00ebsisht puna e ndjekjes s\u00eb pozicionit t\u00eb konsumatorit n\u00eb tem\u00eb Kafk\u00ebs, at\u00ebher\u00eb mund t\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.newrelic.com\/engineering\/kafka-consumer-config-auto-commit-data-loss\/\">humbas\u00ebsh t\u00eb dh\u00ebna<\/a><\/noindex>. N\u00eb kodin e prodhimit, m\u00eb shpesh pozicioni i konsumatorit kontrollohet manualisht (programuesi menaxhon momentin kur duhet t\u00eb ndodhi patjet\u00ebr komitimi i ngjarjes s\u00eb lexuar).<\/p>\n<p><\/p>\n<p>N\u00eb rastet kur nj\u00eb konsumator \u00ebsht\u00eb i pamjaftuesh\u00ebm (p\u00ebr shembull, kur fluksi i ngjarjeve t\u00eb reja \u00ebsht\u00eb shum\u00eb i madh), mund t\u00eb shtohen disa konsumator\u00eb t\u00eb tjer\u00eb, duke i lidhur ata s\u00eb bashku n\u00eb nj\u00eb grup konsumator\u00ebsh. Grupi i konsumator\u00ebve p\u00ebrfaq\u00ebson logjikisht nj\u00eb konsumator t\u00eb nj\u00ebjt\u00eb, por me shp\u00ebrndarjen e t\u00eb dh\u00ebnave mes an\u00ebtar\u00ebve t\u00eb grupit. Kjo i lejon \u00e7do an\u00ebtari t\u00eb marr\u00eb pjes\u00ebn e tij t\u00eb mesazheve, duke rritur k\u00ebshtu shpejt\u00ebsin\u00eb e leximit. <\/p>\n<p><\/p>\n<h1 id=\"rezultaty-testirovaniya\">Rezultatet e testimit<\/h1>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kafka \u0219i microserviciile: o prezentare general\u0103\" src=\"\/wp-content\/uploads\/2019\/09\/f7abe4bcf34fdb0d762c8a928bd873ee.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00ebtu nuk do t\u00eb shkruaj shum\u00eb tekst shpjegues, vet\u00ebm do t\u00eb ndaj rezultatet e marra. Testimi u krye n\u00eb 3 makina fizike (12 CPU, 384GB RAM, 15k SAS DISK, 10GBit\/s Net), brokerat dhe zookeeper ishin instaluar n\u00eb lxc. <\/p>\n<p><\/p>\n<p><strong>Testimi i performanc\u00ebs<\/strong><\/p>\n<p><\/p>\n<p>Gjat\u00eb testimit u arrit\u00ebn rezultatet e m\u00ebposhtme.<\/p>\n<p><\/p>\n<ul>\n<li>Shpejt\u00ebsia e shkrimit t\u00eb mesazheve me madh\u00ebsi 1KB n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb nga 9 prodhuesit \u00ebsht\u00eb 1300000 ngjarje n\u00eb sekond.<\/li>\n<li>Shpejt\u00ebsia e leximit t\u00eb mesazheve me madh\u00ebsi 1KB n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb nga 9 konsumator\u00ebt \u00ebsht\u00eb 1500000 ngjarje n\u00eb sekond.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Testimi i q\u00ebndrueshm\u00ebris\u00eb<\/strong><\/p>\n<p><\/p>\n<p>Gjat\u00eb testimit u arrit\u00ebn rezultatet e m\u00ebposhtme (3 broker\u00eb, 3 zookeeper).<\/p>\n<p><\/p>\n<ul>\n<li>Nd\u00ebrprerja e papritur e nj\u00eb prej broker\u00ebve nuk \u00e7on n\u00eb ndalimin ose pap\u00ebrshtatshm\u00ebrin\u00eb e klasterit. Puna vazhdon n\u00eb m\u00ebnyr\u00eb normale, por ngarkesa kalon te broker\u00ebt e mbetur.<\/li>\n<li>Mbyllja e jashtme e dy broker\u00ebve n\u00eb rastin e nj\u00eb klusteri me tre broker\u00eb dhe min.isr = 2 \u00e7on n\u00eb pamund\u00ebsin\u00eb e shkruarjes n\u00eb kluster, por klusteri mbetet i aksesuesh\u00ebm p\u00ebr lexim. N\u00ebse min.isr = 1, klusteri vazhdon t\u00eb jet\u00eb i aksesuesh\u00ebm si p\u00ebr lexim ashtu edhe p\u00ebr shkruarje. Megjithat\u00eb, ky mod \u00ebsht\u00eb n\u00eb kund\u00ebrshtim me k\u00ebrkes\u00ebn p\u00ebr ruajtje t\u00eb lart\u00eb t\u00eb t\u00eb dh\u00ebnave.<\/li>\n<li>Mbyllja e jashtme e nj\u00ebrit prej server\u00ebve Zookeeper nuk \u00e7on n\u00eb ndalimin ose pamund\u00ebsin\u00eb e klusterit. Puna vazhdon n\u00eb m\u00ebnyr\u00eb normale.<\/li>\n<li>Mbyllja e jashtme e dy server\u00ebve Zookeeper \u00e7on n\u00eb pamund\u00ebsin\u00eb e klusterit deri n\u00eb momentin kur nj\u00eb nga server\u00ebt Zookeeper rikthen funksionimin e tij. Ky pohim \u00ebsht\u00eb i v\u00ebrtet\u00eb p\u00ebr nj\u00eb kluster Zookeeper me 3 server\u00eb. Si rezultat i hulumtimeve, u vendos t\u00eb zgjeroheshin klustera Zookeeper n\u00eb 5 server\u00eb p\u00ebr t\u00eb rritur q\u00ebndrueshm\u00ebrin\u00eb. <br clear=\"left\">\n <\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"kafka-as-a-service\">Kafka si nj\u00eb sh\u00ebrbim<\/h1>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kafka \u0219i microserviciile: o prezentare general\u0103\" src=\"\/wp-content\/uploads\/2019\/09\/19b2356131203cefbadfd90a25ae9674.png\" style=\"display:block;margin: 0 auto;\" \/> <\/p>\n<p><\/p>\n<p>Ne u siguruam q\u00eb Kafka \u00ebsht\u00eb nj\u00eb teknologji e shk\u00eblqyer, q\u00eb na ndihmon t\u00eb zgjidhim detyr\u00ebn q\u00eb kemi p\u00ebrpara (implementimin e brokerit t\u00eb mesazheve). Megjithat\u00eb, vendos\u00ebm t\u00eb ndalojm\u00eb sh\u00ebrbimet q\u00eb t\u00eb aksesojn\u00eb direkt Kafka dhe e mbyll\u00ebm at\u00eb nd\u00ebrsa e p\u00ebrdorin sh\u00ebrbimin data-bus. Pse e b\u00ebm\u00eb k\u00ebt\u00eb? N\u00eb t\u00eb v\u00ebrtet\u00eb ka disa arsye.<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Data-bus mori p\u00ebrsip\u00ebr t\u00eb gjitha detyrat e lidhura me integrimin me Kafka (implementimi dhe konfigurimi i consumera dhe producera, monitorimi, alarmin, regjistrimi, shkall\u00ebzimi, etj.). N\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb, integrimi me brokerin e mesazheve ndodh n\u00eb m\u00ebnyr\u00ebn m\u00eb t\u00eb thjesht\u00eb. <\/p>\n<p>\n<\/li>\n<li>\n<p>Data-bus na mund\u00ebsoi t\u00eb abstenojm\u00eb nga gjuha ose biblioteka specifike p\u00ebr t\u00eb punuar me Kafka. <\/p>\n<p>\n<\/li>\n<li>\n<p>Data-bus u mund\u00ebsoi sh\u00ebrbimeve t\u00eb tjera t\u00eb abstenojm\u00eb nga shtresa e ruajtjes. Ndoshta, n\u00eb nj\u00eb moment, ne do t\u00eb z\u00ebvend\u00ebsojm\u00eb Kafka me Pulsar, dhe askush nuk do ta v\u00ebrej\u00eb k\u00ebt\u00eb (t\u00eb gjitha sh\u00ebrbimet din\u00eb vet\u00ebm p\u00ebr API-n\u00eb e data-bus).<\/p>\n<p>\n<\/li>\n<li>\n<p>Data-bus mori p\u00ebrsip\u00ebr validimin e skemave t\u00eb ngjarjeve.<\/p>\n<p>\n<\/li>\n<li>\n<p>Me ndihm\u00ebn e data-bus \u00ebsht\u00eb realizuar autentifikimi.<\/p>\n<p>\n<\/li>\n<li>\n<p>N\u00ebn mbulimin e data-bus ne mund t\u00eb p\u00ebrdit\u00ebsojm\u00eb versionet e Kafka pa ndalim, n\u00eb m\u00ebnyr\u00eb t\u00eb padukshme, dhe t\u00eb menaxhojm\u00eb centralizuar konfigurimet e producer\u00ebve, consumer\u00ebve, broker\u00ebve, etj.<\/p>\n<p>\n<\/li>\n<li>\n<p>Data-bus na mund\u00ebsoi t\u00eb shtojm\u00eb funksionalitetet e nevojshme q\u00eb nuk i kemi n\u00eb Kafka (si\u00e7 jan\u00eb auditimi i temave, kontrolli p\u00ebr anomalit\u00eb n\u00eb kluster, krijimi i DLQ, etj.).<\/p>\n<p>\n<\/li>\n<li>\n<p>Data-bus lejon realizimin e failover-it centralizuar p\u00ebr t\u00eb gjitha sh\u00ebrbimet.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Aktualisht, p\u00ebr t\u00eb filluar d\u00ebrgimin e ngjarjeve n\u00eb brokerin e mesazheve, mjafton t\u00eb lidheni nj\u00eb librari t\u00eb vog\u00ebl n\u00eb kodin e sh\u00ebrbimit tuaj. Kjo \u00ebsht\u00eb e gjitha. Ju krijohet mund\u00ebsia t\u00eb shkruani, t\u00eb lexoni dhe t\u00eb shkall\u00ebzoni me nj\u00eb rresht kodi. E gjith\u00eb implementimi \u00ebsht\u00eb i fshehur nga ju; jasht\u00eb duken vet\u00ebm disa doreza si madh\u00ebsia e grupit. N\u00ebn kapak, sh\u00ebrbimi data-bus ngre n\u00eb Kubernetes numrin e nevojsh\u00ebm t\u00eb instancave t\u00eb prodhuesve dhe konsumator\u00ebve dhe u vendos atyre konfigurimin e nevojsh\u00ebm, por e gjith\u00eb kjo \u00ebsht\u00eb transparente p\u00ebr sh\u00ebrbimin tuaj. <\/p>\n<p><\/p>\n<p>Sigurisht, nuk ka nj\u00eb zgjidhje t\u00eb art\u00eb, dhe ky qasje ka kufizimet e veta.<\/p>\n<p><\/p>\n<ul>\n<li>Data-bus duhet t\u00eb mb\u00ebshtetet nga forcat tuaja, ndryshe nga librarit\u00eb e treta.<\/li>\n<li>Data-bus rrit numrin e nd\u00ebrveprimeve midis sh\u00ebrbimeve dhe brokerit t\u00eb mesazheve, gj\u00eb q\u00eb \u00e7on n\u00eb uljen e performanc\u00ebs krahasuar me Kafka-n e pap\u00ebrpunuar.<\/li>\n<li>Nuk gjith\u00e7ka mund t\u00eb fshihet kaq leht\u00eb nga sh\u00ebrbimet, nuk d\u00ebshirojm\u00eb t\u00eb kopjojm\u00eb funksionalitetin e KSQL ose t\u00eb Kafka Streams n\u00eb data-bus, prandaj ndonj\u00ebher\u00eb na nevojitet t\u00eb lejojm\u00eb sh\u00ebrbimet t\u00eb shkojn\u00eb drejtp\u00ebrdrejt. <\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00eb rastin ton\u00eb, p\u00ebrfitimet e kaluan disavantazhet dhe vendimi p\u00ebr t\u00eb mbuluar brokerin e mesazheve me nj\u00eb sh\u00ebrbim t\u00eb ve\u00e7ant\u00eb u justifikua. Gjat\u00eb nj\u00eb viti t\u00eb p\u00ebrdorimit, nuk pat\u00ebm asnj\u00eb aksident apo problem serioz.<\/p>\n<p><\/p>\n<p>P.S. Faleminderit t\u00eb dashur\u00ebs sime, Ekaterina Obalayeva, p\u00ebr ilustrimet e mrekullueshme n\u00eb k\u00ebt\u00eb artikull. N\u00ebse ju p\u00eblqyen, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.instagram.com\/o.k_o.k_\/\">k\u00ebtu<\/a><\/noindex> do t\u00eb gjejm\u00eb edhe m\u00eb shum\u00eb ilustrime.<\/p>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/465315\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u0432 \u0410\u0432\u0438\u0442\u043e \u0434\u0435\u0432\u044f\u0442\u044c \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043d\u0430\u0437\u0430\u0434 \u0432\u044b\u0431\u0440\u0430\u043b\u0438 Kafka, \u0438 \u0447\u0442\u043e \u043e\u043d\u0430 \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442. \u041f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043a\u0435\u0439\u0441\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u0418 \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u043f\u043b\u044e\u0441\u044b \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0445\u043e\u0434\u0430 Kafka as a Service. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043c\u044b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28406,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37849","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.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.\" \/>\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\/kafka-i-mikroservisy-obzor\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.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\udd47Kafka \u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b: \u043e\u0431\u0437\u043e\u0440 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kafka-i-mikroservisy-obzor\" \/>\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:20:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:20:09+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\udd47Kafka dhe mikrosh\u00ebrbimet: p\u00ebrmbledhje | ProHoster","description":"P\u00ebrsh\u00ebndetje t\u00eb gjith\u00ebve.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kafka-i-mikroservisy-obzor","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\udd47Kafka \u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b: \u043e\u0431\u0437\u043e\u0440 | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kafka-i-mikroservisy-obzor","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:20:09+00:00","article:modified_time":"2019-10-31T19:20:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37849","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-23 19:31:03","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:19:23","updated":"2026-01-23 19:31:03","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\/37849","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=37849"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/37849\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/28406"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=37849"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=37849"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=37849"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}