{"id":32632,"date":"2019-10-31T21:48:08","date_gmt":"2019-10-31T18:48:08","guid":{"rendered":"https:\/\/prohoster.info\/blog\/ne-tolko-obrabotka-kak-my-sdelali-iz-kafka-streams-raspredelennuyu-bazu-dannyh-i-chto-iz-etogo-vyshlo\/"},"modified":"2019-10-31T21:48:08","modified_gmt":"2019-10-31T18:48:08","slug":"ne-tolko-obrabotka-kak-my-sdelali-iz-kafka-streams-raspredelennuyu-bazu-dannyh-i-chto-iz-etogo-vyshlo","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/ne-tolko-obrabotka-kak-my-sdelali-iz-kafka-streams-raspredelennuyu-bazu-dannyh-i-chto-iz-etogo-vyshlo","title":{"rendered":"Mitte ainult t\u00f6\u00f6tlemine: Kuidas me muutsime Kafka Streams jaotatud andmebaasiks ja mis sellest v\u00e4lja tuli","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere, Habr!<\/p>\n<p>Tuletame meelde, et koos raamatuga <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/product_by_id\/112863410\">Kafka<\/a><\/noindex> oleme v\u00e4lja andnud mitte v\u00e4hem huvitava teose raamatukogust <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/collection\/new\/product\/kafka-streams-v-deystvii-prilozheniya-i-mikroservisy-dlya-raboty-v-realnom-vremeni\">Kafka Streams API<\/a><\/noindex>. <\/p>\n<p><img decoding=\"async\" alt=\"Mitte ainult t\u00f6\u00f6tlemine: Kuidas me muutsime Kafka Streams jaotatud andmebaasiks ja mis sellest v\u00e4lja tuli\" src=\"\/wp-content\/uploads\/2019\/04\/7d16ba31ae06a96339a0755b62454f49.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKuni kogukond alles avastab selle v\u00f5imsa t\u00f6\u00f6riista v\u00f5imalusi. Nii ilmus hiljuti artikkel, millega tahame teid tutvustada. Autor jagab oma kogemusi, kuidas luua Kafka Streamsist jaotatud andmehoidla. Head lugemist!<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex> <br \/>\nApache raamatukogu <noindex><a rel=\"nofollow\" href=\"https:\/\/kafka.apache.org\/documentation\/streams\/\">Kafka Streams<\/a><\/noindex> kasutatakse \u00fcle terve maailma ettev\u00f5tetes jaotatud voogude t\u00f6\u00f6tlemiseks Apache Kafka peal. \u00dcks selle raamistikku alahinnatud aspekte on see, et see v\u00f5imaldab hoida kohalikku olekut, mis on loodud voogude t\u00f6\u00f6tlemise p\u00f5hjal.<\/p>\n<p>Selles artiklis r\u00e4\u00e4gin, kuidas suutsime oma ettev\u00f5ttes seda v\u00f5imalust kasulikult rakendada, arendades pilve rakenduste turvalisuse tooteid. Kafka Streams'i abil l\u00f5ime mikroteenuseid, millel on jagatud olek, millest iga\u00fchel on meie jaoks t\u00f5rkedeta ja k\u00f5rgelt kergesti saadaval teabeallikas s\u00fcsteemis olevate objektide oleku kohta. Meie jaoks on see edasiminek nii usaldusv\u00e4\u00e4rsuse kui ka hoolduse mugavuse osas.<\/p>\n<p>Kui teid huvitab alternatiivne l\u00e4henemine, mis v\u00f5imaldab kasutada \u00fchtset keskvabasid andmebaasi teie objektide formaalse oleku toetamiseks \u2013 lugege, see on huvitav... <\/p>\n<p><b>Miks me arvasime, et on aeg oma l\u00e4henemist jagatud olekuga muuta <\/b><\/p>\n<p>Meil oli vaja toetada erinevate objektide olekute haldamist, toetudes agentide aruannetele (n\u00e4iteks: kas saidi vastu tehti r\u00fcnnak?). Enne Kafka Streamsile \u00fcleminekut tuginesime sageli oleku haldamiseks \u00fchele kesksule andmebaasile (+ teenuste API). Selle l\u00e4henemise miinused on: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/collection\/all\/product\/vysokonagruzhennye-prilozheniya-programmirovanie-masshtabirovanie-podderzhka\">kuivaine intensiivsetes olukordades<\/a><\/noindex> \u00fchtsuse ja s\u00fcnkroniseerimise tagamine muutub t\u00f5eliseks v\u00e4ljakutseks. Andmebaas v\u00f5ib muutuda kitsaskohaks v\u00f5i sattuda <noindex><a rel=\"nofollow\" href=\"https:\/\/stackoverflow.com\/questions\/9850336\/database-race-conditions\">v\u00f5istluseseisundisse<\/a><\/noindex> ja kannatada ettearvamatuse all.<\/p>\n<p><img decoding=\"async\" alt=\"Mitte ainult t\u00f6\u00f6tlemine: Kuidas me muutsime Kafka Streams jaotatud andmebaasiks ja mis sellest v\u00e4lja tuli\" src=\"\/wp-content\/uploads\/2019\/04\/7fd4afa4d56578cf327e6391883933f1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Illustratsioon 1: t\u00fc\u00fcpiline stsenaarium jagatud olekuga, mis esines enne \u00fcleminekut <br \/>\nKafka ja Kafka Streamsile: agentide aruanded edastatakse API kaudu, uuendatud olek arvutatakse keskses andmebaasis <\/i><\/p>\n<p><b>Tutvuge Kafka Streams'iga \u2013 n\u00fc\u00fcd on lihtne luua mikroteenuseid jagatud olekuga <\/b><\/p>\n<p>Umbes aasta tagasi otsustasime t\u00f5siselt \u00fcle vaadata meie t\u00f6\u00f6skeemid jagatud olekuga, et tegeleda selliste probleemidega. Otsustasime kohe proovida Kafka Streams'i \u2013 on teada, kui skaleeritav, k\u00f5rge k\u00e4ttesaadavuse ja t\u00f5rketaluv s\u00fcsteem see on ning kui rikkalik on selle voogude funktsionaalsus (kaasa arvatud, oleku salvestamise v\u00f5imalused). Just seda me vajasime, r\u00e4\u00e4kimata sellest, kui k\u00fcps ja usaldusv\u00e4\u00e4rne on s\u00f5numite vahetamise s\u00fcsteem Kafka-s.<\/p>\n<p>Iga meie loodud oleku salvestamise mikroteenus ehitati soovitud Kafka Streams'i instantsi baasil, millel oli \u00fcsna lihtne topoloogia. See koosnes 1) allikast 2) t\u00f6\u00f6tlejast, millel on pidev v\u00f5tmete ja v\u00e4\u00e4rtuste salvestus 3) v\u00e4ljundist:<\/p>\n<p><img decoding=\"async\" alt=\"Mitte ainult t\u00f6\u00f6tlemine: Kuidas me muutsime Kafka Streams jaotatud andmebaasiks ja mis sellest v\u00e4lja tuli\" src=\"\/wp-content\/uploads\/2019\/04\/b6bfdbb87ef774dd914b0e4e60405ec5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Illustratsioon 2: meie voogude instantside vaikimisi topoloogia oleku salvestamise mikroteenuste jaoks. Pange t\u00e4hele: siin on ka salvestus, kus on s\u00e4ilitatud planeerimise metaandmed. <\/i><\/p>\n<p>Uue l\u00e4henemise korral koostavad agentuurid s\u00f5numeid, mis edastatakse algsesse teema, ja tarbijad \u2013 \u00fctleme, et postituseteenuse teenus \u2013 vastu v\u00f5tavad arvutatud jagatud oleku v\u00e4ljundi (v\u00e4ljunditeema) kaudu.<\/p>\n<p><img decoding=\"async\" alt=\"Mitte ainult t\u00f6\u00f6tlemine: Kuidas me muutsime Kafka Streams jaotatud andmebaasiks ja mis sellest v\u00e4lja tuli\" src=\"\/wp-content\/uploads\/2019\/04\/de60549d9cc1d5c0c473364d5236a339.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Illustratsioon 3: uus \u00fclesandev voog jagatud mikroteenuste stsenaariumi jaoks: 1) agent loob s\u00f5numi, mis saadetakse Kafka algsesse teema; 2) jagatud oleku mikroteenus (kasutades Kafka Streams'i) t\u00f6\u00f6tleb seda ja salvestab arvutatud oleku Kafka l\u00f5ppteemasse; seej\u00e4rel 3) tarbijad v\u00f5tavad uue oleku vastu.<\/i><\/p>\n<p><b>Hei, see sisseehitatud v\u00f5tmete ja v\u00e4\u00e4rtuste salvestus on t\u00f5eliselt kasulik!<\/b><\/p>\n<p>Nagu eespool mainitud, sisaldab meie jagatud olekuga topoloogia v\u00f5tmete ja v\u00e4\u00e4rtuste salvestust. Oleme leidnud mitu v\u00f5imalust selle kasutamiseks, ja kaks neist on allpool kirjeldatud.<\/p>\n<p><i><b>Variant #1: v\u00f5tmete ja v\u00e4\u00e4rtuste salvestuse kasutamine arvutustes<\/b><\/i><\/p>\n<p>Meie esimene v\u00f5tmete ja v\u00e4\u00e4rtuste hoidla sisaldas abiteavet, mida vajasime arvutamiseks. N\u00e4iteks m\u00e4\u00e4rati m\u00f5nel juhul jagatud olek \u201eenamush\u00e4\u00e4letuse\u201c printsiibi j\u00e4rgi. Hoidlas sai hoida k\u00f5iki viimaseid agentide aruandeid teatud objekti oleku kohta. Seej\u00e4rel, kui saime uue aruande m\u00f5nelt agentidelt, saime salvestada selle, t\u00f5mmata hoidlast v\u00e4lja k\u00f5ikide teiste agentide aruanded sama objekti oleku kohta ja arvutamist korrata.<br \/>\nAllpool, joonisel 4, on n\u00e4idatud, kuidas avasime juurdep\u00e4\u00e4su v\u00f5tmete ja v\u00e4\u00e4rtuste hoidla pro tervendava meetodi jaoks, et hiljem oleks v\u00f5imalik uut s\u00f5numit t\u00f6\u00f6delda.<\/p>\n<p><img decoding=\"async\" alt=\"Mitte ainult t\u00f6\u00f6tlemine: Kuidas me muutsime Kafka Streams jaotatud andmebaasiks ja mis sellest v\u00e4lja tuli\" src=\"\/wp-content\/uploads\/2019\/04\/8c11f9aac4c616b1ebf59d2fe5431ea0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Joonis 4: avame juurdep\u00e4\u00e4su v\u00f5tmete ja v\u00e4\u00e4rtuste hoidla pro tervendava meetodi jaoks (p\u00e4rast seda tuleb igas stsenaariumis, mis t\u00f6\u00f6tab jagatud olekuga, rakendada meetodit <code>doProcess<\/code>)<\/i><\/p>\n<p><i><b>Variant #2: CRUD API loomine Kafka Streams'i kohal<\/b><\/i><\/p>\n<p>P\u00e4rast meie baatsooside voo seadistamist hakkasime proovima kirjutada RESTful CRUD API meie jagatud olekuga mikroteenustele. Soovisime, et oleks v\u00f5imalik saada teatud v\u00f5i k\u00f5ikide objektide olekut ning seadistada v\u00f5i eemaldada objekti olek (see on kasulik serveripoolse toe s\u00e4ilitamiseks).<\/p>\n<p>Kuna k\u00f5ikide API Get State toetamiseks, kui meil oli vaja olekut uuesti arvutada t\u00f6\u00f6tlemise k\u00e4igus, salvestasime selle pikaks ajaks sisseehitatud v\u00f5tmete ja v\u00e4\u00e4rtuste hoidlasse. Sel juhul on piisav lihtsalt sellise API rakendamine \u00fche Kafka Streams'i eksemplari abil, nagu on n\u00e4idatud allolevas loendis:<\/p>\n<p><img decoding=\"async\" alt=\"Mitte ainult t\u00f6\u00f6tlemine: Kuidas me muutsime Kafka Streams jaotatud andmebaasiks ja mis sellest v\u00e4lja tuli\" src=\"\/wp-content\/uploads\/2019\/04\/614f601f7b4cf407c2b2a7826e377cbb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Joonis 5: sisseehitatud v\u00f5tmete ja v\u00e4\u00e4rtuste hoidla kasutamine objekti eelnevalt arvutatud oleku saamiseks <\/i><\/p>\n<p>Objekti oleku uuendamine API kaudu ei ole samuti keeruline. P\u00f5him\u00f5tteliselt peab selle jaoks lihtsalt looma Kafka producer'i ja selle abil tegema kirje, milles on uus olek. Nii tagatakse, et k\u00f5ik API kaudu genereeritud s\u00f5numid t\u00f6\u00f6deldakse t\u00e4pselt samamoodi nagu teised producentide (nt agendid) kaudu saadetud s\u00f5numid.<\/p>\n<p><img decoding=\"async\" alt=\"Mitte ainult t\u00f6\u00f6tlemine: Kuidas me muutsime Kafka Streams jaotatud andmebaasiks ja mis sellest v\u00e4lja tuli\" src=\"\/wp-content\/uploads\/2019\/04\/0b03bbafb3cf5a41164e9df85b766fcf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Joonis 6: objekti olekut saab seadistada Kafka produceri abil <\/i><\/p>\n<p><b>V\u00e4ike keerukus: Kafka'l on palju partitsioone<\/b><\/p>\n<p>Seej\u00e4rel tahtsime jaotada t\u00f6\u00f6tluse koormust ja parandada k\u00e4ttesaadavust, luues igale stsenaariumile klastrise mikroteenuste s\u00fcsteemi, millel on jagatud olek. Seadistamine oli meie jaoks lihtne: p\u00e4rast seda, kui konfigureerisime k\u00f5ik instantsid t\u00f6\u00f6tama sama rakenduse ID-ga (ja samade alglaadimise serveritega), tehti praktiliselt k\u00f5ik muu automaatselt. Samuti seadsime me, et iga sisenditeema koosneb mitmest partiisist, et igale instantsile saaks m\u00e4\u00e4rata partii alamhulga.<\/p>\n<p>Tahan mainida ka, et siin on tavaks teha olekuhoidla varukoopia, et n\u00e4iteks t\u00f5rke taastamisel see koopia teisele instantsile viia. Iga olekuhoidla jaoks Kafka Streamsis luuakse kopeeritav teema muudatuste logiga (kus j\u00e4lgitakse kohalikku v\u00e4rskendust). Nii tagab Kafka pidevalt olekuhoidla kaitse. Seega, kui m\u00f5ne instantsi Kafka Streamsis esineb t\u00f5rge, saab olekuhoidla kiiresti taastada teisel instantsil, kuhu liiguvad sobivad partiid. Meie testid n\u00e4itasid, et see toimub m\u00f5ne sekundi jooksul isegi siis, kui olekus on miljoneid kirjeid.<\/p>\n<p>Minna \u00fchest jagatud olekuga mikroteenusest mikroteenuste klastrisse, ei ole Get State API rakendamine enam nii triviaalne. Uues olukorras sisaldab iga mikroteenuse olekuhoidla ainult osa kogu pildist (need objektid, mille v\u00f5tmed seondusid konkreetsele partiile). Pidi m\u00e4\u00e4rama, millises instantsis oli vajalik objekti olek, ja tegime seda voogude metaandmete alusel, nagu on allpool n\u00e4idatud:<\/p>\n<p><img decoding=\"async\" alt=\"Mitte ainult t\u00f6\u00f6tlemine: Kuidas me muutsime Kafka Streams jaotatud andmebaasiks ja mis sellest v\u00e4lja tuli\" src=\"\/wp-content\/uploads\/2019\/04\/7182a396869f2f9692d895fc5084cccb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Illustratsioon 7: voogude metaandmete abil m\u00e4\u00e4rame, milliselt instantsilt k\u00fcsida vajaliku objekti olekut; sarnast l\u00e4henemist kasutati GET ALL API-s.<\/i><\/p>\n<p><b>Peamised j\u00e4reldused<\/b><\/p>\n<p>Olekuhoidlad Kafka Streamsis v\u00f5ivad de facto toimida jaotatud andmebaasina, <\/p>\n<ul>\n<li>mida kopeeritakse pidevalt Kafka<\/li>\n<li>Sellise s\u00fcsteemi peale on lihtne luua CRUD API <\/li>\n<li>Mitme partii t\u00f6\u00f6tlemine osutub veidi keerulisemaks <\/li>\n<li>Samuti on v\u00f5imalik lisada voogedastustopoloogiasse \u00fcks v\u00f5i mitu olekuhoidlat abiteabe salvestamiseks. Seda varianti saab kasutada:<\/li>\n<li>Pikaajaline andmete salvestamine, mis on vajalik voogedastuse t\u00f6\u00f6tlemisel arvutuste jaoks <\/li>\n<li>Pikaajaline andmete salvestamine, mis v\u00f5ib olla kasulik j\u00e4rgmise voogedastuse instantsi initsialiseerimisel <\/li>\n<li>paljude teiste jaoks...<\/li>\n<\/ul>\n<p>Nende ja teiste eeliste t\u00f5ttu sobib Kafka Streams suurep\u00e4raselt globaalse oleku toetamiseks sellises jaotatud s\u00fcsteemis nagu meie. Kafka Streams on tootmiskeskkonnas osutunud v\u00e4ga usaldusv\u00e4\u00e4rseks (alates selle juurutamisest pole me praktiliselt \u00fchtegi s\u00f5numit kaotanud) ja oleme kindlad, et sellega ei piirdub tema v\u00f5imekus!<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/piter\/blog\/449928\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u0441\u043b\u0435\u0434 \u0437\u0430 \u043a\u043d\u0438\u0433\u043e\u0439 \u043e Kafka \u043c\u044b \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0442\u0440\u0443\u0434 \u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Kafka Streams API. \u041f\u043e\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0449\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430. \u0422\u0430\u043a, \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0432\u044b\u0448\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u044f, \u0441 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u0430\u0441 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c. \u041d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u0440 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 Kafka Streams \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f! [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24423,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32632","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u0441\u043b\u0435\u0434 \u0437\u0430 \u043a\u043d\u0438\u0433\u043e\u0439 \u043e Kafka \u043c\u044b \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0442\u0440\u0443\u0434 \u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435\" \/>\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\/et\/blog\/administrirovanie\/ne-tolko-obrabotka-kak-my-sdelali-iz-kafka-streams-raspredelennuyu-bazu-dannyh-i-chto-iz-etogo-vyshlo\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430: \u041a\u0430\u043a \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0438\u0437 Kafka Streams \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u0447\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0448\u043b\u043e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u0441\u043b\u0435\u0434 \u0437\u0430 \u043a\u043d\u0438\u0433\u043e\u0439 \u043e Kafka \u043c\u044b \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0442\u0440\u0443\u0434 \u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/ne-tolko-obrabotka-kak-my-sdelali-iz-kafka-streams-raspredelennuyu-bazu-dannyh-i-chto-iz-etogo-vyshlo\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:48:08+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:48:08+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47 Mitte ainult t\u00f6\u00f6tlemine: Kuidas me muutsime Kafka Streams jaotatud andmebaasiks ja mida sellest v\u00e4lja tuli | ProHoster","description":"Tere, Habr! Tuletame meelde, et koos Kafka raamatuga k\u00e4ivitasime mitte v\u00e4hem huvitava teose raamatukogust","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/ne-tolko-obrabotka-kak-my-sdelali-iz-kafka-streams-raspredelennuyu-bazu-dannyh-i-chto-iz-etogo-vyshlo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430: \u041a\u0430\u043a \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0438\u0437 Kafka Streams \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u0447\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0448\u043b\u043e | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u0441\u043b\u0435\u0434 \u0437\u0430 \u043a\u043d\u0438\u0433\u043e\u0439 \u043e Kafka \u043c\u044b \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0442\u0440\u0443\u0434 \u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/ne-tolko-obrabotka-kak-my-sdelali-iz-kafka-streams-raspredelennuyu-bazu-dannyh-i-chto-iz-etogo-vyshlo","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:48:08+00:00","article:modified_time":"2019-10-31T18:48:08+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32632","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 11:51:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:55:24","updated":"2026-01-21 11:51:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/32632","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=32632"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/32632\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/24423"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=32632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=32632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=32632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}