{"id":37849,"date":"2019-10-31T22:20:09","date_gmt":"2019-10-31T19:20:09","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kafka-i-mikroservisy-obzor\/"},"modified":"2019-10-31T22:20:09","modified_gmt":"2019-10-31T19:20:09","slug":"kafka-i-mikroservisy-obzor","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kafka-i-mikroservisy-obzor","title":{"rendered":"Kafka ja mikroteenused: \u00fclevaade","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Kafka ja mikroteenused: \u00fclevaade\" src=\"\/wp-content\/uploads\/2019\/09\/ab0534ad5d28b3c3aa03e4e0b2d3101b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tere k\u00f5igile. Selles artiklis r\u00e4\u00e4gin, miks valisime Avitos Kafka \u00fcheksa kuud tagasi ja mida see endast kujutab. Jagame \u00fche kasutusjuhtumi \u2013 s\u00f5numite vahendaja. L\u00f5petuseks arutame, milliseid eeliseid oleme saanud Kafka as a Service l\u00e4henemisviisi rakendamisest.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"problema\">Probleem<\/h1>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kafka ja mikroteenused: \u00fclevaade\" src=\"\/wp-content\/uploads\/2019\/09\/dfa5e231847cee67259da17867a11812.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Alustuseks natuke konteksti. M\u00f5ni aeg tagasi hakkasime liikuma eemale monoliitsest arhitektuurist ning praegu on Avitos juba mitusada erinevat teenust. Neil on oma andmehoidlad, tehnoloogiapinnad ja nad vastutavad oma osa \u00e4riloogikast. <\/p>\n<p><\/p>\n<p>\u00dcks probleem paljude teenustega on kommunikatsioon. Teenus A tahab sageli teada teavet, mida teenus B omab. Sellisel juhul p\u00f6\u00f6rdub teenus A teenuse B poole s\u00fcnkroonse API kaudu. Teenus B tahab teada, mis toimub teenustes G ja D, samas kui need omakorda on huvitatud teenustest A ja B. Mida rohkem on selliseid \u201ekurbuseid\u201c teenuseid, seda keerulisemaks muutuvad nendevahelised sidemed.<\/p>\n<p><\/p>\n<p>Selle juures v\u00f5ib teenus A igal hetkel saadamatuks j\u00e4\u00e4da. Ja mida teha siis, kui teenus B ja k\u00f5ik teised tema teenustele tuginevad teenused ei pruugi teenus A poole p\u00f6\u00f6rduda? Kui \u00e4riprotsessi t\u00e4itmiseks on vajalik teha ahel j\u00e4rjestikku s\u00fcnkroonseid kutsungeid, suureneb kogu operatsiooni eba\u00f5nnestumise t\u00f5en\u00e4osus veelgi (ja seda rohkem, mida pikem on see ahel). <\/p>\n<p><\/p>\n<h1 id=\"vybor-tehnologii\">Tehnoloogia valik<\/h1>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kafka ja mikroteenused: \u00fclevaade\" src=\"\/wp-content\/uploads\/2019\/09\/3acd7bcf3dded8093bdef6d627eb4071.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Okei, probleemid on arusaadavad. Need saab lahendada, luues keskse s\u00f5numite vahetuse s\u00fcsteemi teenuste vahel. N\u00fc\u00fcd peab igal teenusel olema lihtsalt teadmine sellest kontroll-s\u00fcsteemist. Lisaks peab see s\u00fcsteem olema veakindel ja horisontaalselt skaleeritav, samuti peab see katma helistamise ahelal esinevad h\u00e4dad edasilugemiseks. <\/p>\n<p><\/p>\n<p>Valime n\u00fc\u00fcd tehnoloogia, millele s\u00f5numite kohaletoimetamine p\u00f5hineb. Esiteks m\u00f5istame, mida me sellelt ootame:<\/p>\n<p><\/p>\n<ul>\n<li>s\u00f5numid teenuste vahel ei tohi kaduda;<\/li>\n<li>s\u00f5numid v\u00f5ivad olla duubeldatud;<\/li>\n<li>s\u00f5numid saab s\u00e4ilitada ja lugeda mitme p\u00e4eva jooksul (p\u00fcsiv vahem\u00e4lu);<\/li>\n<li>teenused v\u00f5ivad registreeruda huvipakkuvatele andmetele;<\/li>\n<li>mitmed teenused v\u00f5ivad lugeda samu andmeid;<\/li>\n<li>s\u00f5numid v\u00f5ivad sisaldada detailset, mahukat koormust (event-carried state transfer);<\/li>\n<li>m\u00f5nikord on vajalik s\u00f5numite j\u00e4rjekorra garantii.<\/li>\n<\/ul>\n<p><\/p>\n<p>Meile oli kriitiliselt oluline valida v\u00f5imalikult skaleeritav ja usaldusv\u00e4\u00e4rne s\u00fcsteem, mille l\u00e4bilaskev\u00f5ime on v\u00e4hemalt 100 000 s\u00f5numit m\u00f5ne kilobaidi sekundis.<\/p>\n<p><\/p>\n<p>Selles etapis \u00fctlesime h\u00fcvasti RabbitMQ-le (raske hoida stabiilsena k\u00f5rgetes rps-des), SkyTools PGQ-le (ebapiisavalt kiire ja halvasti skaleeritav) ja NSQ-le (mitte p\u00fcsiv). K\u00f5iki neid tehnoloogiaid kasutatakse meie ettev\u00f5ttes, kuid need ei sobinud antud \u00fclesande jaoks. <\/p>\n<p><\/p>\n<p>Seej\u00e4rel hakkasime vaatama uusi tehnoloogiaid \u2014 Apache Kafka, Apache Pulsar ja NATS Streaming.<\/p>\n<p><\/p>\n<p>Esimesena j\u00e4tsime k\u00f5rvale Pulsari. Otsustasime, et Kafka ja Pulsar on omavahel \u00fcsna sarnased lahendused. Ja kuigi Pulsar on suurte ettev\u00f5tete poolt katsetatud, uuem ning teoreetiliselt pakub madalamat latentsust, otsustasime nende kahe hulgast j\u00e4tta Kafka, kuna see on de facto standard selliste \u00fclesannete jaoks. T\u00f5en\u00e4oliselt p\u00f6\u00f6rdume Apache Pulsari juurde tulevikus tagasi. <\/p>\n<p><\/p>\n<p>Nii j\u00e4\u00e4vad meil alles kaks kandidaati: NATS Streaming ja Apache Kafka. Uurisime m\u00f5lemaid lahendusi \u00fcsna p\u00f5hjalikult, ja m\u00f5lemad sobisid meie \u00fclesande jaoks. Kuid l\u00f5puks pelgasime NATS Streaming'i suhtelist nooruslikkust (ja seda, et \u00fcks peamine arendaja, Tyler Treat, otsustas projektist lahkuda ja alustada oma \u2014 Liftbridge). Samuti ei pakkunud NATS Streaming'i klasterdamise re\u017eiim tugevat horisontaalset skaleerimist (t\u00f5en\u00e4oliselt ei ole see enam probleem p\u00e4rast partitsioneerimisre\u017eiimi lisamist 2017. aastal).<\/p>\n<p><\/p>\n<p>Sellegipoolest on NATS Streaming \u00e4ge tehnoloogia, kirjutatud Go keeles ja toetatud Cloud Native Computing Foundation'i poolt. Erinevalt Apache Kafka'st ei vaja see t\u00f6\u00f6ks Zookeeperit (v\u00f5imalik, <noindex><a rel=\"nofollow\" href=\"https:\/\/cwiki.apache.org\/confluence\/display\/KAFKA\/KIP-500%3A+Replace+ZooKeeper+with+a+Self-Managed+Metadata+Quorum\">et varsti v\u00f5ib sama \u00f6elda ka Kafka kohta<\/a><\/noindex>), kuna seespool rakendab see RAFTi. Samal ajal on NATS Streaming lihtsam haldamiseks. Me ei v\u00e4lista, et tulevikus hakkame sellele tehnoloogiale tagasi p\u00f6\u00f6rduma. <\/p>\n<p><\/p>\n<p>Kuid t\u00e4naseks on meie v\u00f5itjaks saanud Apache Kafka. Meie testid n\u00e4itasid, et see on piisavalt kiire (\u00fcle miljoni s\u00f5numi sekundis lugemisel ja kirjutamisel mahus 1 kilobait), piisavalt usaldusv\u00e4\u00e4rne, h\u00e4sti skaleeritav ja suurtelt ettev\u00f5tetelt testitud. Lisaks toetab Kafka v\u00e4hemalt mitmeid suuri kommertsettev\u00f5tteid (me n\u00e4iteks kasutame Confluent versiooni), samuti on Kafka'l arenenud \u00f6kos\u00fcsteem.<br \/>\n<br clear=\"left\">\n <\/p>\n<p><\/p>\n<h1 id=\"obzor-kafka\">Kafka \u00fclevaade<\/h1>\n<p><\/p>\n<p>Enne alustamist soovitan kohe suurep\u00e4rast raamatut \u2014 <em>\u201eKafka: The Definitive Guide\u201c<\/em> (on olemas ka vene t\u00f5lge, kuid terminid on veidi segased). Siit leiad teavet, mis on vajalik Kafka p\u00f5him\u00f5istmiseks ja isegi natuke rohkem. Apache\u2019i dokumendid ja Confluenti blogi on samuti h\u00e4sti kirjutatud ja kergesti loetavad. <\/p>\n<p><\/p>\n<p>Nii et vaatame, kuidas Kafka \u00fcles ehitatud on linnulennult. Kafka p\u00f5histruktuur koosneb producest, consumerist, brokerist ja zookeeperist.<\/p>\n<p><\/p>\n<h3 id=\"broker\">Broker<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kafka ja mikroteenused: \u00fclevaade\" src=\"\/wp-content\/uploads\/2019\/09\/82f34b5a1aadcdc07eef58eb5414b553.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teie andmete salvestamise eest vastutab broker (broker). K\u00f5ik andmed salvestatakse binaarses vormis, ja broker teab v\u00e4he sellest, mis nad endast kujutavad ja milline on nende struktuur. <\/p>\n<p><\/p>\n<p>Iga loogiline s\u00fcndmuste t\u00fc\u00fcp asub tavaliselt eraldi teemas (topic). N\u00e4iteks, reklaami loomise s\u00fcndmus v\u00f5ib minna teema item.created alla, samas kui selle muutmise s\u00fcndmus l\u00e4heb item.changed alla. Teemasid v\u00f5ib vaadelda s\u00fcndmuste klassifikaatoritena. Teema tasandil saab seadistada selliseid konfiguratsiooni parameetreid nagu: <\/p>\n<p><\/p>\n<ul>\n<li>salvestatavate andmete maht ja\/v\u00f5i nende vanus (retention.bytes, retention.ms); <\/li>\n<li>andmete \u00fclem\u00e4\u00e4rasuse tegur (replication factor);<\/li>\n<li>\u00fche s\u00f5numi maksimaalne suurus (max.message.bytes);<\/li>\n<li>minimaalne koosk\u00f5lastatud replikate arv, millega teema andmeid salvestada saab (min.insync.replicas);<\/li>\n<li>v\u00f5imalus viia l\u00e4bi failide \u00fcleminek mitte-s\u00fcnkroonse mahaj\u00e4\u00e4va replikaga, mille korral v\u00f5ib andmeid kaduda (unclean.leader.election.enable);<\/li>\n<li>ja veel palju muud (<noindex><a rel=\"nofollow\" href=\"https:\/\/kafka.apache.org\/documentation\/#topicconfigs\">https:\/\/kafka.apache.org\/documentation\/#topicconfigs<\/a><\/noindex>).<\/li>\n<\/ul>\n<p><\/p>\n<p>Igal teema osal on omakorda \u00fcks v\u00f5i rohkem partitsioone (partition). Just partitsioonidesse satuvad s\u00fcndmused. Kui klastris on rohkem kui \u00fcks broker, siis jaotatakse partitsioonid k\u00f5igi brokerite vahel \u00fchtlaselt (kui see on v\u00f5imalik), mis v\u00f5imaldab koormust salvestamise ja lugemise osas \u00fcheaegselt mitme brokera vahel jagada.<\/p>\n<p><\/p>\n<p>Kettal salvestatakse iga partitsiooni andmed failide segmentidena, mis vaikimisi on \u00fche gigabaidi suurused (seda kontrollib log.segment.bytes). Oluline t\u00e4helepanek \u2014 partitsioonidest andmete eemaldamine (retention'i k\u00e4ivitamisel) toimub just segmentide kaupa (ei saa eemaldada \u00fchte s\u00fcndmust partitsioonist, vaid saab eemaldada vaid terve segment, ja see peab olema mitteaktiivne).<\/p>\n<p><\/p>\n<h3 id=\"zookeeper\">Zookeeper<\/h3>\n<p><\/p>\n<p>Zookeeper t\u00e4idab metadata ladustamise ja koordinaatori rolli. Just tema suudab \u00f6elda, kas brookerid on elus (vaadata seda zookeeperi silmade l\u00e4bi saab zookeeper-shell k\u00e4suga <code>ls \/brokers\/ids<\/code>), milline broker on kontroller (<code>get \/controller<\/code>), kas on osad s\u00fcnkroneeritud olekuga oma koopiatega (<code>get \/brokers\/topics\/topic_name\/partitions\/partition_number\/state<\/code>). Samuti l\u00e4hevad producent ja tarbija esmalt zookeeperisse, et teada saada, millisel vahendajal millised teemad ja osad on salvestatud. Kui teema jaoks on m\u00e4\u00e4ratud replikatsiooni tegur suurem kui 1, n\u00e4itab zookeeper, millised osad on juhid (neisse tehakse kirjutamine ja neist loetakse). Kui vahendaja kukub, salvestatakse zookeeperisse teave uute juhtivate osade kohta (alates versioonist 1.1.0 as\u00fcnkroonselt, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.confluent.io\/blog\/apache-kafka-supports-200k-partitions-per-cluster\">ja see on oluline<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>Vanemates Kafka versioonides vastutas zookeeper ka offsetite salvestamise eest, kuid n\u00fc\u00fcd salvestatakse need spetsiaalsesse teemasse <code>__consumer_offsets<\/code> vahendajas (kuigi te saate endiselt kasutada zookeeperit nende eesm\u00e4rkide jaoks). <\/p>\n<p><\/p>\n<p>Lihtsaim viis, kuidas oma andmed k\u00f5rvitsaks muuta, on just zookeeperi info kaotamine. Sel juhul on v\u00e4ga keeruline m\u00f5ista, mida ja kust lugeda. <\/p>\n<p><\/p>\n<h3 id=\"producer\">Producer<\/h3>\n<p><\/p>\n<p>Producent on k\u00f5ige sagedamini teenus, mis kirjutab andmeid otseselt Apache Kafka. Producent valib teema, kuhu tema temaatilised s\u00f5numid salvestatakse, ja hakkab sinna teavet kirjutama. N\u00e4iteks v\u00f5ib producent olla kuulutuste teenus. Sellisel juhul saadab ta temaatilistesse teemadesse selliseid s\u00fcndmusi nagu 'kuulutus loodud', 'kuulutus uuendatud', 'kuulutus kustutatud' jne. Iga s\u00fcndmus esindab key-value paari.<\/p>\n<p><\/p>\n<p>Vaikimisi jaotatakse k\u00f5ik s\u00fcndmused teema osade vahel round-robin meetodil, kui v\u00f5tme ei ole m\u00e4\u00e4ratud (kaotades j\u00e4rjestuse), ja l\u00e4bi MurmurHash (v\u00f5ti), kui v\u00f5ti on olemas (j\u00e4rjestus \u00fche osa raames).<\/p>\n<p><\/p>\n<p>Siinkohal tasub kohe m\u00e4rkida, et Kafka tagab s\u00fcndmuste j\u00e4rjekorra ainult \u00fche osa raames. Kuid tegelikult ei ole see sageli probleem. N\u00e4iteks saab garanteeritult k\u00f5iki sama kuulutuse muudatusi lisada \u00fchte osasse (pidades seel\u00e4bi muutuste j\u00e4rjekorda kuulutuse raames). Samuti v\u00f5ib edastada j\u00e4rjestusnumbri \u00fches s\u00fcndmuse v\u00e4ljas.<\/p>\n<p><\/p>\n<h3 id=\"consumer\">Konsument<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kafka ja mikroteenused: \u00fclevaade\" src=\"\/wp-content\/uploads\/2019\/09\/1f69a53dc19bb6c587883b8754cde29f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tarbijad vastutavad andmete saamise eest Apache Kafka's. Kui naasta eelneva n\u00e4ite juurde, v\u00f5ib consumer'iks olla modereerimisteenus. See teenus liitub kuulutuste teenuse teemaga ning kui ilmub uus kuulutus, saab see selle ja anal\u00fc\u00fcsib vastavust teatud kehtestatud p\u00f5him\u00f5tetele.<\/p>\n<p><\/p>\n<p>Apache Kafka m\u00e4letab, milliseid viimaseid s\u00fcndmusi consumer on saanud (selleks kasutatakse teenuse teemat <code>__consumer__offsets<\/code>), tagades, et kui read on edukad, ei saa consumer kunagi sama s\u00f5numit kaks korda. Siiski, kui kasutada valikut enable.auto.commit = true ja usaldada consumer'i asukoha j\u00e4lgimine t\u00e4ielikult Kafka k\u00e4tte, v\u00f5ib <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.newrelic.com\/engineering\/kafka-consumer-config-auto-commit-data-loss\/\">andmeid kaotada<\/a><\/noindex>. Tootmisooditud koodis j\u00e4lgib consumer'i positsiooni enamasti k\u00e4sitsi (arendaja haldab hetke, millal peab toimuma loetud s\u00fcndmuse commit).<\/p>\n<p><\/p>\n<p>Juhtudel, kui \u00fcks consumer ei piisa (n\u00e4iteks kui uusi s\u00fcndmusi on v\u00e4ga palju), saab lisada veel m\u00f5ned consumer'id, seostades need omavahel consumer gruppi. Consumer grupp esindab loogiliselt sama consumer'it, kuid andmed jaotatakse gruppi kuuluvate osalejate vahel. See v\u00f5imaldab iga\u00fchel osalejatest v\u00f5tta oma osa s\u00f5numitest, suurendades seel\u00e4bi lugemise kiirus. <\/p>\n<p><\/p>\n<h1 id=\"rezultaty-testirovaniya\">Testimise tulemused<\/h1>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kafka ja mikroteenused: \u00fclevaade\" src=\"\/wp-content\/uploads\/2019\/09\/f7abe4bcf34fdb0d762c8a928bd873ee.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Siin ei hakka ma kirjutama palju selgitavaid tekste, lihtsalt jagan saadud tulemusi. Katsetamine toimus 3 f\u00fc\u00fcsilisel masinal (12 CPU, 384GB RAM, 15k SAS DISK, 10GBit\/s Net), brokerid ja zookeeper olid paigaldatud lxc. <\/p>\n<p><\/p>\n<p><strong>Tootlikkuse testimine<\/strong><\/p>\n<p><\/p>\n<p>Katsetamise k\u00e4igus saadi j\u00e4rgmised tulemused.<\/p>\n<p><\/p>\n<ul>\n<li>1KB suuruste s\u00f5numite kirjutamise kiirus 9 producer'iga on - 1300000 s\u00fcndmust sekundis.<\/li>\n<li>1KB suuruste s\u00f5numite lugemise kiirus 9 consumer'iga on - 1500000 s\u00fcndmust sekundis.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Vigasetootlikkuse katsetamine<\/strong><\/p>\n<p><\/p>\n<p>Katsetamise k\u00e4igus saadi j\u00e4rgmised tulemused (3 brokerit, 3 zookeeper'it).<\/p>\n<p><\/p>\n<ul>\n<li>\u00dche brokeri mittet\u00f6\u00f6tamine ei p\u00f5hjusta klastrite seiskumist v\u00f5i k\u00e4ttesaamatust. T\u00f6\u00f6 j\u00e4tkub tavap\u00e4raselt, kuid \u00fclej\u00e4\u00e4nud brokeritele langeb suurem koormus.<\/li>\n<li>Kaks Zookeeperi brokera ootamatut sulgemist kolmekesi klastris, kus min.isr = 2, toob kaasa klastrite k\u00e4ttesaamatuse kirjutamiseks, kuid lugemiseks j\u00e4\u00e4b see k\u00e4ttesaadavaks. Kui min.isr = 1, p\u00fcsib klaster k\u00e4ttesaadavana nii lugemiseks kui ka kirjutamiseks. Siiski on see re\u017eiim vastuolus andmete k\u00f5rge s\u00e4ilitamise n\u00f5udega.<\/li>\n<li>\u00dche Zookeeperi serveri ootamatu sulgemine ei l\u00f5peta ega tee klastrit k\u00e4ttesaamatuks. T\u00f6\u00f6 j\u00e4tkub tavare\u017eiimis.<\/li>\n<li>Kaks Zookeeperi serveri ootamatut sulgemist toob kaasa klastrite k\u00e4ttesaamatuse kuni v\u00e4hemalt \u00fche Zookeeperi serveri t\u00f6\u00f6 taastamiseni. See v\u00e4ide kehtib ka Zookeeperi kolme serveri klastrite kohta. Seet\u00f5ttu otsustati suurendada Zookeeperi klastrit viiele serverile, et suurendada talitlush\u00e4iret p\u00f5hjustavat vastupidavust. <br clear=\"left\">\n <\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"kafka-as-a-service\">Kafka teenusena<\/h1>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kafka ja mikroteenused: \u00fclevaade\" src=\"\/wp-content\/uploads\/2019\/09\/19b2356131203cefbadfd90a25ae9674.png\" style=\"display:block;margin: 0 auto;\" \/> <\/p>\n<p><\/p>\n<p>Oleme veendunud, et Kafka on suurep\u00e4rane tehnoloogia, mis lahendab meie v\u00e4ljakuulutatud \u00fclesande (s\u00f5numi vahendaja rakendamine). Sellegipoolest otsustasime keelata teenustel otse Kafka juurde p\u00e4\u00e4su ja sulgesime selle data-bus teenuse kaudu. Miks me seda tegime? Tegelikult on mitu p\u00f5hjust.<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Data-bus on endale v\u00f5tnud k\u00f5ik Kafka integreerimisega seotud \u00fclesanded (consumerite ja producerite rakendamine ja seadistamine, j\u00e4relevalve, h\u00e4ired, logimine, skaleerimine jne). Seega toimub integreerimine s\u00f5numite brokera juurde maksimaalselt lihtsalt. <\/p>\n<p>\n<\/li>\n<li>\n<p>Data-bus v\u00f5imaldas abstracteerida konkreetse keele v\u00f5i teegi Kafka kasutamiseks. <\/p>\n<p>\n<\/li>\n<li>\n<p>Data-bus v\u00f5imaldas teistel teenustel abstracteerida salvestuskihti. V\u00f5ib-olla vahetame kunagi Kafka Pulsari vastu, ja keegi ei m\u00e4rka isegi (k\u00f5ik teenused tunnevad ainult data-bus API-t).<\/p>\n<p>\n<\/li>\n<li>\n<p>Data-bus on vastutanud s\u00fcndmuste skeemide valideerimise eest.<\/p>\n<p>\n<\/li>\n<li>\n<p>Data-bus kaudu on rakendatud autentimine.<\/p>\n<p>\n<\/li>\n<li>\n<p>Data-bus'i kaudu saame ilma seisakuta ja m\u00e4rkamatult Kafka versioone uuendada, hallata keskelt producerite, consumerite, brokerite konfiguratsioone jne.<\/p>\n<p>\n<\/li>\n<li>\n<p>Data-bus on v\u00f5imaldanud lisada vajalikke funktsioone, mida Kafka-l ei ole (nt teema auditeerimine, klastris esinevate anomaaliate kontrollimine, DLQ loomine jne).<\/p>\n<p>\n<\/li>\n<li>\n<p>Data-bus v\u00f5imaldab rakendada failoveri k\u00f5igile teenustele keskelt.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Praegu on s\u00f5numite saatmise alustamiseks piisav, kui \u00fchendate oma teenuse koodis v\u00e4ikese teegi. See on k\u00f5ik. Teil on v\u00f5imalus kirjutada, lugeda ja skaleerida \u00fche koodirea abil. Kogu teostus on teie eest varjatud, n\u00e4htavale j\u00e4\u00e4b vaid paar k\u00e4epidet, nagu partii suurus. S\u00fcgaval teenuse data-bus all t\u00f5stab Kubernetes vajalikud producer\u2019ite ja consumer\u2019ite instantsid ja seab neile vajalikud konfiguratsioonid, kuid see k\u00f5ik on teie teenusele l\u00e4bipaistmatu. <\/p>\n<p><\/p>\n<p>Loomulikult ei ole h\u00f5bedast kuulit, ja sellisel l\u00e4henemisel on omad piirangud.<\/p>\n<p><\/p>\n<ul>\n<li>Data-bus tuleb ise toetada, erinevalt kolmandate osapoolte teekidest.<\/li>\n<li>Data-bus suurendab teenuste ja s\u00f5numite vahendaja vahelisi interaktsioone, mis toob kaasa j\u00f5udluse languse v\u00f5rreldes puhta Kafka-ga.<\/li>\n<li>Kaugel pole k\u00f5ike nii lihtsalt teenustelt varjata, me ei soovi dubleerida KSQL v\u00f5i Kafka Streams funktsionaalsust data-bus'is, seega tuleb m\u00f5nikord lubada teenustel \u00fchenduda otse. <\/li>\n<\/ul>\n<p><\/p>\n<p>Meie puhul \u00fcletasid plussid miinuseid ning otsus peita s\u00f5numite vahendaja eraldiseisva teenusena osutus \u00f5igeks. \u00dche aasta jooksul ei ole meil olnud olulisi avariisid ega probleeme.<\/p>\n<p><\/p>\n<p>P.S. Ait\u00e4h minu t\u00fcdruks\u00f5brale, Ekaterina Obalyaevale, selle artikli \u00e4gedate piltide eest. Kui need teile meeldisid, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.instagram.com\/o.k_o.k_\/\">siit<\/a><\/noindex> leidub veel rohkem illustratsioone.<\/p>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/465315\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u0432 \u0410\u0432\u0438\u0442\u043e \u0434\u0435\u0432\u044f\u0442\u044c \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043d\u0430\u0437\u0430\u0434 \u0432\u044b\u0431\u0440\u0430\u043b\u0438 Kafka, \u0438 \u0447\u0442\u043e \u043e\u043d\u0430 \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442. \u041f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043a\u0435\u0439\u0441\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u0418 \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u043f\u043b\u044e\u0441\u044b \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0445\u043e\u0434\u0430 Kafka as a Service. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043c\u044b [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28406,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37849","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=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.\" \/>\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\/kafka-i-mikroservisy-obzor\" \/>\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\udd47Kafka \u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b: \u043e\u0431\u0437\u043e\u0440 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kafka-i-mikroservisy-obzor\" \/>\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-31T19:20:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:20:09+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\udd47Kafka ja mikroteenused: \u00fclevaade | ProHoster","description":"Tere k\u00f5igile.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kafka-i-mikroservisy-obzor","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\udd47Kafka \u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b: \u043e\u0431\u0437\u043e\u0440 | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kafka-i-mikroservisy-obzor","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-31T19:20:09+00:00","article:modified_time":"2019-10-31T19:20:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37849","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-23 19:31:03","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:19:23","updated":"2026-01-23 19:31:03","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\/37849","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=37849"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/37849\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/28406"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=37849"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=37849"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=37849"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}