{"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>Punoj n\u00eb ekipin Tinkoff, i cili merret me zhvillimin e qendr\u00ebs son\u00eb t\u00eb njoftimit. Kryesisht zhvilloj n\u00eb Java duke p\u00ebrdorur Spring Boot dhe zgjidh probleme teknike t\u00eb ndryshme q\u00eb shfaqen n\u00eb projekt.<\/p>\n<p><\/p>\n<p>Shumica e mikrosh\u00ebrbimeve tona nd\u00ebrveprojn\u00eb asinkronisht p\u00ebrmes nj\u00eb brokeri mesazhi. M\u00eb par\u00eb, p\u00ebrdor\u00ebm IBM MQ si broker, i cili nuk arriti t\u00eb p\u00ebrballoj\u00eb ngarkes\u00ebn, por kishte garanci t\u00eb ulta p\u00ebr d\u00ebrgesat.<\/p>\n<p><\/p>\n<p>Si z\u00ebvend\u00ebsim, na u propozua Apache Kafka, e cila ka potencial t\u00eb lart\u00eb p\u00ebr shkall\u00ebzim, por, fatkeq\u00ebsisht, k\u00ebrkon nj\u00eb qasje pothuajse t\u00eb personalizuar p\u00ebr konfigurimin p\u00ebr skenar\u00eb t\u00eb ndrysh\u00ebm. P\u00ebr m\u00eb tep\u00ebr, mekanizmi i d\u00ebrges\u00ebs s\u00eb pakt\u00ebn nj\u00eb her\u00eb, i cili funksionon n\u00eb Kafka si parazgjedhje, nuk lejonte mbajtjen e nivelit 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, duke treguar ve\u00e7an\u00ebrisht se si t\u00eb konfigurojm\u00eb dhe t\u00eb jetojm\u00eb me d\u00ebrges\u00ebn sakt\u00ebsisht nj\u00eb her\u00eb.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"garantirovannaya-dostavka-i-ne-tolko\">D\u00ebrgesa e garantuar dhe jo vet\u00ebm<\/h2>\n<p><\/p>\n<p>Parametrat, p\u00ebr t\u00eb cil\u00ebt do t\u00eb flasim m\u00eb posht\u00eb, do t\u00eb ndihmojn\u00eb n\u00eb parandalimin e nj\u00eb s\u00ebr\u00eb problemeve me konfigurimin e parazgjedhur. Por fillimisht d\u00ebshirojm\u00eb t\u00eb kushtojm\u00eb v\u00ebmendje nj\u00eb parametri q\u00eb do ta leht\u00ebsoj\u00eb potencialin e pro\u00e7esit t\u00eb debagut.<\/p>\n<p><\/p>\n<p>K\u00ebtu do t\u00eb ndihmoj\u00eb <strong>client.id<\/strong> p\u00ebr Producuesin dhe Konsumatorin. N\u00eb shikim t\u00eb par\u00eb, si vler\u00eb mund t\u00eb p\u00ebrdorim emrin e aplikacionit, dhe n\u00eb shumic\u00ebn e rasteve do t\u00eb funksionoj\u00eb. Megjithat\u00eb, situata kur n\u00eb aplikacion p\u00ebrdoren disa Konsumator\u00eb dhe u jepni atyre t\u00eb nj\u00ebjtin 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 te regjistrimi i 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, m\u00eb e mira \u00ebsht\u00eb q\u00eb si vler\u00eb client.id t\u00eb p\u00ebrdoret nj\u00eb kombinim i emrit t\u00eb aplikacionit dhe, p\u00ebr shembull, emrit t\u00eb tem\u00ebs. Rezultatin e konfigurimit ton\u00eb mund ta shikoni n\u00eb daljen e komand\u00ebs <strong>kafka-consumer-groups<\/strong> nga utilitar\u00ebt 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 d\u00ebrges\u00ebs s\u00eb garantuar t\u00eb mesazhit. Producuesi i Kafka ka parametrin <strong>acks<\/strong>, i cili lejon t\u00eb konfiguroni se pas sa pranimeve lideri i klasit duhet t\u00eb marr\u00eb k\u00ebt\u00eb mesazh si t\u00eb shkruar me sukses. Ky parametr mund t\u00eb marr\u00eb vlerat e m\u00ebposhtme:<\/p>\n<p><\/p>\n<ul>\n<li>0 \u2014 pranimet nuk do t\u00eb merren parasysh.<\/li>\n<li>1 \u2014 parametri i parazgjedhur, \u00ebsht\u00eb e nevojshme pranimi vet\u00ebm nga 1 replik\u00eb.<\/li>\n<li>\u22121 \u2014 k\u00ebrkohet njohja 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 p\u00ebrmendura, \u00ebsht\u00eb e qart\u00eb se acks q\u00eb \u00ebsht\u00eb \u22121 ofron garancit\u00eb 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 jan\u00eb t\u00eb pasigurta. P\u00ebr t'u mbrojtur nga defektet p\u00ebrkoh\u00ebsore, Kafka Producer ofron parametrin <strong>retries<\/strong>, i cili lejon caktimin e numrit t\u00eb p\u00ebrpjekjeve p\u00ebr d\u00ebrgim brenda <strong>delivery.timeout.ms<\/strong>. Duke qen\u00eb se parametri retries ka vler\u00ebn e paracaktuar Integer.MAX_VALUE (2147483647), numri i p\u00ebrs\u00ebritjeve t\u00eb d\u00ebrges\u00ebs s\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\">Le t\u00eb kalojm\u00eb te d\u00ebrgimi me sakt\u00ebsi t\u00eb vetme<\/h2>\n<p><\/p>\n<p>Caktimet e p\u00ebrmendura lejojn\u00eb q\u00eb Produsi yn\u00eb t\u00eb d\u00ebrgoj\u00eb mesazhe me nj\u00eb garantim t\u00eb lart\u00eb. Tani le t\u00eb flasim se si t\u00eb garantojm\u00eb regjistrimin e nj\u00eb kopjeje t\u00eb vetme t\u00eb mesazhit n\u00eb Kafka-topic? N\u00eb rastin m\u00eb t\u00eb thjesht\u00eb, p\u00ebr k\u00ebt\u00eb Produsi duhet t\u00eb vendos\u00eb parametrin <strong>enable.idempotence<\/strong> n\u00eb vler\u00ebn true. Idempotenca garanton regjistrimin e vet\u00ebm nj\u00eb mesazhi n\u00eb nj\u00eb parti t\u00eb caktuar t\u00eb nj\u00eb topiku. Parakusht 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, do t\u00eb vendosen automatikisht vlerat e p\u00ebrmendura m\u00eb sip\u00ebr.<\/p>\n<p><\/p>\n<p>Kur idempotenca \u00ebsht\u00eb e konfiguruar, duhet t\u00eb sigurohemi q\u00eb mesazhet e nj\u00ebjta t\u00eb shkojn\u00eb gjithmon\u00eb n\u00eb t\u00eb nj\u00ebjtat parti. Kjo mund t\u00eb b\u00ebhet duke rregulluar \u00e7el\u00ebsin dhe parametrin partitioner.class n\u00eb Produs. Le t\u00eb fillojm\u00eb me \u00e7el\u00ebsin. P\u00ebr \u00e7do d\u00ebrges\u00eb ai duhet t\u00eb jet\u00eb i nj\u00ebjt\u00eb. Kjo \u00ebsht\u00eb e leht\u00eb p\u00ebr t'u arritur duke p\u00ebrdorur nj\u00eb identifikues biznesi nga mesazhi origjinal. Parametri partitioner.class ka vler\u00ebn e paracaktuar \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 parashikimi t\u00eb paracaktuar veprojm\u00eb k\u00ebshtu:<\/p>\n<p><\/p>\n<ul>\n<li>N\u00ebse partia \u00ebsht\u00eb e specifikuar qart\u00eb gjat\u00eb d\u00ebrgimit t\u00eb mesazhit, at\u00ebher\u00eb e p\u00ebrdorim at\u00eb.<\/li>\n<li>N\u00ebse partia nuk \u00ebsht\u00eb e specifikuar, por \u00e7el\u00ebsi \u00ebsht\u00eb i caktuar \u2014 zgjedhim partin\u00eb sipas hashes nga \u00e7el\u00ebsi.<\/li>\n<li>N\u00ebse as partia as \u00e7el\u00ebsi nuk jan\u00eb caktuar \u2014 zgjedhim partit\u00eb me 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 procesim t\u00eb renditur t\u00eb mesazheve n\u00eb Consumer. \u00cbsht\u00eb mir\u00eb t\u00eb mbani mend se, n\u00ebse n\u00eb klasterin tuaj \u00ebsht\u00eb e aktivizuar menaxhimi i qasjes, do t'ju nevojiten t\u00eb drejtat p\u00ebr regjistrimin idempotent n\u00eb tem\u00eb.<\/p>\n<p><\/p>\n<p>N\u00ebse ndonj\u00ebher\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 konsistenc\u00ebs s\u00eb t\u00eb dh\u00ebnave midis particioneve t\u00eb ndryshme, at\u00ebher\u00eb transaksionet do t'ju vijn\u00eb n\u00eb ndihm\u00eb. P\u00ebr m\u00eb tep\u00ebr, me an\u00eb t\u00eb transaksionit t\u00eb nd\u00ebrlikuar mund t\u00eb sinkronizoni kushtimisht regjistrimin n\u00eb Kafka, p\u00ebr shembull, me regjistrimin n\u00eb DB. P\u00ebr t\u00eb aktivizuar d\u00ebrgimin transaksional n\u00eb Producer, \u00ebsht\u00eb necesare q\u00eb ai t\u00eb ket\u00eb idempotenc\u00eb dhe t\u00eb vendosni <strong>transactional.id<\/strong>. N\u00ebse klasteri juaj Kafka ka menaxhim qasje, at\u00ebher\u00eb p\u00ebr regjistrimin transaksional, ashtu si p\u00ebr at\u00eb idempotent, do t'ju nevojiten t\u00eb drejtat p\u00ebr regjistrim, t\u00eb cilat mund t\u00eb jepen n\u00ebp\u00ebrmjet maske t\u00eb p\u00ebrdorur me vler\u00ebn q\u00eb ruhet n\u00eb transactional.id.<\/p>\n<p><\/p>\n<p>Formalisht si identifikues transaksioni mund t\u00eb p\u00ebrdoret \u00e7do varg, p\u00ebr shembull emri i aplikacionit. Por n\u00ebse jeni duke b\u00ebr\u00eb ekzekutim t\u00eb disa instancave t\u00eb nj\u00ebjtit aplikacion me t\u00eb nj\u00ebjtin transactional.id, at\u00ebher\u00eb instanca e par\u00eb e nisur do t\u00eb ndalet me gabim, pasi Kafka do ta konsideroj\u00eb at\u00eb si proces zombi. <\/p>\n<p><\/p>\n<pre><code class=\"java\">org.apache.kafka.common.errors.ProducerFencedException: Prodhuesi p\u00ebrpiqet t\u00eb kryej\u00eb nj\u00eb operacion me nj\u00eb epok\u00eb t\u00eb vjeter. Ose ka nj\u00eb prodhues m\u00eb t\u00eb ri me t\u00eb nj\u00ebjtin transactionalId, ose transaksioni i prodhuesit ka skaduar nga brokeri.<\/code><\/pre>\n<p><\/p>\n<p>P\u00ebr t\u00eb zgjidhur k\u00ebt\u00eb problem, ne shtojm\u00eb n\u00eb emrin e aplikacionit nj\u00eb sufix n\u00eb form\u00ebn e emrit t\u00eb hostit, t\u00eb cilin e marrim nga variablat e mjedisit. <\/p>\n<p><\/p>\n<p>Prodhuesi \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 menj\u00ebher\u00eb hyn n\u00eb tem\u00eb, por disponon disa atribute shtes\u00eb sistematike.<\/p>\n<p><\/p>\n<p>Q\u00eb k\u00ebto mesazhe t\u00eb mos lexohen p\u00ebrpara kohe nga Consumer, ai duhet t\u00eb vendos\u00eb parametrin <strong>isolation.level<\/strong> n\u00eb vler\u00ebn read_committed. K\u00ebt\u00eb Consumer do t\u00eb mund t\u00eb lexoj\u00eb mesazhet e pa-transaksionuara si m\u00eb par\u00eb, dhe ato transaksionale vet\u00ebm pas angazhimit.<br \/>\nN\u00ebse keni vendosur t\u00eb gjitha konfigurimet e p\u00ebrmendura m\u00eb par\u00eb, at\u00ebher\u00eb keni konfiguruar dor\u00ebzim exactly once. Urime!<\/p>\n<p><\/p>\n<p>Por ka nj\u00eb nuanc\u00eb tjet\u00ebr. Transactional.id, i cili u konfiguruar m\u00eb lart, n\u00eb t\u00eb v\u00ebrtet\u00eb \u00ebsht\u00eb nj\u00eb prefiks i transaksionit. N\u00eb menaxherin e transaksioneve, atij i shtohet nj\u00eb num\u00ebr radhor. 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 t\u00eb paracaktuar \"7 dit\u00eb\". N\u00ebse gjat\u00eb k\u00ebsaj kohe aplikacioni nuk ka pranuar asnj\u00eb mesazh, at\u00ebher\u00eb gjat\u00eb p\u00ebrpjekjes p\u00ebr t\u00eb d\u00ebrguar transaksionin e ardhsh\u00ebm do t\u00eb merrni <strong>InvalidPidMappingException<\/strong>. Pas k\u00ebsaj, koordinatori i transaksioneve do t\u00eb jap\u00eb nj\u00eb num\u00ebr rendor t\u00eb ri 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 rezultateve<\/h2>\n<p><\/p>\n<p>Si\u00e7 mund t\u00eb v\u00ebreni, nuk mjafton thjesht t\u00eb d\u00ebrgoni mesazhe n\u00eb Kafka. Duhet t\u00eb zgjidhni kombinimin e parametrave dhe t\u00eb jeni t\u00eb gatsh\u00ebm p\u00ebr t\u00eb b\u00ebr\u00eb ndryshime t\u00eb shpejta. N\u00eb k\u00ebt\u00eb artikull, kam p\u00ebrpjekur t\u00eb tregoj n\u00eb detaje konfigurimin e d\u00ebrgimit 'exactly once' dhe kam p\u00ebrshkruar disa probleme me konfigurimet e client.id dhe transactional.id, me t\u00eb cilat u p\u00ebrball\u00ebm. M\u00eb posht\u00eb jan\u00eb p\u00ebrmbledhje t\u00eb konfigurimeve t\u00eb Prodhueseve dhe Konsumator\u00ebve.<\/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\u00ebrges\u00eb t\u00eb renditur)<\/li>\n<li>transactional.id = ${application-name}-${hostname}<\/li>\n<\/ol>\n<p><\/p>\n<p>Konsumatori:<\/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 mb\u00ebshtjell\u00ebs mbi konfigurimin e spring-ut, ku tashm\u00eb jan\u00eb caktuar vlerat p\u00ebr disa nga parametrat e p\u00ebrmendur.<\/p>\n<p><\/p>\n<p>Dhe k\u00ebtu jan\u00eb 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 Mesazhe Transaksionale<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kafka.apache.org\/documentation\/#configuration\">P\u00ebrshkrimi i konfigurimeve <\/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 5.0.2 - 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.\" \/>\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) 5.0.2\" \/>\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.\" \/>\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 u b\u00eb Kafka realitet | ProHoster","description":"P\u00ebrsh\u00ebndetje, Habr! Un\u00eb punoj n\u00eb ekipin Tinkoff.","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.","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","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\/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}]}}