{"id":54431,"date":"2019-12-26T00:00:00","date_gmt":"2019-12-25T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/kak-kafka-stala-bylyu"},"modified":"2020-02-18T14:02:26","modified_gmt":"2020-02-18T11:02:26","slug":"kak-kafka-stala-bylyu","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kak-kafka-stala-bylyu","title":{"rendered":"Si Kafka u b\u00eb realitet","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Si Kafka u b\u00eb realitet\" src=\"\/wp-content\/uploads\/2019\/12\/e61bf54b10e4e44a5c680185b0c16655.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00ebrsh\u00ebndetje, Habr!<\/p>\n<p><\/p>\n<p>Un\u00eb punoj n\u00eb ekipin Tinkoff, i cili merret me zhvillimin e qendr\u00ebs son\u00eb t\u00eb njoftimeve. Kryesisht, un\u00eb zhvilloj n\u00eb Java duke p\u00ebrdorur Spring Boot dhe zgjidh probleme t\u00eb ndryshme teknike q\u00eb lindin n\u00eb projekt.<\/p>\n<p><\/p>\n<p>Shumica e mikrosh\u00ebrbimeve tona komunikojn\u00eb asinkronisht me nj\u00ebra-tjetr\u00ebn p\u00ebrmes nj\u00eb brokeri mesazhesh. M\u00eb par\u00eb, ne kemi p\u00ebrdorur IBM MQ si broker, i cili nuk arriti t\u00eb p\u00ebrballonte ngarkes\u00ebn, por kishte garanci t\u00eb larta t\u00eb dor\u00ebzimit.<\/p>\n<p><\/p>\n<p>Si z\u00ebvend\u00ebsim, na u propozua Apache Kafka, i cili ka nj\u00eb potencial t\u00eb lart\u00eb t\u00eb shkall\u00ebzimit, por, fatkeq\u00ebsisht, k\u00ebrkon nj\u00eb qasje pothuajse t\u00eb ve\u00e7ant\u00eb p\u00ebr konfigurimin p\u00ebr skenar\u00eb t\u00eb ndrysh\u00ebm. P\u00ebr m\u00eb tep\u00ebr, mekanizmi i dor\u00ebzimit t\u00eb pakt\u00ebn nj\u00eb her\u00eb, i cili punon n\u00eb Kafka si parazgjedhje, nuk lejonte mbajtjen e nj\u00eb niveli t\u00eb nevojsh\u00ebm t\u00eb konsistenc\u00ebs nga kutia. M\u00eb posht\u00eb do t\u00eb ndaj p\u00ebrvoj\u00ebn ton\u00eb t\u00eb konfigurimit t\u00eb Kafka, sidomos do t\u00eb flas p\u00ebr si t\u00eb konfiguroni dhe t\u00eb jetoni me dor\u00ebzimin e sakt\u00eb nj\u00eb her\u00eb.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"garantirovannaya-dostavka-i-ne-tolko\">Dor\u00ebzimi i garantuar dhe jo vet\u00ebm<\/h2>\n<p><\/p>\n<p>Parametrat q\u00eb do t\u00eb shqyrtohen m\u00eb tej do t\u00eb ndihmojn\u00eb n\u00eb parandalimin e disa problemeve me konfigurimet e parazgjedhura t\u00eb lidhjes. Por fillimisht dua t'i kushtoj v\u00ebmendje nj\u00eb parametri, i cili do t\u00eb leht\u00ebsoj\u00eb mund\u00ebsit\u00eb e debugging.<\/p>\n<p><\/p>\n<p>K\u00ebt\u00eb do ta ndihmoj\u00eb <strong>client.id<\/strong> p\u00ebr Prodhuese dhe Konsumatore. N\u00eb pamje t\u00eb par\u00eb, si vler\u00eb mund t\u00eb p\u00ebrdoret emri i aplikacionit, dhe n\u00eb shumic\u00ebn e rasteve kjo do t\u00eb funksiononte. Megjithat\u00eb, situata kur nj\u00eb aplikacion p\u00ebrdor disa Konsumator\u00eb dhe ju u jepni atyre t\u00eb nj\u00ebjt\u00ebn client.id, \u00e7on n\u00eb paralajm\u00ebrimin e m\u00ebposht\u00ebm:<\/p>\n<p><\/p>\n<pre><code class=\"java\">org.apache.kafka.common.utils.AppInfoParser \u2014 Gabim n\u00eb regjistrimin e AppInfo mbean javax.management.InstanceAlreadyExistsException: kafka.consumer:type=app-info,id=kafka.test-0<\/code><\/pre>\n<p><\/p>\n<p>N\u00ebse d\u00ebshironi t\u00eb p\u00ebrdorni JMX n\u00eb nj\u00eb aplikacion me Kafka, kjo mund t\u00eb jet\u00eb nj\u00eb problem. P\u00ebr k\u00ebt\u00eb rast, \u00ebsht\u00eb m\u00eb mir\u00eb t\u00eb p\u00ebrdorni si vler\u00eb p\u00ebr client.id nj\u00eb kombinim t\u00eb emrit t\u00eb aplikacionit dhe, p\u00ebr shembull, emrit t\u00eb tem\u00ebs. Rezultati i konfigurimit ton\u00eb mund t\u00eb shihet n\u00eb daljen e komand\u00ebs <strong>kafka-consumer-groups<\/strong> nga utilitat e Confluent:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Si Kafka u b\u00eb realitet\" src=\"\/wp-content\/uploads\/2019\/12\/f807a93f36f262522a613161a549eb91.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tani le t\u00eb shqyrtojm\u00eb skenarin e dor\u00ebzimit t\u00eb garantuar t\u00eb mesazhit. Nj\u00eb Kafka Producer ka nj\u00eb paramet\u00ebr <strong>acks<\/strong>, i cili lejon konfigurimin e numrit t\u00eb acknowledge-ve q\u00eb lideri i klasterit duhet t\u00eb marr\u00eb p\u00ebr t\u00eb konsideruar mesazhin si t\u00eb shkruar me sukses. Ky paramet\u00ebr mund t\u00eb marr\u00eb vlerat e m\u00ebposhtme:<\/p>\n<p><\/p>\n<ul>\n<li>0 \u2014 acknowledge-t nuk do t\u00eb merren parasysh.<\/li>\n<li>1 \u2014 parametri parazgjedhor, nevojitet acknowledge vet\u00ebm nga 1 replik\u00eb.<\/li>\n<li>\u22121 \u2014 nevojiten acknowledge nga t\u00eb gjitha replikat e sinkronizuara (konfigurimi i klasterit <strong>min.insync.replicas<\/strong>).<\/li>\n<\/ul>\n<p><\/p>\n<p>Nga vlerat e lartp\u00ebrmendura, \u00ebsht\u00eb e qart\u00eb se acks i barabart\u00eb me \u22121 ofron garanci m\u00eb t\u00eb forta q\u00eb mesazhi nuk do t\u00eb humbas\u00eb. <\/p>\n<p><\/p>\n<p>Si\u00e7 e dim\u00eb t\u00eb gjith\u00eb, sistemet e shp\u00ebrndara nuk jan\u00eb t\u00eb besueshme. P\u00ebr t\u00eb mbrojtur veten nga defekte p\u00ebrkoh\u00ebsore, Kafka Producer ofron parametrin <strong>retries<\/strong>, i cili lejon p\u00ebrcaktimin e numrit t\u00eb p\u00ebrpjekjeve p\u00ebr d\u00ebrgimin gjat\u00eb <strong>delivery.timeout.ms<\/strong>. Duke qen\u00eb se parametri retries ka nj\u00eb vler\u00eb parazgjedhore Integer.MAX_VALUE (2147483647), numri i p\u00ebrs\u00ebritjeve t\u00eb d\u00ebrgimit t\u00eb mesazhit mund t\u00eb rregullohet duke ndryshuar vet\u00ebm delivery.timeout.ms.<\/p>\n<p><\/p>\n<h2 id=\"dvizhemsya-k-exactly-once-delivery\">T\u00eb kalojm\u00eb tek dor\u00ebzimi i sakt\u00eb nj\u00eb her\u00eb<\/h2>\n<p><\/p>\n<p>Parametrat e p\u00ebrmendur lejojn\u00eb Prodhuest ton\u00eb t\u00eb d\u00ebrgoj\u00eb mesazhe me nj\u00eb garanci t\u00eb lart\u00eb. Tani le t\u00eb flasim p\u00ebr si t\u00eb garantoni regjistrimin vet\u00ebm t\u00eb nj\u00eb kopje t\u00eb mesazhit n\u00eb tem\u00ebn e Kafka? N\u00eb rastin m\u00eb t\u00eb thjesht\u00eb, p\u00ebr k\u00ebt\u00eb n\u00eb Prodhuese duhet t\u00eb vendosni parametrin <strong>enable.idempotence<\/strong> n\u00eb vler\u00ebn true. Idempotenca garanton regjistrimin e vet\u00ebm nj\u00eb mesazhi n\u00eb nj\u00eb pjes\u00eb t\u00eb nj\u00eb teme t\u00eb caktuar. Parakushte p\u00ebr aktivizimin e idempotenc\u00ebs jan\u00eb vlerat <strong>acks = all, retry &gt; 0, max.in.flight.requests.per.connection \u2264 5<\/strong>. N\u00ebse k\u00ebto parametra nuk jan\u00eb caktuar nga zhvilluesi, at\u00ebher\u00eb automatikisht do t\u00eb caktohen vlerat e p\u00ebrmendura m\u00eb sip\u00ebr.<\/p>\n<p><\/p>\n<p>Kur idempotenca \u00ebsht\u00eb e konfiguruar, \u00ebsht\u00eb e nevojshme t\u00eb sigurohet q\u00eb mesazhe t\u00eb nj\u00ebjta t\u00eb shkojn\u00eb gjithmon\u00eb n\u00eb t\u00eb nj\u00ebjtat pjes\u00eb. Kjo mund t\u00eb arrihet duke konfiguruar \u00e7el\u00ebsin dhe parametrin partitioner.class n\u00eb Prodhuese. Le t\u00eb fillojm\u00eb me \u00e7el\u00ebsin. P\u00ebr \u00e7do d\u00ebrges\u00eb ai duhet t\u00eb jet\u00eb i nj\u00ebjt\u00eb. K\u00ebt\u00eb \u00ebsht\u00eb e leht\u00eb t\u00eb arrihet duke p\u00ebrdorur nj\u00eb identifikues biznesi nga mesazhi origjinal. Parametri partitioner.class ka vler\u00ebn parazgjedhore \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/apache\/kafka\/blob\/trunk\/clients\/src\/main\/java\/org\/apache\/kafka\/clients\/producer\/internals\/DefaultPartitioner.java\">DefaultPartitioner<\/a><\/noindex>. Me k\u00ebt\u00eb strategji t\u00eb particionimit p\u00ebrfitojm\u00eb k\u00ebshtu:<\/p>\n<p><\/p>\n<ul>\n<li>N\u00ebse pjesa \u00ebsht\u00eb e dh\u00ebn\u00eb qart\u00eb gjat\u00eb d\u00ebrgimit t\u00eb mesazhit, at\u00ebher\u00eb e p\u00ebrdorim at\u00eb.<\/li>\n<li>N\u00ebse pjesa nuk \u00ebsht\u00eb e dh\u00ebn\u00eb, por \u00ebsht\u00eb i caktuar \u00e7el\u00ebsi \u2014 zgjedhim pjes\u00ebn n\u00eb baz\u00eb t\u00eb hashes nga \u00e7el\u00ebsi.<\/li>\n<li>N\u00ebse as pjesa as \u00e7el\u00ebsi nuk jan\u00eb t\u00eb dh\u00ebna \u2014 zgjedhim pjes\u00ebt n\u00eb radh\u00eb (round-robin).<\/li>\n<\/ul>\n<p><\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, p\u00ebrdorimi i \u00e7el\u00ebsit dhe d\u00ebrgimi idempotent me parametrin <strong>max.in.flight.requests.per.connection = 1<\/strong> ju jep nj\u00eb p\u00ebrpunim t\u00eb rregullt t\u00eb mesazheve n\u00eb Consumer. \u00cbsht\u00eb e r\u00ebnd\u00ebsishme t\u00eb mbani mend se, n\u00ebse n\u00eb klasterin tuaj \u00ebsht\u00eb vendosur menaxhimi i qasjes, do t'ju nevojiten t\u00eb drejtat p\u00ebr shkruaj the idempotent n\u00eb tem\u00eb.<\/p>\n<p><\/p>\n<p>N\u00ebse ndodhi q\u00eb ju mungojn\u00eb mund\u00ebsit\u00eb e d\u00ebrgimit idempotent sipas \u00e7el\u00ebsit ose logjika n\u00eb an\u00ebn e Producer k\u00ebrkon ruajtjen e q\u00ebndrueshm\u00ebris\u00eb s\u00eb t\u00eb dh\u00ebnave midis particioneve t\u00eb ndryshme, at\u00ebher\u00eb do t\u00eb ndihmojn\u00eb transaksionet. P\u00ebr m\u00eb tep\u00ebr, me ndihm\u00ebn e transaksionit t\u00eb lidhur, mund t\u00eb sinkronizoni n\u00eb m\u00ebnyr\u00eb t\u00eb kusht\u00ebzuar shkrimin n\u00eb Kafka, p\u00ebr shembull, me shkrimin n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave. P\u00ebr t\u00eb aktivizuar d\u00ebrgimin transaksional n\u00eb Producer, \u00ebsht\u00eb e nevojshme q\u00eb ai t\u00eb ket\u00eb idempotenc\u00eb dhe gjithashtu t\u00eb vendos\u00eb <strong>transactional.id<\/strong>. N\u00ebse klasteri juaj Kafka ka menaxhim qasje, at\u00ebher\u00eb p\u00ebr shkrimin transaksional, si dhe p\u00ebr at\u00eb idempotent, do t'ju nevojiten t\u00eb drejta p\u00ebr shkruaj, t\u00eb cilat mund t\u00eb jepen sipas nj\u00ebmaske duke p\u00ebrdorur vler\u00ebn q\u00eb ruhet n\u00eb transactional.id.<\/p>\n<p><\/p>\n<p>Formalizisht, si identifikues transaksioni mund t\u00eb p\u00ebrdoret \u00e7do varg, p\u00ebr shembull emri i aplikacionit. Por n\u00ebse po nisni disa instance t\u00eb nj\u00ebjtit aplikacion me t\u00eb nj\u00ebjtin transactional.id, at\u00ebher\u00eb instanca e par\u00eb e nisur do t\u00eb ndaloj\u00eb me nj\u00eb gabim, pasi Kafka do ta konsideroj\u00eb at\u00eb nj\u00eb proces zombik. <\/p>\n<p><\/p>\n<pre><code class=\"java\">org.apache.kafka.common.errors.ProducerFencedException: Producer u p\u00ebrpoq t\u00eb realizonte nj\u00eb operacion me nj\u00eb epok\u00eb t\u00eb vjet\u00ebr. Ose ka nj\u00eb producent m\u00eb t\u00eb ri me t\u00eb nj\u00ebjtin transactionalId, ose transaksioni i producentit ka skaduar nga brokeri.<\/code><\/pre>\n<p><\/p>\n<p>P\u00ebr t\u00eb zgjidhur k\u00ebt\u00eb problem, ne shtojm\u00eb nj\u00eb sufix n\u00eb emrin e aplikacionit n\u00eb form\u00ebn e emrit t\u00eb hostit, t\u00eb cilin e marrim nga variablat e mjedisit. <\/p>\n<p><\/p>\n<p>Producenti \u00ebsht\u00eb i konfiguruar, por transaksionet n\u00eb Kafka menaxhojn\u00eb vet\u00ebm fush\u00ebn e dukshm\u00ebris\u00eb s\u00eb mesazhit. Pavar\u00ebsisht nga statusi i transaksionit, mesazhi shkon menj\u00ebher\u00eb n\u00eb tem\u00eb, por ka veti sistemore shtes\u00eb.<\/p>\n<p><\/p>\n<p>Q\u00eb k\u00ebto mesazhe t\u00eb mos lexohen nga Consumer para kohe, ai duhet t\u00eb vendos\u00eb parametrin <strong>isolation.level<\/strong> n\u00eb vler\u00ebn read_committed. Ky Consumer do t\u00eb mund t\u00eb lexoj\u00eb mesazhe jo transaksionale si m\u00eb par\u00eb, dhe ato transaksionale vet\u00ebm pas komitetit.<br \/>\nN\u00ebse keni vendosur t\u00eb gjitha cil\u00ebsimet e p\u00ebrmendura m\u00eb par\u00eb, at\u00ebher\u00eb keni konfiguruar d\u00ebrgimin exactly once. Urime!<\/p>\n<p><\/p>\n<p>Por ka edhe nj\u00eb holl\u00ebsi tjet\u00ebr. Transactional.id, t\u00eb cilin e kemi konfiguruar m\u00eb lart, n\u00eb t\u00eb v\u00ebrtet\u00eb \u00ebsht\u00eb nj\u00eb prefiks i transaksionit. N\u00eb menaxherin e transaksioneve i shtohet nj\u00eb num\u00ebr rendor. Identifikuesi i marr\u00eb jepet n\u00eb <strong>transactional.id.expiration.ms<\/strong>, i cili konfigurohet n\u00eb klasterin Kafka dhe ka nj\u00eb vler\u00eb parazgjedhje \"7 dit\u00eb\". N\u00ebse gjat\u00eb k\u00ebsaj kohe aplikacioni nuk ka marr\u00eb asnj\u00eb mesazh, at\u00ebher\u00eb gjat\u00eb p\u00ebrpjekjes p\u00ebr d\u00ebrgimin transaksional t\u00eb ardhsh\u00ebm do t\u00eb merrni <strong>InvalidPidMappingException<\/strong>. Pas k\u00ebsaj, koordinatorja e transaksioneve do t\u00eb jap\u00eb nj\u00eb num\u00ebr t\u00eb ri rendor p\u00ebr transaksionin e ardhsh\u00ebm. N\u00eb k\u00ebt\u00eb rast, mesazhi mund t\u00eb humbas\u00eb, n\u00ebse InvalidPidMappingException nuk trajtohet si\u00e7 duhet. <\/p>\n<p><\/p>\n<h2 id=\"vmesto-itogov\">N\u00eb vend t\u00eb p\u00ebrfundimeve<\/h2>\n<p><\/p>\n<p>Si\u00e7 mund t\u00eb v\u00ebrehet, nuk mjafton thjesht t\u00eb d\u00ebrgoni mesazhe n\u00eb Kafka. Duhet t\u00eb zgjidhni kombinime parametrash dhe t\u00eb jeni t\u00eb gatsh\u00ebm p\u00ebr b\u00ebr\u00eb ndryshime t\u00eb shpejta. N\u00eb k\u00ebt\u00eb artikull, kam p\u00ebrpiqur t\u00eb tregoj me detaje konfigurimin e d\u00ebrgimit exactly once dhe p\u00ebrshkruaj disa probleme t\u00eb konfigurimeve client.id dhe transactional.id, me t\u00eb cilat u ballafaquam. M\u00eb posht\u00eb n\u00eb form\u00eb t\u00eb shkurt\u00ebr jan\u00eb vendosjet e Produserit dhe Consumerit.<\/p>\n<p><\/p>\n<p>Producenti:<\/p>\n<p><\/p>\n<ol>\n<li>acks = all<\/li>\n<li>retries &gt; 0<\/li>\n<li>enable.idempotence = true<\/li>\n<li>max.in.flight.requests.per.connection \u2264 5 (1 \u2014 p\u00ebr d\u00ebrgim t\u00eb rregullt)<\/li>\n<li>transactional.id = ${application-name}-${hostname}<\/li>\n<\/ol>\n<p><\/p>\n<p>Consumatori:<\/p>\n<p><\/p>\n<ol>\n<li>isolation.level = read_committed<\/li>\n<\/ol>\n<p><\/p>\n<p>P\u00ebr t\u00eb minimizuar gabimet n\u00eb aplikacionet e ardhshme, ne krijuam nj\u00eb mbules\u00eb mbi konfigurimin spring, ku jan\u00eb vendosur vlerat p\u00ebr disa nga parametrat e p\u00ebrmendur.<\/p>\n<p><\/p>\n<p>Ja dhe disa materiale p\u00ebr studim t\u00eb pavarur:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cwiki.apache.org\/confluence\/display\/KAFKA\/KIP-98+-+Exactly+Once+Delivery+and+Transactional+Messaging\">KIP-98 \u2014 D\u00ebrgimi Exactly Once dhe Mesazhet Transaksionale<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kafka.apache.org\/documentation\/#configuration\">P\u00ebrshkrimi i cil\u00ebsimeve <\/a><\/noindex><\/li>\n<\/ul>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/tinkoff\/blog\/481784\/\">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! \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Tinkoff, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0435\u043d\u0442\u0440\u0430 \u043d\u043e\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439. \u041f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u043d\u0430 Java \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Spring boot \u0438 \u0440\u0435\u0448\u0430\u044e \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043d\u0430\u0448\u0438\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u0420\u0430\u043d\u0435\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 IBM MQ, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441 [&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-54431","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Tinkoff, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0435\u043d\u0442\u0440\u0430 \u043d\u043e\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439. \u041f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u043d\u0430 Java \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Spring boot \u0438 \u0440\u0435\u0448\u0430\u044e \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043d\u0430\u0448\u0438\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u0420\u0430\u043d\u0435\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 IBM MQ, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\" \/>\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\/kak-kafka-stala-bylyu\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\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\u0430\u043a Kafka \u0441\u0442\u0430\u043b\u0430 \u0431\u044b\u043b\u044c\u044e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Tinkoff, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0435\u043d\u0442\u0440\u0430 \u043d\u043e\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439. \u041f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u043d\u0430 Java \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Spring boot \u0438 \u0440\u0435\u0448\u0430\u044e \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043d\u0430\u0448\u0438\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u0420\u0430\u043d\u0435\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 IBM MQ, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kak-kafka-stala-bylyu\" \/>\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-12-25T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:26+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\udd47Si Kafka u b\u00eb realitet | ProHoster","description":"P\u00ebrsh\u00ebndetje, Habr! Un\u00eb punoj n\u00eb ekipin Tinkoff, i cili merret me zhvillimin e qendr\u00ebs son\u00eb t\u00eb njoftimit. Kryesisht, un\u00eb zhvilloj n\u00eb Java duke p\u00ebrdorur Spring boot dhe zgjidh probleme t\u00eb ndryshme teknike q\u00eb shfaqen n\u00eb projekt. Shumica e mikrous\u00ebrve tan\u00eb komunikojn\u00eb asinkronisht me nj\u00ebri-tjetrin p\u00ebrmes brokerit t\u00eb mesazheve. M\u00eb par\u00eb, si broker kemi p\u00ebrdorur IBM MQ, i cili nuk arriti m\u00eb t\u00eb p\u00ebrballoj\u00eb","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kak-kafka-stala-bylyu","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\u0430\u043a Kafka \u0441\u0442\u0430\u043b\u0430 \u0431\u044b\u043b\u044c\u044e | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 Tinkoff, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0435\u043d\u0442\u0440\u0430 \u043d\u043e\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439. \u041f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u043d\u0430 Java \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Spring boot \u0438 \u0440\u0435\u0448\u0430\u044e \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043d\u0430\u0448\u0438\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u0420\u0430\u043d\u0435\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0440\u043e\u043a\u0435\u0440\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 IBM MQ, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/kak-kafka-stala-bylyu","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-12-25T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:26+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54431","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-24 11:22:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:06:37","updated":"2026-01-24 11:22:19"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/54431","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=54431"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/54431\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=54431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=54431"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=54431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}