{"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\/lv\/blog\/administrirovanie\/kak-kafka-stala-bylyu","title":{"rendered":"K\u0101 Kafka k\u013cuva par realit\u0101ti","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"K\u0101 Kafka k\u013cuva par realit\u0101ti\" src=\"\/wp-content\/uploads\/2019\/12\/e61bf54b10e4e44a5c680185b0c16655.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sveiki, Habr!<\/p>\n<p><\/p>\n<p>Es str\u0101d\u0101ju Tinkoff komand\u0101, kas izstr\u0101d\u0101 savu pazi\u0146ojumu centru. Galvenok\u0101rt es programm\u0113ju Java, izmantojot Spring Boot, un risinu da\u017e\u0101das tehniskas probl\u0113mas, kas rodas projekt\u0101.<\/p>\n<p><\/p>\n<p>Liel\u0101k\u0101 da\u013ca m\u016bsu mikropakalpojumu sav\u0101 starp\u0101 sazin\u0101s asinkroni caur zi\u0146ojumu brokeri. Agr\u0101k m\u0113s izmantoj\u0101m IBM MQ k\u0101 brokeri, kur\u0161 vairs nesp\u0113ja tikt gal\u0101 ar slodzi, bet tam bija augsta pieg\u0101des garantija.<\/p>\n<p><\/p>\n<p>K\u0101 aizvietojumu mums pied\u0101v\u0101ja Apache Kafka, kas pied\u0101v\u0101 augstas m\u0113rogojam\u012bbas iesp\u0113jas, ta\u010du, diem\u017e\u0113l, prasa praktiski individu\u0101lu pieeju konfigur\u0101cijai da\u017e\u0101diem scen\u0101rijiem. Turkl\u0101t meh\u0101nisms 'at least once delivery', kas darbojas Kafka p\u0113c noklus\u0113juma, ne\u013c\u0101va nodro\u0161in\u0101t nepiecie\u0161amo konsekvenci tie\u0161i no kast\u012btes. T\u0101l\u0101k es dal\u012b\u0161os m\u016bsu pieredz\u0113 par Kafka konfigur\u0113\u0161anu, \u012bpa\u0161i par to, k\u0101 iestat\u012bt un sadz\u012bvot ar 'exactly once delivery'.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"garantirovannaya-dostavka-i-ne-tolko\">Garant\u0113ta pieg\u0101de un ne tikai<\/h2>\n<p><\/p>\n<p>Parametri, par kuriem run\u0101sim t\u0101l\u0101k, pal\u012bdz\u0113s nov\u0113rst virkni probl\u0113mu ar noklus\u0113juma savienojuma iestat\u012bjumiem. Bet vispirms v\u0113los piev\u0113rst uzman\u012bbu vienam parametram, kas atvieglos iesp\u0113jamo atk\u013c\u016bdo\u0161anu.<\/p>\n<p><\/p>\n<p>\u0160aj\u0101 pal\u012bdz\u0113s <strong>client.id<\/strong> gan producentam, gan pat\u0113r\u0113t\u0101jam. S\u0101kotn\u0113ji k\u0101 v\u0113rt\u012bbu var izmantot lietojumprogrammas nosaukumu, un liel\u0101kaj\u0101 da\u013c\u0101 gad\u012bjumu tas darbosies. Tom\u0113r situ\u0101cija, kad lietojumprogramm\u0101 tiek izmantoti vair\u0101ki pat\u0113r\u0113t\u0101ji un j\u016bs iev\u0113rojat vi\u0146iem vien\u0101du client.id, noved pie sekojo\u0161a br\u012bdin\u0101juma:<\/p>\n<p><\/p>\n<pre><code class=\"java\">org.apache.kafka.common.utils.AppInfoParser \u2014 Error registering AppInfo mbean javax.management.InstanceAlreadyExistsException: kafka.consumer:type=app-info,id=kafka.test-0<\/code><\/pre>\n<p><\/p>\n<p>Ja v\u0113laties izmantot JMX lietojumprogramm\u0101 ar Kafka, tas var rad\u012bt probl\u0113mas. \u0160aj\u0101 gad\u012bjum\u0101 vislab\u0101k ir izmantot k\u0101 v\u0113rt\u012bbu client.id kombin\u0101ciju no lietojumprogrammas nosaukuma un, piem\u0113ram, topika nosaukuma. M\u016bsu konfigur\u0101cijas rezult\u0101ts ir redzams komandas <strong>kafka-consumer-groups<\/strong> iz Confluent util\u012bt\u0113m:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"K\u0101 Kafka k\u013cuva par realit\u0101ti\" src=\"\/wp-content\/uploads\/2019\/12\/f807a93f36f262522a613161a549eb91.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tagad apl\u016bkosim garant\u0113t\u0101s zi\u0146ojumu pieg\u0101des scen\u0101riju. Kafka producentam ir parametrs <strong>acks<\/strong>, kas \u013cauj iestat\u012bt, p\u0113c cik daudz\u0101m apstiprin\u0101juma atbild\u0113m klastera l\u012bderim ir nepiecie\u0161ams uzskat\u012bt zi\u0146ojumu par veiksm\u012bgi ierakst\u012btu. \u0160is parametrs var pie\u0146emt sekojo\u0161as v\u0113rt\u012bbas:<\/p>\n<p><\/p>\n<ul>\n<li>0 \u2014 apstiprin\u0101jumi netiks uzskait\u012bti.<\/li>\n<li>1 \u2014 noklus\u0113juma parametrs, nepiecie\u0161ams apstiprin\u0101jums tikai no 1 replikas.<\/li>\n<li>\u22121 \u2014 nepiecie\u0161ama apstiprin\u0101\u0161ana no vis\u0101m sinhroniz\u0113taj\u0101m replika (klastera iestat\u012b\u0161ana <strong>min.insync.replicas<\/strong>).<\/li>\n<\/ul>\n<p><\/p>\n<p>No uzskait\u012btajiem v\u0113rt\u012bb\u0101m redzams, ka acks, kas ir \u22121, dod visstrong\u0101k\u0101s garantijas, ka zi\u0146ojums netiks zaud\u0113ts. <\/p>\n<p><\/p>\n<p>K\u0101 m\u0113s visi zin\u0101m, izplat\u012bt\u0101s sist\u0113mas ir neuzticamas. Lai pasarg\u0101tos no \u012bslaic\u012bg\u0101m k\u013c\u016bd\u0101m, Kafka Producer nodro\u0161ina parametru <strong>retries<\/strong>, kas \u013cauj noteikt atk\u0101rtot\u0101s nos\u016bt\u012b\u0161anas m\u0113\u0123in\u0101jumu skaitu laik\u0101 <strong>delivery.timeout.ms<\/strong>. T\u0101 k\u0101 parametrs retries p\u0113c noklus\u0113juma ir Integer.MAX_VALUE (2147483647), zi\u0146ojuma atk\u0101rtoto nos\u016bt\u012b\u0161anu var regul\u0113t, mainot tikai delivery.timeout.ms.<\/p>\n<p><\/p>\n<h2 id=\"dvizhemsya-k-exactly-once-delivery\">P\u0101rejam pie exactly once delivery<\/h2>\n<p><\/p>\n<p>Uzskait\u012btie iestat\u012bjumi \u013cauj m\u016bsu Producer pieg\u0101d\u0101t zi\u0146ojumus ar augstu garantiju. Tagad run\u0101sim par to, k\u0101 garant\u0113t, ka tikai viena zi\u0146ojuma kopija tiek ierakst\u012bta Kafka t\u0113mas br\u012bd\u012b? Visvienk\u0101r\u0161\u0101kaj\u0101 gad\u012bjum\u0101 \u0161im nol\u016bkam Producer j\u0101iestata parametrs <strong>enable.idempotence<\/strong> uz true. Idempotence garant\u0113, ka konkr\u0113t\u0101 partition tiek ierakst\u012bts tikai viens zi\u0146ojums. Priek\u0161noteikums idempotences iesl\u0113g\u0161anai ir v\u0113rt\u012bbas <strong>acks = all, retry &gt; 0, max.in.flight.requests.per.connection \u2264 5<\/strong>. Ja \u0161ie parametri nav noteikti izstr\u0101d\u0101t\u0101ja, tad autom\u0101tiski tiks iestat\u012btas iepriek\u0161 min\u0113t\u0101s v\u0113rt\u012bbas.<\/p>\n<p><\/p>\n<p>Kad idempotence ir iestat\u012bta, j\u0101pan\u0101k, lai identiski zi\u0146ojumi vienm\u0113r non\u0101ktu taj\u0101s pa\u0161\u0101s partition. To var izdar\u012bt, iestatot atsl\u0113gu un parametru partitioner.class uz Producer. S\u0101ksim ar atsl\u0113gu. Katram nos\u016bt\u012b\u0161anas gad\u012bjumam tai j\u0101b\u016bt vien\u0101dai. To ir viegli pan\u0101kt, izmantojot k\u0101du biznesa identifikatoru no ori\u0123in\u0101l\u0101 zi\u0146ojuma. Parametra partitioner.class noklus\u0113juma v\u0113rt\u012bba ir <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>. \u0160aj\u0101 strat\u0113\u0123ij\u0101 noklus\u0113juma partion\u0113\u0161ana tiek veikta \u0161\u0101di:<\/p>\n<p><\/p>\n<ul>\n<li>Ja partition tiek skaidri nor\u0101d\u012bta zi\u0146ojuma nos\u016bt\u012b\u0161anas laik\u0101, tad to izmantojam.<\/li>\n<li>Ja partition nav nor\u0101d\u012bta, bet ir nor\u0101d\u012bta atsl\u0113ga \u2014 izv\u0113lamies partition, pamatojoties uz atsl\u0113gas hash.<\/li>\n<li>Ja t\u0101 partition un atsl\u0113ga nav nor\u0101d\u012bti \u2014 izv\u0113lamies partition pa k\u0101rt\u0101m (round-robin).<\/li>\n<\/ul>\n<p><\/p>\n<p>Turkl\u0101t atsl\u0113gas un idempotent\u0101s nos\u016bt\u012b\u0161anas izmanto\u0161ana ar parametru <strong>max.in.flight.requests.per.connection = 1<\/strong> sniedz jums struktur\u0113tu zi\u0146ojumu apstr\u0101di uz Consumer. Atsevi\u0161\u0137i j\u0101atceras, ka, ja j\u016bsu klaster\u012b ir iestat\u012bta piek\u013cuves kontrole, tad jums b\u016bs nepiecie\u0161amas ties\u012bbas uz idempotenta ieraksta izveidi t\u0113mu.<\/p>\n<p><\/p>\n<p>Ja jums nejau\u0161i pietr\u016bkst iesp\u0113ju, ko sniedz idempotenta s\u016bt\u012b\u0161ana p\u0113c atsl\u0113gas, vai lo\u0123ika Producer pus\u0113 prasa saglab\u0101t datu konsekvenci starp da\u017e\u0101d\u0101m part\u012bcij\u0101m, tad var pal\u012bdz\u0113t transakcijas. Turkl\u0101t, izmantojot sec\u012bgas transakcijas, var nosac\u012bti sinhroniz\u0113t ierakstu Kafka, piem\u0113ram, ar ierakstu datu b\u0101z\u0113. Lai aktiviz\u0113tu transakciju nos\u016bt\u012b\u0161anu uz Producer, ir j\u0101nodro\u0161ina, ka tam ir idempotence, un papildus j\u0101nor\u0101da <strong>transactional.id<\/strong>. Ja j\u016bsu Kafka klaster\u012b ir iestat\u012bta piek\u013cuves kontrole, tad transakciju ierakstam, t\u0101pat k\u0101 idempotentajam, b\u016bs nepiecie\u0161amas rakst\u012b\u0161anas ties\u012bbas, kuras var tikt pie\u0161\u0137irtas saska\u0146\u0101 ar masku, izmantojot v\u0113rt\u012bbu, kas tiek saglab\u0101ta transactional.id.<\/p>\n<p><\/p>\n<p>Form\u0101li k\u0101 transakcijas identifikatoru var izmantot jebkuru virkni, piem\u0113ram, lietojumprogrammas nosaukumu. Bet, ja j\u016bs palai\u017eat vair\u0101kus viena lietojumprogrammas instanc\u0113 ar vien\u0101diem transactional.id, tad pirmais palaistais instances tiks aptur\u0113ts ar k\u013c\u016bdu, jo Kafka to uzskat\u012bs par zombiju procesu. <\/p>\n<p><\/p>\n<pre><code class=\"java\">org.apache.kafka.common.errors.ProducerFencedException: Producers m\u0113\u0123in\u0101ja veikt darb\u012bbu ar vecu epoku. Vai nu ir jaun\u0101ks producer ar to pa\u0161u transactionalId, vai ar\u012b producenta transakcija ir beigusies brokera izpild\u0113.<\/code><\/pre>\n<p><\/p>\n<p>Lai atrisin\u0101tu \u0161o probl\u0113mu, m\u0113s pievienojam lietojumprogrammas nosaukumam sufiksu, kas ir hostname, ko ieg\u016bst no vides main\u012bgajiem. <\/p>\n<p><\/p>\n<p>Producer ir iestat\u012bts, bet transakcijas uz Kafka p\u0101rvalda tikai zi\u0146ojuma redzam\u012bbu. Neatkar\u012bgi no transakcijas statusa zi\u0146ojums t\u016bl\u012bt\u0113j\u0101 laik\u0101 non\u0101k t\u0113ma, bet tam ir papildu sist\u0113mas atrib\u016bti.<\/p>\n<p><\/p>\n<p>Lai t\u0101di zi\u0146ojumi netiktu las\u012bti no Consumer agr\u0101k, tam ir j\u0101noregul\u0113 parametrs <strong>isolation.level<\/strong> uz v\u0113rt\u012bbu read_committed. \u0160\u0101ds Consumer var\u0113s las\u012bt netransakcijas zi\u0146ojumus k\u0101 agr\u0101k, bet transakcijas tikai p\u0113c apstiprin\u0101\u0161anas.<br \/>\nJa esat iestat\u012bjis visas iepriek\u0161 min\u0113t\u0101s konfigur\u0101cijas, tad esat iestat\u012bjis exactly once delivery. Apsveicam!<\/p>\n<p><\/p>\n<p>Bet ir v\u0113l viens nians, par kuru j\u0101dom\u0101. Transactional.id, ko m\u0113s iestat\u012bj\u0101m iepriek\u0161, paties\u012bb\u0101 ir transakcijas prefikss. Uz transakciju mened\u017eera tam tiek pievienots sec\u012bbas numurs. Ieg\u016bt\u0101 identifikators tiek izsniegts uz <strong>transactional.id.expiration.ms<\/strong>, kas tiek konfigur\u0113ts uz Kafka klastera un tam ir noklus\u0113juma v\u0113rt\u012bba \u201e7 dienas\u201d. Ja \u0161aj\u0101 laik\u0101 lietotne nav sa\u0146\u0113musi nevienu zi\u0146u, tad, m\u0113\u0123inot veikt n\u0101kamo dar\u012bjuma s\u016bt\u012bjumu, j\u016bs sa\u0146emsiet <strong>InvalidPidMappingException<\/strong>. P\u0113c tam dar\u012bjumu koordinators pie\u0161\u0137irs jaunu sec\u012bbas numuru n\u0101kamajam dar\u012bjumam. \u0160aj\u0101 gad\u012bjum\u0101 zi\u0146a var tikt zaud\u0113ta, ja InvalidPidMappingException netiks pareizi apstr\u0101d\u0101ta. <\/p>\n<p><\/p>\n<h2 id=\"vmesto-itogov\">T\u0101 viet\u0101, lai apkoptu rezult\u0101tus<\/h2>\n<p><\/p>\n<p>K\u0101 var paman\u012bt, nepietiek vienk\u0101r\u0161i nos\u016bt\u012bt zi\u0146as uz Kafka. Ir j\u0101izv\u0113las parametru kombin\u0101cija un j\u0101sagatavojas \u0101tr\u0101m izmai\u0146\u0101m. \u0160aj\u0101 rakst\u0101 es centos detaliz\u0113ti par\u0101d\u012bt precisely once delivery iestat\u012bjumus un aprakst\u012bt da\u017eas probl\u0113mas ar client.id un transactional.id konfigur\u0101ciju, ar kur\u0101m m\u0113s sask\u0101r\u0101mies. Zem\u0101k \u012bs\u0101 form\u0101 ir sniegtas Producer un Consumer iestat\u012bjumi.<\/p>\n<p><\/p>\n<p>Producer:<\/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 sec\u012bgai s\u016bt\u012b\u0161anai)<\/li>\n<li>transactional.id = ${application-name}-${hostname}<\/li>\n<\/ol>\n<p><\/p>\n<p>Consumer:<\/p>\n<p><\/p>\n<ol>\n<li>isolation.level = read_committed<\/li>\n<\/ol>\n<p><\/p>\n<p>Lai minimiz\u0113tu k\u013c\u016bdas n\u0101kotnes lietotn\u0113s, m\u0113s izveidoj\u0101m m\u016bsu apvalku virs spring konfigur\u0101cijas, kur\u0101 jau ir noteiktas v\u0113rt\u012bbas daudziem no uzskait\u012btajiem parametriem.<\/p>\n<p><\/p>\n<p>Un \u0161eit ir p\u0101ris materi\u0101lu patst\u0101v\u012bgai izp\u0113tei:<\/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 Precisely Once Delivery un Dar\u012bjumu Zi\u0146o\u0161ana<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kafka.apache.org\/documentation\/#configuration\">Iestat\u012bjumu apraksts <\/a><\/noindex><\/li>\n<\/ul>\n<p>Avots: <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.5 - 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\/lv\/blog\/administrirovanie\/kak-kafka-stala-bylyu\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"lv_LV\" \/>\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\/lv\/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\udd47K\u0101 Kafka k\u013cuva par realit\u0101ti | ProHoster","description":"Sveiki, Habr! Es str\u0101d\u0101ju Tinkoff komand\u0101.","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/kak-kafka-stala-bylyu","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"lv_LV","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\/lv\/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\/lv\/wp-json\/wp\/v2\/posts\/54431","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/comments?post=54431"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/54431\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=54431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=54431"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=54431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}