{"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 tegime Kafka Streams'ist jaotatud andmebaasi ja mis sellest v\u00e4lja tuli","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere, Habr!<\/p>\n<p>Tulet 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 tegime Kafka Streams&#039;ist jaotatud andmebaasi 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. Hiljuti ilmus artikkel, millega soovime teid tutvustada. Autor jagab oma kogemust, kuidas luua Kafka Streamsist hajutatud andmesalvestus. Head lugemist!<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex> <br \/>\nApache'i raamatukogu <noindex><a rel=\"nofollow\" href=\"https:\/\/kafka.apache.org\/documentation\/streams\/\">Kafka Streams<\/a><\/noindex> kasutatakse kogu maailmas ettev\u00f5tetes hajutatud voogude t\u00f6\u00f6tlemiseks Apache Kafka peal. \u00dcks selle raamistikku alahinnatud aspekte on see, et see v\u00f5imaldab salvestada kohaliku oleku, mis on toodetud voogude t\u00f6\u00f6tlemise alusel.<\/p>\n<p>Selles artiklis r\u00e4\u00e4gin, kuidas \u00f5nnestus meil selle v\u00f5imaluse kasulikult rakendada pilve rakenduste turvalisuse toote arendamisel. Kafka Streams'i abiga l\u00f5ime mikroteenused, millel on jagatud olek, kus iga\u00fches teenindatakse meid t\u00f5rke- ja k\u00f5rge k\u00e4ttesaadavuse allikana usaldusv\u00e4\u00e4rse teabe saamiseks objekti oleku kohta s\u00fcsteemis. Meie jaoks on see samm edasi nii usaldusv\u00e4\u00e4rsuse kui ka hoolduse mugavuse osas.<\/p>\n<p>Kui olete huvitatud alternatiivsest l\u00e4henemisest, mis v\u00f5imaldab kasutada \u00fchte kesksest andmebaasi objekti formaalse oleku toetamiseks \u2013 lugege edasi, see on huvitav\u2026 <\/p>\n<p><b>Miks me leidsime, et on aeg muuta oma l\u00e4henemisviise jagatud oleku k\u00e4sitlemisel <\/b><\/p>\n<p>Meil oli vaja toetada erinevate objektide olekut, tuginedes agentide aruannetele (n\u00e4iteks: kas veebileht oli r\u00fcnnaku alla sattunud)? Enne \u00fcleminekut Kafka Streamsile toetusid me sageli oleku haldamisel \u00fchele keskasandmebaasile (+ teenuse API). Sellel l\u00e4henemisel on oma puudused: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.piter.com\/collection\/all\/product\/vysokonagruzhennye-prilozheniya-programmirovanie-masshtabirovanie-podderzhka\">andmedintensiivsetes olukordades<\/a><\/noindex> talituse j\u00e4rjepidevuse ja s\u00fcnkroniseerimise tagamine muutub t\u00f5eliseks v\u00e4ljakutseks. Andmebaas v\u00f5ib j\u00f5uda kitsaskohaks v\u00f5i sattuda <noindex><a rel=\"nofollow\" href=\"https:\/\/stackoverflow.com\/questions\/9850336\/database-race-conditions\">v\u00f5istlusolukorda<\/a><\/noindex> ja kannatada ettearvamatuse all.<\/p>\n<p><img decoding=\"async\" alt=\"Mitte ainult t\u00f6\u00f6tlemine: Kuidas me tegime Kafka Streams&#039;ist jaotatud andmebaasi 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 olukord, kus jagatud olek oli enne \u00fcleminekut <br \/>\nKafka ja Kafka Streamsile: agendid edastavad oma arusaamad API kaudu, ajakohastatud olek arvutatakse keskse andmebaasi kaudu <\/i><\/p>\n<p><b>Tutvustame Kafka Streamsi \u2013 n\u00fc\u00fcd on lihtne luua mikroteenuseid jagatud olekuga <\/b><\/p>\n<p>Umbes aasta tagasi otsustasime p\u00f5hjalikult \u00fcle vaadata oma jagatud oleku t\u00f6\u00f6stsenaariumid, et m\u00f5ista selliseid probleeme. Otsustasime kohe proovida Kafka Streams'i \u2013 on teada, kui skaleeritav, suure k\u00e4ttesaadavuse ja t\u00f5rke suhtes vastupidav see on, samuti kui rikkalik on selle voogedastuse funktsionaalsus (sealhulgas oleku s\u00e4ilitamisega transformatsioonid). Just seda vajasime, r\u00e4\u00e4kimata, kui k\u00fcps ja usaldusv\u00e4\u00e4rne on Kafka s\u00f5numite vahetuss\u00fcsteem.<\/p>\n<p>Iga loodud oleku s\u00e4ilitamisega mikroteenus p\u00f5hines p\u00e4ris lihtsa topoloogiaga Kafka Streams'i instantsil. See koosnes 1) allikast 2) protsessorist koos p\u00fcsiva v\u00f5tme-v\u00e4\u00e4rtuse salvestusega 3) voost:<\/p>\n<p><img decoding=\"async\" alt=\"Mitte ainult t\u00f6\u00f6tlemine: Kuidas me tegime Kafka Streams&#039;ist jaotatud andmebaasi 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>Illustreerimine 2: vaikimisi topoloogia meie voogedastuse instantside jaoks mikroteenustes, kus on oleku s\u00e4ilitamine. Pane t\u00e4hele: siin on ka salvestus, kus hoitakse andmeid planeerimise kohta. <\/i><\/p>\n<p>Uue l\u00e4henemise kohaselt koostavad agentuurid s\u00f5numid, mis saadetakse algsesse teemasse, ja tarbijad \u2013 n\u00e4iteks meiliteenused \u2013 saavad arvutatud jagatud oleku voost (v\u00e4ljaanneteema) t\u00e4ielikult.<\/p>\n<p><img decoding=\"async\" alt=\"Mitte ainult t\u00f6\u00f6tlemine: Kuidas me tegime Kafka Streams&#039;ist jaotatud andmebaasi 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>Joonis 3: uus \u00fclesannete voog jagatud mikroteenuste stsenaariumi jaoks: 1) agent genereerib s\u00f5numi, mille kaudu j\u00f5uab see Kafka algsesse teemasse; 2) jagatud olekuga mikroteenus (kasutades Kafka Streams'i) t\u00f6\u00f6tleb selle ja salvestab arvutatud oleku Kafka l\u00f5ppteemasse; p\u00e4rast seda 3) tarbijad saavad uue oleku.<\/i><\/p>\n<p><b>Hei, see sisseehitatud v\u00f5tmete ja v\u00e4\u00e4rtuste hoidja on t\u00f5eliselt kasulik!<\/b><\/p>\n<p>Kuidas mainitud, sisaldab meie jagatud olekute topoloogia v\u00f5tmete ja v\u00e4\u00e4rtuste hoidjat. Oleme leidnud mitmeid kasutusv\u00f5imalusi, millest kaks on allpool kirjeldatud.<\/p>\n<p><i><b>Variant #1: v\u00f5tmete ja v\u00e4\u00e4rtuste hoidja kasutamine arvutustes.<\/b><\/i><\/p>\n<p>Meie esimene v\u00f5tmete ja v\u00e4\u00e4rtuste hoidla sisaldas abiteavet, mis oli vajalik meie arvutuste jaoks. N\u00e4iteks m\u00f5ningatel juhtudel m\u00e4\u00e4rati jagatud olek \u201eenamuse h\u00e4\u00e4lte\u201c p\u00f5him\u00f5tte alusel. Hoidlas sai hoida k\u00f5iki viimaseid agente raportite kohta mingist objektist. Saades seej\u00e4rel uue raporti \u00fchelt v\u00f5i teiselt agentilt, saime selle salvestada, v\u00e4lja t\u00f5mmata hoidlast teiste agentide raportid sama objekti kohta ning uued arvutused korrata.<br \/>\nAllpool on n\u00e4idatud, kuidas avasime p\u00e4\u00e4su v\u00f5tmete ja v\u00e4\u00e4rtuste hoidla t\u00f6\u00f6tlevasse protsessori meetodisse, et seej\u00e4rel saaks t\u00f6\u00f6delda uut s\u00f5numit.<\/p>\n<p><img decoding=\"async\" alt=\"Mitte ainult t\u00f6\u00f6tlemine: Kuidas me tegime Kafka Streams&#039;ist jaotatud andmebaasi 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>Illustratsioon 4: avame p\u00e4\u00e4su v\u00f5tmete ja v\u00e4\u00e4rtuste hoidla t\u00f6\u00f6tleva protsessori meetodi jaoks (p\u00e4rast seda peab iga stsenaarium, mis t\u00f6\u00f6tab jagatud olekuga, implementima meetodi <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 p\u00f5hij\u00e4rjestuse loomist oleme proovinud kirjutada RESTful CRUD API meie jagatud olekuga mikroteenuste jaoks. Soovisime, et oleks v\u00f5imalik v\u00e4lja tuua teatud v\u00f5i k\u00f5igi objektide olek ning samuti seada v\u00f5i eemaldada objekti olekut (see on kasulik serveri toe pakkumisel).<\/p>\n<p>Selleks, et toetada k\u00f5iki API Get State, igal korral, kui oli vaja uuesti arvutada olekut t\u00f6\u00f6tlemise k\u00e4igus, salvestasime selle pikaks ajaks sisseehitatud v\u00f5tme-v\u00e4\u00e4rtuse salvestusse. Sellisel juhul on piisavalt lihtne rakendada sellist API \u00fche Kafka Streams eksemplariga, nagu on n\u00e4idatud allpool olevas loendis.<\/p>\n<p><img decoding=\"async\" alt=\"Mitte ainult t\u00f6\u00f6tlemine: Kuidas me tegime Kafka Streams&#039;ist jaotatud andmebaasi 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>Illustratsioon 5: sisseehitatud v\u00f5tme-v\u00e4\u00e4rtuse salvestuse kasutamine objekti eelarvutatava oleku saamiseks. <\/i><\/p>\n<p>Objekti oleku v\u00e4rskendamine API kaudu on samuti lihtsalt rakendatav. P\u00f5him\u00f5tteliselt on sellega vaid vajalik luua Kafka tootja ja selle abil teha kirje, milles on uus olek. Nii tagatakse, et k\u00f5ik API kaudu genereeritud s\u00f5numid t\u00f6\u00f6deldakse t\u00e4pselt samamoodi nagu muude tootjate (nt agentide) poolt saadetud s\u00f5numid.<\/p>\n<p><img decoding=\"async\" alt=\"Mitte ainult t\u00f6\u00f6tlemine: Kuidas me tegime Kafka Streams&#039;ist jaotatud andmebaasi 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>Illustreerimine 6: objekti olek muutub kasutades Kafka produtsenti <\/i><\/p>\n<p><b>V\u00e4ike komplikatsioon: Kafka-l on palju partiisid<\/b><\/p>\n<p>Soovisime koormust, mis oli seotud t\u00f6\u00f6tlemisega, jaotada ning k\u00e4ttesaadavust parandada, pakkudes igale stsenaariumile klastrit mikroteenuseid jagatud olekuga. Seade sujus meil lihtsasti: 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. Me m\u00e4\u00e4rasime ka, et iga l\u00e4hteteema koosneb mitmest partiist, et igale instantsile saaks m\u00e4\u00e4rata partii alamkogumi.<\/p>\n<p>Mainin ka, et siin on tavaline teha olekute hoiukoha varukoopia, et n\u00e4iteks t\u00f5rke korral saaks selle koopia teisele instantsile \u00fcle kanda. Iga oleku hoiukoha jaoks Kafka Streams'is luuakse replikatsioonitopik muudatuste logiga (kus j\u00e4lgitakse kohalikke v\u00e4rskendusi). Seega tagab Kafka pidevalt oleku hoiukoha turvalisuse. Seet\u00f5ttu saab oleku hoiukohta kiiresti taastada teisel instantsil, kuhu vastavad partiid \u00fcleviivad. Meie testid n\u00e4itasid, et see toimub m\u00f5ne sekundi jooksul, isegi kui hoiukohta on salvestatud miljoneid kirjeid.<\/p>\n<p>\u00dcleminek \u00fche jagatud olekuga mikroteenuselt klastrile mikroteenuseid muudab Get State API rakendamise v\u00e4hem triviaalseks. Uues olukorras sisaldab iga mikroteenuse olekute salvestuses ainult osa tervikpildist (need objektid, mille v\u00f5tmed vastavad konkreetsele partitsioonile). Pidi v\u00e4lja selgitama, millises instantsis vajalik objekti olek asub, ja tegime seda voogude metaandmete alusel, nagu on n\u00e4idatud allpool:<\/p>\n<p><img decoding=\"async\" alt=\"Mitte ainult t\u00f6\u00f6tlemine: Kuidas me tegime Kafka Streams&#039;ist jaotatud andmebaasi 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 rakendati ka GET ALL API puhul.<\/i><\/p>\n<p><b>Peamised j\u00e4reldused<\/b><\/p>\n<p>Kafka Striimis olevad olekute salvestused v\u00f5ivad de facto toimida jaotatud andmebaasina, <\/p>\n<ul>\n<li>mis on pidevalt replitseeritav Kafka-s.<\/li>\n<li>Selle s\u00fcsteemi peal on lihtne \u00fcles ehitada CRUD API. <\/li>\n<li>Mitme partitsiooni t\u00f6\u00f6tlemine osutub veidi keerulisemaks. <\/li>\n<li>Samuti on v\u00f5imalik lisada \u00fcks v\u00f5i mitu olekute salvestust voogude topoloogiasse, et salvestada abiteavet. Sellist varianti v\u00f5ib kasutada:<\/li>\n<li>Pikaajalise andmete salvestamiseks, mida vajatakse voogude t\u00f6\u00f6tlemise arvutustes. <\/li>\n<li>Pikaandmeid, mis v\u00f5ivad olla kasulikud j\u00e4rgmise voogedastuse instantsi algseadmistes. <\/li>\n<li>palju muud\u2026<\/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 osutunud v\u00e4ga usaldusv\u00e4\u00e4rseks tootmisj\u00e4rgus (alates selle juurutamisest pole me praktiliselt kaotanud s\u00f5numeid), ja me oleme kindlad, et sellev\u00f5imalused ei piirdu sellega!<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.0.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 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!\" \/>\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.0.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 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!\" \/>\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 muudame Kafka Streams jaotatud andmebaasiks ja mis sellest v\u00e4lja tuli | ProHoster","description":"Tere, Habr! Tuletame meelde, et koos Kafka raamatuga avaldasime samuti huvitava teose Kafka Streams API raamatukogust. Praegu \u00f5pib kogukond alles selle v\u00f5imsa t\u00f6\u00f6riista v\u00f5imaluste piire. N\u00e4iteks ilmus hiljuti artikkel, millega soovime teid tuttavaks teha. Autor r\u00e4\u00e4gib oma kogemuste p\u00f5hjal, kuidas muuta Kafka Streams jaotatud andmehoidjaks. Head lugemist!","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 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!","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}]}}