{"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\/hu\/blog\/administrirovanie\/kafka-i-mikroservisy-obzor","title":{"rendered":"Kafka \u00e9s mikroszolg\u00e1ltat\u00e1sok: \u00e1ttekint\u00e9s","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Kafka \u00e9s mikroszolg\u00e1ltat\u00e1sok: \u00e1ttekint\u00e9s\" src=\"\/wp-content\/uploads\/2019\/09\/ab0534ad5d28b3c3aa03e4e0b2d3101b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hell\u00f3 mindenkinek. Ebben a cikkben elmondom, mi\u00e9rt v\u00e1lasztottuk a Kafka-t kilenc h\u00f3nappal ezel\u0151tt az Avit\u00f3n\u00e1l, \u00e9s mir\u0151l sz\u00f3l val\u00f3j\u00e1ban. Megosztok egy gyakorlati p\u00e9ld\u00e1t a haszn\u00e1lat\u00e1r\u00f3l \u2014 \u00fczenetk\u00f6zvet\u00edt\u0151. V\u00e9g\u00fcl pedig besz\u00e9lgess\u00fcnk arr\u00f3l, milyen el\u0151ny\u00f6ket szerezt\u00fcnk a Kafka as a Service megk\u00f6zel\u00edt\u00e9s alkalmaz\u00e1s\u00e1val.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"problema\">Probl\u00e9ma<\/h1>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kafka \u00e9s mikroszolg\u00e1ltat\u00e1sok: \u00e1ttekint\u00e9s\" src=\"\/wp-content\/uploads\/2019\/09\/dfa5e231847cee67259da17867a11812.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>El\u0151sz\u00f6r is, egy kis h\u00e1tt\u00e9r. N\u00e9h\u00e1ny id\u0151vel ezel\u0151tt elkezdt\u00fcnk elmozdulni a monolitikus architekt\u00far\u00e1t\u00f3l, \u00e9s most az Avit\u00f3n\u00e1l m\u00e1r t\u00f6bb sz\u00e1z k\u00fcl\u00f6nb\u00f6z\u0151 szolg\u00e1ltat\u00e1s m\u0171k\u00f6dik. Ezeknek saj\u00e1t t\u00e1rol\u00f3ik, saj\u00e1t technol\u00f3giai stackj\u00fck van, \u00e9s felel\u0151sek a saj\u00e1t \u00fczleti logik\u00e1juk egy r\u00e9sz\u00e9\u00e9rt. <\/p>\n<p><\/p>\n<p>Az egyik probl\u00e9ma a nagy sz\u00e1m\u00fa szolg\u00e1ltat\u00e1ssal a kommunik\u00e1ci\u00f3. A szolg\u00e1ltat\u00e1s A gyakran szeretne inform\u00e1ci\u00f3t k\u00e9rni, amelyet a szolg\u00e1ltat\u00e1s B birtokol. Ebben az esetben a szolg\u00e1ltat\u00e1s A a szinkron API-n kereszt\u00fcl fordul a szolg\u00e1ltat\u00e1s B-hez. A szolg\u00e1ltat\u00e1s C szeretn\u00e9 tudni, mi t\u00f6rt\u00e9nik a szolg\u00e1ltat\u00e1sok D \u00e9s E-n\u00e9l, a D \u00e9s E pedig \u00e9rdekl\u0151dik az A \u00e9s B szolg\u00e1ltat\u00e1sok ir\u00e1nt. Amikor sok ilyen \u201ek\u00edv\u00e1ncsi\u201d szolg\u00e1ltat\u00e1s van, a k\u00f6zt\u00fck l\u00e9v\u0151 kapcsolatok kusza gubancs\u00e1 v\u00e1lnak.<\/p>\n<p><\/p>\n<p>Ek\u00f6zben b\u00e1rmikor el\u0151fordulhat, hogy a szolg\u00e1ltat\u00e1s A nem el\u00e9rhet\u0151. Mi a teend\u0151 ebben az esetben a szolg\u00e1ltat\u00e1s B-nek \u00e9s minden egy\u00e9b, hozz\u00e1 kapcsol\u00f3d\u00f3 szolg\u00e1ltat\u00e1snak? Mi van, ha egy \u00fczleti m\u0171velet v\u00e9grehajt\u00e1s\u00e1hoz t\u00f6bb szinkron h\u00edv\u00e1s sorozata sz\u00fcks\u00e9ges, a teljes m\u0171velet kudarc\u00e1nak val\u00f3sz\u00edn\u0171s\u00e9ge m\u00e9g nagyobb\u00e1 v\u00e1lik (\u00e9s ez ann\u00e1l nagyobb, min\u00e9l hosszabb ez a l\u00e1nc). <\/p>\n<p><\/p>\n<h1 id=\"vybor-tehnologii\">Technol\u00f3gia v\u00e1laszt\u00e1s<\/h1>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kafka \u00e9s mikroszolg\u00e1ltat\u00e1sok: \u00e1ttekint\u00e9s\" src=\"\/wp-content\/uploads\/2019\/09\/3acd7bcf3dded8093bdef6d627eb4071.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ok\u00e9, a probl\u00e9m\u00e1k vil\u00e1gosak. Ezeket meg lehet sz\u00fcntetni, ha k\u00f6zpontos\u00edtott \u00fczenetv\u00e1lt\u00f3 rendszert hozunk l\u00e9tre a szolg\u00e1ltat\u00e1sok k\u00f6z\u00f6tt. Most m\u00e1r minden szolg\u00e1ltat\u00e1snak el\u00e9g, ha ismeri ezt az \u00fczenetv\u00e1lt\u00f3 rendszert. Ezenk\u00edv\u00fcl mag\u00e1nak a rendszernek is hib\u00e1tlanul m\u0171k\u00f6d\u0151nek \u00e9s v\u00edzszintesen sk\u00e1l\u00e1zhat\u00f3nak kell lennie, \u00e9s v\u00e9szhelyzet eset\u00e9n puffert kell t\u00e1rolnia a k\u00e9s\u0151bbi feldolgoz\u00e1s \u00e9rdek\u00e9ben. <\/p>\n<p><\/p>\n<p>Most v\u00e1lasszunk ki egy technol\u00f3gi\u00e1t, amely megval\u00f3s\u00edtja az \u00fczenetek k\u00e9zbes\u00edt\u00e9s\u00e9t. Ehhez el\u0151sz\u00f6r is \u00e9rts\u00fck meg, mit v\u00e1runk el t\u0151le:<\/p>\n<p><\/p>\n<ul>\n<li>az \u00fczeneteknek a szolg\u00e1ltat\u00e1sok k\u00f6z\u00f6tt nem szabad elveszni\u00fck;<\/li>\n<li>az \u00fczenetek megdupl\u00e1z\u00f3dhatnak;<\/li>\n<li>az \u00fczeneteket n\u00e9h\u00e1ny napig lehet t\u00e1rolni \u00e9s olvasni (perzisztens puffert);<\/li>\n<li>a szolg\u00e1ltat\u00e1sok feliratkozhatnak az \u00e9rdekes adataikra;<\/li>\n<li>t\u00f6bb szolg\u00e1ltat\u00e1s olvashatja ugyanazokat az adatokat;<\/li>\n<li>az \u00fczenetek r\u00e9szletes, jelent\u0151s payload-ot tartalmazhatnak (event-carried state transfer);<\/li>\n<li>n\u00e9ha sz\u00fcks\u00e9ges az \u00fczenetek sorrendj\u00e9nek garant\u00e1l\u00e1sa.<\/li>\n<\/ul>\n<p><\/p>\n<p>Sz\u00e1munkra kritikus volt, hogy a lehet\u0151 legsk\u00e1l\u00e1zhat\u00f3bb \u00e9s megb\u00edzhat\u00f3bb rendszert v\u00e1lasszuk, megemelkedett \u00e1tereszt\u0151k\u00e9pess\u00e9ggel (legal\u00e1bb 100 ezer \u00fczenet \u00e1ltal\u00e1ban n\u00e9h\u00e1ny kilob\u00e1jt m\u00e1sodpercenk\u00e9nt).<\/p>\n<p><\/p>\n<p>Ez\u00e9rt ezen a ponton elb\u00facs\u00faztunk a RabbitMQ-t\u00f3l (neh\u00e9z magas rps eset\u00e9n stabilan fenntartani), a PGQ-t\u00f3l a SkyTools-b\u00f3l (nem el\u00e9g gyors \u00e9s nem sk\u00e1l\u00e1zhat\u00f3 j\u00f3l) \u00e9s az NSQ-t\u00f3l (nem perzisztens). Mindezek a technol\u00f3gi\u00e1k megtal\u00e1lhat\u00f3k a c\u00e9g\u00fcnkben, de a megoldand\u00f3 feladathoz nem voltak megfelel\u0151ek. <\/p>\n<p><\/p>\n<p>Ezt k\u00f6vet\u0151en elkezdt\u00fck n\u00e9zni az \u00faj technol\u00f3gi\u00e1kat sz\u00e1munkra \u2014 Apache Kafka, Apache Pulsar \u00e9s NATS Streaming.<\/p>\n<p><\/p>\n<p>Els\u0151k\u00e9nt elvetett\u00fck a Pulsar-t. \u00dagy d\u00f6nt\u00f6tt\u00fcnk, hogy a Kafka \u00e9s a Pulsar viszonylag hasonl\u00f3 megold\u00e1sok. Annak ellen\u00e9re, hogy a Pulsar-t nagy c\u00e9gek tesztelt\u00e9k, \u00fajabb \u00e9s alacsonyabb k\u00e9sleltet\u00e9st k\u00edn\u00e1l (elm\u00e9letben), \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy ebb\u0151l a k\u00e9t megold\u00e1sb\u00f3l a Kafka marad a de facto standard ezen feladatokra. Val\u00f3sz\u00edn\u0171leg a j\u00f6v\u0151ben visszat\u00e9r\u00fcnk az Apache Pulsar-hoz. <\/p>\n<p><\/p>\n<p>\u00cdgy h\u00e1t k\u00e9t jel\u00f6lt maradt: NATS Streaming \u00e9s Apache Kafka. Mindk\u00e9t megold\u00e1st alaposan megvizsg\u00e1ltuk, \u00e9s mindkett\u0151 megfelelt a feladatnak. V\u00e9g\u00fcl azonban tartottunk a NATS Streaming viszonylagos fiatals\u00e1g\u00e1t\u00f3l (\u00e9s att\u00f3l, hogy az egyik f\u0151 fejleszt\u0151, Tyler Treat, \u00fagy d\u00f6nt\u00f6tt, hogy elhagyja a projektet \u00e9s saj\u00e1tot ind\u00edt \u2014 Liftbridge). Ezen k\u00edv\u00fcl az NATS Streaming Clustering m\u00f3dja nem biztos\u00edt er\u0151s horizont\u00e1lis sk\u00e1l\u00e1z\u00e1st (val\u00f3sz\u00edn\u0171leg m\u00e1r nem probl\u00e9ma, mivel a part\u00edcion\u00e1l\u00e1s m\u00f3d 2017-ben ker\u00fclt bevezet\u00e9sre).<\/p>\n<p><\/p>\n<p>Mindazon\u00e1ltal a NATS Streaming egy nagyszer\u0171 technol\u00f3gia, amely Go nyelven k\u00e9sz\u00fclt \u00e9s t\u00e1mogatja a Cloud Native Computing Foundation-t. Az Apache Kafka-val ellent\u00e9tben nem sz\u00fcks\u00e9ges a Zookeeper a m\u0171k\u00f6d\u00e9s\u00e9hez (lehet, hogy <noindex><a rel=\"nofollow\" href=\"https:\/\/cwiki.apache.org\/confluence\/display\/KAFKA\/KIP-500%3A+Replace+ZooKeeper+with+a+Self-Managed+Metadata+Quorum\">hamarosan a Kafka-r\u00f3l is ezt mondhatjuk<\/a><\/noindex>), mivel bel\u00fcl RAFT implement\u00e1ci\u00f3t haszn\u00e1l. Ezen k\u00edv\u00fcl a NATS Streaming egyszer\u0171bb az adminisztr\u00e1ci\u00f3 szempontj\u00e1b\u00f3l. Nem z\u00e1rjuk ki annak lehet\u0151s\u00e9g\u00e9t, hogy a j\u00f6v\u0151ben \u00fajra visszat\u00e9r\u00fcnk ehhez a technol\u00f3gi\u00e1hoz. <\/p>\n<p><\/p>\n<p>Mindazon\u00e1ltal napjainkban a gy\u0151ztes\u00fcnk az Apache Kafka lett. A tesztjeink sor\u00e1n el\u00e9g gyorsnak bizonyult (t\u00f6bb mint egymilli\u00f3 \u00fczenet m\u00e1sodpercenk\u00e9nt olvas\u00e1s \u00e9s \u00edr\u00e1s eset\u00e9n, egysz\u00f3val 1 kilob\u00e1jt terjedelm\u0171 \u00fczenetekkel), megb\u00edzhat\u00f3, j\u00f3l sk\u00e1l\u00e1zhat\u00f3 \u00e9s nagy c\u00e9gek \u00e1ltal bev\u00e1lt volt a piacon. Ezen k\u00edv\u00fcl a Kafka t\u00e1mogat minimum n\u00e9h\u00e1ny nagy kereskedelmi c\u00e9get (p\u00e9ld\u00e1ul mi a Confluent verzi\u00f3j\u00e1t haszn\u00e1ljuk), valamint a Kafka kiterjedt \u00f6kosziszt\u00e9m\u00e1val rendelkezik.<br \/>\n<br clear=\"left\">\n <\/p>\n<p><\/p>\n<h1 id=\"obzor-kafka\">A Kafka \u00e1ttekint\u00e9se<\/h1>\n<p><\/p>\n<p>Miel\u0151tt elkezden\u00e9nk, azonnal aj\u00e1nlok egy nagyszer\u0171 k\u00f6nyvet \u2014 <em>\u201eKafka: The Definitive Guide\u201d<\/em> (van orosz ford\u00edt\u00e1s is, de a kifejez\u00e9sek kicsit zavar\u00f3ak). Itt megtal\u00e1lhat\u00f3 az alapvet\u0151 Kafka meg\u00e9rt\u00e9s\u00e9hez sz\u00fcks\u00e9ges inform\u00e1ci\u00f3, \u00e9s m\u00e9g egy kicsivel t\u00f6bb. Az Apache dokument\u00e1ci\u00f3 \u00e9s a Confluent blogja szint\u00e9n j\u00f3l meg van \u00edrva \u00e9s k\u00f6nnyen olvashat\u00f3. <\/p>\n<p><\/p>\n<p>Teh\u00e1t n\u00e9zz\u00fck meg, hogyan n\u00e9z ki a Kafka mad\u00e1rt\u00e1vlatb\u00f3l. A Kafka alapvet\u0151 topol\u00f3gi\u00e1ja a producer, consumer, broker \u00e9s zookeeper.<\/p>\n<p><\/p>\n<h3 id=\"broker\">Broker<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kafka \u00e9s mikroszolg\u00e1ltat\u00e1sok: \u00e1ttekint\u00e9s\" src=\"\/wp-content\/uploads\/2019\/09\/82f34b5a1aadcdc07eef58eb5414b553.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az adatok t\u00e1rol\u00e1s\u00e1\u00e9rt a broker (broker) felel. Minden adat bin\u00e1ris form\u00e1ban van t\u00e1rolva, \u00e9s a broker nagyon keveset tud arr\u00f3l, hogy ezek mit is jelentenek \u00e9s mi a strukt\u00far\u00e1juk. <\/p>\n<p><\/p>\n<p>Minden logikai esem\u00e9nyt\u00edpus \u00e1ltal\u00e1ban a saj\u00e1t k\u00fcl\u00f6n topikj\u00e1ban (topic) tal\u00e1lhat\u00f3. P\u00e9ld\u00e1ul a hirdet\u00e9s l\u00e9trehoz\u00e1s\u00e1nak esem\u00e9nye az item.created topikba, m\u00edg a m\u00f3dos\u00edt\u00e1s esem\u00e9nye az item.changed topikba ker\u00fcl. A topikokk\u00e9nt oszt\u00e1lyozhat\u00f3k az esem\u00e9nyek. A topik szintj\u00e9n olyan konfigur\u00e1ci\u00f3s param\u00e9tereket lehet be\u00e1ll\u00edtani, mint: <\/p>\n<p><\/p>\n<ul>\n<li>a t\u00e1rolt adatok mennyis\u00e9ge \u00e9s\/vagy \u00e9letkoruk (retention.bytes, retention.ms); <\/li>\n<li>az adatok redundanci\u00e1j\u00e1nak m\u00e9rt\u00e9ke (replication factor);<\/li>\n<li>az egy \u00fczenetre vonatkoz\u00f3 maxim\u00e1lis m\u00e9ret (max.message.bytes);<\/li>\n<li>a minim\u00e1lis sz\u00e1ma olyan szinkroniz\u00e1lt replik\u00e1knak, amelyekn\u00e9l adatokat lehet \u00edrni a topikba (min.insync.replicas);<\/li>\n<li>a lehet\u0151s\u00e9g, hogy a nem szinkroniz\u00e1lt, elmarad\u00f3 replik\u00e1ra t\u00f6rt\u00e9n\u0151 failover eset\u00e9n potenci\u00e1lis adatveszt\u00e9ssel (unclean.leader.election.enable);<\/li>\n<li>\u00e9s m\u00e9g sok m\u00e1s (<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>Viszont minden topik egy vagy t\u00f6bb part\u00edci\u00f3ra (partition) van felosztva. Az esem\u00e9nyek v\u00e9g\u00fcl a part\u00edci\u00f3kba ker\u00fclnek. Ha a klaszterben t\u00f6bb mint egy broker van, a part\u00edci\u00f3kat a broker k\u00f6z\u00f6tt egyenletesen osztj\u00e1k el (amennyire csak lehets\u00e9ges), ami lehet\u0151v\u00e9 teszi, hogy a terhel\u00e9st egyszerre t\u00f6bb brokerre sk\u00e1l\u00e1zzuk \u00edr\u00e1s \u00e9s olvas\u00e1s szempontj\u00e1b\u00f3l egy topik tekintet\u00e9ben.<\/p>\n<p><\/p>\n<p>A lemezen az adatok minden part\u00edci\u00f3hoz szegmensf\u00e1jlk\u00e9nt t\u00e1rol\u00f3dnak, alap\u00e9rtelmez\u00e9s szerint egy gigabyte m\u00e9retben (log.segment.bytes vez\u00e9rli). Fontos jellemz\u0151, hogy az adatok t\u00f6rl\u00e9se a part\u00edci\u00f3kb\u00f3l (Retention megt\u00f6rt\u00e9n\u00e9se eset\u00e9n) szegmensek szerint t\u00f6rt\u00e9nik (nem lehet egy esem\u00e9nyt t\u00f6r\u00f6lni a part\u00edci\u00f3b\u00f3l, csak egy teljes szegmenst, m\u00e9ghozz\u00e1 csak az inakt\u00edvak k\u00f6z\u00fcl).<\/p>\n<p><\/p>\n<h3 id=\"zookeeper\">Zookeeper<\/h3>\n<p><\/p>\n<p>A Zookeeper a metadat t\u00e1rol\u00f3k\u00e9nt \u00e9s koordin\u00e1tork\u00e9nt funkcion\u00e1l. \u0150 az, aki meg tudja mondani, hogy a br\u00f3kerek \u00e9lnek-e (azt a zookeeper szempontj\u00e1b\u00f3l \u00edgy n\u00e9zheti meg: zookeeper-shell paranccsal <code>ls \/brokers\/ids<\/code>), melyik broker a vez\u00e9rl\u0151 (<code>get \/controller<\/code>), vajon a part\u00edci\u00f3k szinkronban vannak-e a replik\u00e1ikkal (<code>get \/brokers\/topics\/topic_name\/partitions\/partition_number\/state<\/code>). Ezen k\u00edv\u00fcl a producer \u00e9s a consumer els\u0151k\u00e9nt a zookeeperhez fordul, hogy megtudja, melyik broker hol t\u00e1rolja a t\u00e9m\u00e1kra \u00e9s part\u00edci\u00f3kra vonatkoz\u00f3 inform\u00e1ci\u00f3kat. Amikor a t\u00e9m\u00e1hoz a replication factor \u00e9rt\u00e9ke 1-n\u00e9l nagyobb, a zookeeper megadja, hogy melyik part\u00edci\u00f3k a vezet\u0151k (itt t\u00f6rt\u00e9nik a felv\u00e9tel \u00e9s innen olvasnak is). Ha a broker le\u00e1ll, a zookeeper t\u00e1rolja az \u00faj vezet\u0151 part\u00edci\u00f3k inform\u00e1ci\u00f3it (1.1.0 verzi\u00f3t\u00f3l aszinkron m\u00f3don, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.confluent.io\/blog\/apache-kafka-supports-200k-partitions-per-cluster\">\u00e9s ez fontos<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>A r\u00e9gebbi Kafka verzi\u00f3kban a zookeeper felelt az offsetek t\u00e1rol\u00e1s\u00e1\u00e9rt is, de most m\u00e1r ezt egy speci\u00e1lis t\u00e9m\u00e1ban t\u00e1rolj\u00e1k <code>__consumer_offsets<\/code> a broker-en (b\u00e1r tov\u00e1bbra is haszn\u00e1lhatja a zookeeper-t ezekre a c\u00e9lokra). <\/p>\n<p><\/p>\n<p>A legegyszer\u0171bb m\u00f3dja, hogy az adatait t\u00f6k\u00f6kk\u00e9 v\u00e1ltoztassa, \u00e9ppen a zookeeper inform\u00e1ci\u00f3inak elveszt\u00e9se. Ilyen esetben neh\u00e9z lesz meg\u00e9rteni, hogy mit \u00e9s honnan kell olvasni. <\/p>\n<p><\/p>\n<h3 id=\"producer\">Producer<\/h3>\n<p><\/p>\n<p>A Producer \u00e1ltal\u00e1ban az a szolg\u00e1ltat\u00e1s, amely k\u00f6zvetlen\u00fcl az adatokat r\u00f6gz\u00edti az Apache Kafka-ba. A producer kiv\u00e1laszt egy t\u00e9m\u00e1t, ahol a tematikus \u00fczeneteit t\u00e1rolni fogja, \u00e9s elkezdi r\u00f6gz\u00edteni az inform\u00e1ci\u00f3kat. P\u00e9ld\u00e1ul egy hirdet\u00e9si szolg\u00e1ltat\u00e1s lehet producer. Ebben az esetben a tematikus t\u00e9m\u00e1kba olyan esem\u00e9nyeket fog k\u00fcldeni, mint \u201ehirdet\u00e9s l\u00e9trehozva\u201d, \u201ehirdet\u00e9s friss\u00edtve\u201d, \u201ehirdet\u00e9s t\u00f6r\u00f6lve\u201d stb. Minden esem\u00e9ny egy kulcs-\u00e9rt\u00e9k p\u00e1rt k\u00e9pvisel.<\/p>\n<p><\/p>\n<p>Alap\u00e9rtelmez\u00e9s szerint minden esem\u00e9nyt round-robin m\u00f3dszerrel osztanak el a t\u00e9m\u00e1k part\u00edci\u00f3i k\u00f6z\u00f6tt, ha a kulcs nincs megadva (kialak\u00edtva a sorrend elveszt\u00e9s\u00e9vel), \u00e9s MurmurHash (kulcs) m\u00f3dszerrel, ha a kulcs meg van adva (sorrend meg\u0151rz\u00e9se egy part\u00edci\u00f3n bel\u00fcl).<\/p>\n<p><\/p>\n<p>Itt azonnal meg kell jegyezni, hogy a Kafka csak egy part\u00edci\u00f3n bel\u00fcl garant\u00e1lja az esem\u00e9nyek sorrendj\u00e9t. De val\u00f3j\u00e1ban ez gyakran nem jelent probl\u00e9m\u00e1t. P\u00e9ld\u00e1ul minden v\u00e1ltoz\u00e1st biztosan egy part\u00edci\u00f3ba lehet hozz\u00e1adni ugyanazon hirdet\u00e9s keretein bel\u00fcl (\u00edgy meg\u0151rizve a v\u00e1ltoz\u00e1sok sorrendj\u00e9t a hirdet\u00e9sen bel\u00fcl). Azt is lehet\u0151v\u00e9 lehet tenni, hogy egy sorsz\u00e1m ker\u00fclj\u00f6n a mez\u0151k egyik\u00e9be az esem\u00e9nyben.<\/p>\n<p><\/p>\n<h3 id=\"consumer\">Consumer<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kafka \u00e9s mikroszolg\u00e1ltat\u00e1sok: \u00e1ttekint\u00e9s\" src=\"\/wp-content\/uploads\/2019\/09\/1f69a53dc19bb6c587883b8754cde29f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A vev\u0151 felel\u0151s az adatok beszerz\u00e9s\u00e9\u00e9rt az Apache Kafka-b\u00f3l. Ha visszat\u00e9r\u00fcnk a fenti p\u00e9ld\u00e1hoz, a vev\u0151 lehet p\u00e9ld\u00e1ul egy moder\u00e1l\u00f3 szolg\u00e1ltat\u00e1s. Ez a szolg\u00e1ltat\u00e1s fel lesz iratkozva a hirdet\u00e9si szolg\u00e1ltat\u00e1s t\u00e9m\u00e1j\u00e1ra, \u00e9s amikor \u00faj hirdet\u00e9s jelenik meg, megkapja \u00e9s elemzi azt bizonyos el\u0151re meghat\u00e1rozott politik\u00e1k szerint.<\/p>\n<p><\/p>\n<p>Az Apache Kafka megjegyzi, hogy a vev\u0151 milyen legutols\u00f3 esem\u00e9nyeket kapott (ehhez egy seg\u00e9d t\u00e9m\u00e1t haszn\u00e1l <code>__consumer__offsets<\/code>), \u00edgy garant\u00e1lva, hogy a sikeres olvas\u00e1s sor\u00e1n a vev\u0151 nem kap ugyanazt az \u00fczenetet k\u00e9tszer. Ugyanakkor, ha az enable.auto.commit = true opci\u00f3t haszn\u00e1ljuk, \u00e9s teljesen r\u00e1b\u00edzzuk a vev\u0151 poz\u00edci\u00f3j\u00e1nak nyomon k\u00f6vet\u00e9s\u00e9t a Kafka-ra, akkor lehet <noindex><a rel=\"nofollow\" href=\"https:\/\/blog.newrelic.com\/engineering\/kafka-consumer-config-auto-commit-data-loss\/\">adatveszt\u00e9s<\/a><\/noindex>. A termel\u00e9si k\u00f3d eset\u00e9ben a vev\u0151 poz\u00edci\u00f3j\u00e1t gyakran manu\u00e1lisan ellen\u0151rzik (a fejleszt\u0151 kezeli azt az id\u0151pontot, amikor a beolvasott esem\u00e9ny k\u00f6telez\u0151en el kell k\u00f6telez\u0151dnie).<\/p>\n<p><\/p>\n<p>Azokban az esetekben, amikor egy vev\u0151 nem elegend\u0151 (p\u00e9ld\u00e1ul ha az \u00faj esem\u00e9nyek folyamatosan nagy mennyis\u00e9gben \u00e9rkeznek), tov\u00e1bbi vev\u0151ket adhatunk hozz\u00e1, \u00f6sszekapcsolva \u0151ket egy vev\u0151 csoportban. A vev\u0151 csoport logikailag egy ugyanilyen vev\u0151t k\u00e9pvisel, de az adatok r\u00e9szesed\u00e9s\u00e9t a csoport tagjai k\u00f6z\u00f6tt osztja el. Ez lehet\u0151v\u00e9 teszi, hogy minden r\u00e9sztvev\u0151 a saj\u00e1t \u00fczenetar\u00e1ny\u00e1t vegye, ez\u00e1ltal n\u00f6velve az olvas\u00e1si sebess\u00e9get. <\/p>\n<p><\/p>\n<h1 id=\"rezultaty-testirovaniya\">Tesztel\u00e9si eredm\u00e9nyek<\/h1>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kafka \u00e9s mikroszolg\u00e1ltat\u00e1sok: \u00e1ttekint\u00e9s\" src=\"\/wp-content\/uploads\/2019\/09\/f7abe4bcf34fdb0d762c8a928bd873ee.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Itt nem k\u00edv\u00e1nok sok magyar\u00e1z\u00f3 sz\u00f6veget \u00edrni, csak megosztom az eredm\u00e9nyeket. A tesztel\u00e9sre 3 fizikai g\u00e9pen ker\u00fclt sor (12 CPU, 384 GB RAM, 15k SAS DISK, 10 GBit\/s Net), a broker-ek \u00e9s a zookeeper lxc-ben lettek telep\u00edtve. <\/p>\n<p><\/p>\n<p><strong>Teljes\u00edtm\u00e9nytesztel\u00e9s<\/strong><\/p>\n<p><\/p>\n<p>A tesztel\u00e9s sor\u00e1n a k\u00f6vetkez\u0151 eredm\u00e9nyek sz\u00fclettek.<\/p>\n<p><\/p>\n<ul>\n<li>1 KB m\u00e9ret\u0171 \u00fczenetek \u00edr\u00e1si sebess\u00e9ge 9 producer \u00e1ltal egy\u00fctt \u2014 1300000 esem\u00e9ny m\u00e1sodpercenk\u00e9nt.<\/li>\n<li>1 KB m\u00e9ret\u0171 \u00fczenetek olvas\u00e1si sebess\u00e9ge 9 consumer \u00e1ltal egy\u00fctt \u2014 1500000 esem\u00e9ny m\u00e1sodpercenk\u00e9nt.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Hibalehet\u0151s\u00e9g-tesztel\u00e9s<\/strong><\/p>\n<p><\/p>\n<p>A tesztel\u00e9s sor\u00e1n a k\u00f6vetkez\u0151 eredm\u00e9nyek sz\u00fclettek (3 broker, 3 zookeeper).<\/p>\n<p><\/p>\n<ul>\n<li>Egy broker v\u00e1ratlan le\u00e1ll\u00e1sa nem vezet a klaszter le\u00e1ll\u00edt\u00e1s\u00e1hoz vagy el\u00e9rhetetlens\u00e9g\u00e9hez. A munka zavartalanul folytat\u00f3dik, de a megmaradt broker-ekre nagyobb terhel\u00e9s h\u00e1rul.<\/li>\n<li>K\u00e9t broker v\u00e1ratlan le\u00e1ll\u00e1sa h\u00e1rom brokerb\u0151l \u00e1ll\u00f3 klaszter eset\u00e9n \u00e9s min.isr = 2 a klaszter \u00edr\u00e1sa szempontj\u00e1b\u00f3l el\u00e9rhetetlenn\u00e9 v\u00e1lik, de olvas\u00e1sra el\u00e9rhet\u0151 marad. Ha viszont min.isr = 1, a klaszter \u00edr\u00e1sra \u00e9s olvas\u00e1sra is tov\u00e1bbra is el\u00e9rhet\u0151. Ez a m\u00f3d azonban ellentmond a magas adatv\u00e9delem k\u00f6vetelm\u00e9ny\u00e9nek.<\/li>\n<li>A Zookeeper egyik szerver\u00e9nek v\u00e1ratlan le\u00e1ll\u00e1sa nem vezet a klaszter le\u00e1ll\u00edt\u00e1s\u00e1hoz vagy el\u00e9rhetetlens\u00e9g\u00e9hez. A m\u0171k\u00f6d\u00e9s zavartalanul folytat\u00f3dik.<\/li>\n<li>K\u00e9t Zookeeper szerver v\u00e1ratlan le\u00e1ll\u00e1sa a klaszter el\u00e9rhetetlens\u00e9g\u00e9t eredm\u00e9nyezi, am\u00edg legal\u00e1bb az egyik Zookeeper szerver m\u0171k\u00f6d\u00e9se helyre nem \u00e1ll. Ez az \u00e1ll\u00edt\u00e1s igaz a 3 szerverb\u0151l \u00e1ll\u00f3 Zookeeper klaszterre. A kutat\u00e1sok eredm\u00e9nyek\u00e9nt \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy a Zookeeper klasztert \u00f6t szerverre b\u0151v\u00edtj\u00fck a meghib\u00e1sod\u00e1s-ellen\u00e1ll\u00e1s n\u00f6vel\u00e9se \u00e9rdek\u00e9ben. <br clear=\"left\">\n <\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"kafka-as-a-service\">Kafka mint szolg\u00e1ltat\u00e1s<\/h1>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kafka \u00e9s mikroszolg\u00e1ltat\u00e1sok: \u00e1ttekint\u00e9s\" src=\"\/wp-content\/uploads\/2019\/09\/19b2356131203cefbadfd90a25ae9674.png\" style=\"display:block;margin: 0 auto;\" \/> <\/p>\n<p><\/p>\n<p>Meggy\u0151z\u0151dt\u00fcnk arr\u00f3l, hogy a Kafka egy nagyszer\u0171 technol\u00f3gia, amely lehet\u0151v\u00e9 teszi sz\u00e1munkra a kit\u0171z\u00f6tt c\u00e9l (\u00fczenetbroker megval\u00f3s\u00edt\u00e1sa) el\u00e9r\u00e9s\u00e9t. Ugyanakkor \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy megakad\u00e1lyozzuk a szolg\u00e1ltat\u00e1sok k\u00f6zvetlen hozz\u00e1f\u00e9r\u00e9s\u00e9t a Kafk\u00e1hoz, ez\u00e9rt egy data-bus szolg\u00e1ltat\u00e1ssal fedt\u00fck el. Mi\u00e9rt tett\u00fck ezt? Val\u00f3j\u00e1ban t\u00f6bb oka is van.<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>A data-bus \u00e1tvette az \u00f6sszes feladatot, amely a Kafk\u00e1val val\u00f3 integr\u00e1ci\u00f3val kapcsolatos (consumer-ek \u00e9s producer-ek megval\u00f3s\u00edt\u00e1sa \u00e9s konfigur\u00e1l\u00e1sa, monitoroz\u00e1s, riaszt\u00e1s, napl\u00f3z\u00e1s, sk\u00e1l\u00e1z\u00e1s stb.). \u00cdgy az \u00fczenetbrokerhez val\u00f3 integr\u00e1ci\u00f3 a lehet\u0151 legegyszer\u0171bb\u00e9 v\u00e1lik. <\/p>\n<p>\n<\/li>\n<li>\n<p>A data-bus lehet\u0151v\u00e9 tette, hogy elvonatkoztassunk a Kafk\u00e1val val\u00f3 munk\u00e1hoz haszn\u00e1lt konkr\u00e9t nyelvt\u0151l vagy k\u00f6nyvt\u00e1rt\u00f3l. <\/p>\n<p>\n<\/li>\n<li>\n<p>A data-bus lehet\u0151v\u00e9 tette m\u00e1s szolg\u00e1ltat\u00e1sok sz\u00e1m\u00e1ra, hogy elvonatkoztassanak a t\u00e1rol\u00e1si r\u00e9tegt\u0151l. Elk\u00e9pzelhet\u0151, hogy egy k\u00e9s\u0151bbi id\u0151pontban a Kafk\u00e1t Pulsarra cser\u00e9lj\u00fck, ekkor senki sem fogja \u00e9szrevenni (mert minden szolg\u00e1ltat\u00e1s csak a data-bus API-j\u00e1t ismeri).<\/p>\n<p>\n<\/li>\n<li>\n<p>A data-bus \u00e1tvette az esem\u00e9nys\u00e9m\u00e1k valid\u00e1l\u00e1s\u00e1t.<\/p>\n<p>\n<\/li>\n<li>\n<p>A data-bus seg\u00edts\u00e9g\u00e9vel megval\u00f3s\u00edtottuk az autentik\u00e1ci\u00f3t.<\/p>\n<p>\n<\/li>\n<li>\n<p>A data-bus keretein bel\u00fcl z\u00f6kken\u0151mentesen, le\u00e1ll\u00e1s n\u00e9lk\u00fcl friss\u00edthetj\u00fck a Kafka verzi\u00f3it, k\u00f6zpontos\u00edtva kezelhetj\u00fck a producer-ek, consumer-ek, broker-ek stb. konfigur\u00e1ci\u00f3it.<\/p>\n<p>\n<\/li>\n<li>\n<p>A data-bus lehet\u0151v\u00e9 tette sz\u00e1munkra, hogy olyan sz\u00fcks\u00e9ges funkci\u00f3kat adjunk hozz\u00e1, amelyeket a Kafka nem biztos\u00edt (p\u00e9ld\u00e1ul a t\u00e9m\u00e1k audit\u00e1l\u00e1sa, anom\u00e1li\u00e1k ellen\u0151rz\u00e9se a klaszterben, DLQ l\u00e9trehoz\u00e1sa stb.).<\/p>\n<p>\n<\/li>\n<li>\n<p>A data-bus lehet\u0151v\u00e9 teszi a k\u00f6zpontos\u00edtott failover megval\u00f3s\u00edt\u00e1s\u00e1t minden szolg\u00e1ltat\u00e1s sz\u00e1m\u00e1ra.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Jelenleg elegend\u0151 egy kis k\u00f6nyvt\u00e1rat csatlakoztatni a szolg\u00e1ltat\u00e1sunk k\u00f3dj\u00e1hoz az esem\u00e9nyek k\u00fcld\u00e9s\u00e9nek megkezd\u00e9s\u00e9hez. Ennyi az eg\u00e9sz. Lehet\u0151s\u00e9get kap, hogy egy sor k\u00f3ddal \u00edrjon, olvasson \u00e9s m\u00e9retezzen. Az eg\u00e9sz megval\u00f3s\u00edt\u00e1s el van rejtve \u00d6n el\u0151l, csak n\u00e9h\u00e1ny batch m\u00e9ret\u0171 kezel\u0151fel\u00fclet marad l\u00e1that\u00f3. A data-bus szolg\u00e1ltat\u00e1s a h\u00e1tt\u00e9rben Kubernetes-en emel annyi producer \u00e9s consumer p\u00e9ld\u00e1nyt, amennyi sz\u00fcks\u00e9ges, \u00e9s \u00e1tadja nekik a megfelel\u0151 konfigur\u00e1ci\u00f3t, de mindez \u00e1tl\u00e1that\u00f3 az \u00d6n szolg\u00e1ltat\u00e1sa sz\u00e1m\u00e1ra. <\/p>\n<p><\/p>\n<p>Term\u00e9szetesen nincs ez\u00fcst goly\u00f3, \u00e9s ennek a megk\u00f6zel\u00edt\u00e9snek is megvannak a maga korl\u00e1tai.<\/p>\n<p><\/p>\n<ul>\n<li>A data-bus-t saj\u00e1t er\u0151forr\u00e1saival kell fenntartani, ellent\u00e9tben a harmadik f\u00e9lt\u0151l sz\u00e1rmaz\u00f3 k\u00f6nyvt\u00e1rakkal.<\/li>\n<li>A data-bus n\u00f6veli a kapcsolatokat a szolg\u00e1ltat\u00e1sok \u00e9s a broker k\u00f6z\u00f6tt, ami teljes\u00edtm\u00e9nycs\u00f6kken\u00e9shez vezet a sima Kafka-hoz k\u00e9pest.<\/li>\n<li>Nem minden rejthet\u0151 el \u00edgy a szolg\u00e1ltat\u00e1sok el\u0151l, nem szeretn\u00e9nk a KSQL vagy a Kafka Streams funkci\u00f3t a data-bus-ban megism\u00e9telni, ez\u00e9rt n\u00e9ha enged\u00e9lyezni kell, hogy a szolg\u00e1ltat\u00e1sok k\u00f6zvetlen\u00fcl kommunik\u00e1ljanak. <\/li>\n<\/ul>\n<p><\/p>\n<p>A mi eset\u00fcnkben az el\u0151ny\u00f6k t\u00fals\u00falyban voltak a h\u00e1tr\u00e1nyokkal szemben, \u00e9s a d\u00f6nt\u00e9s, hogy a broker-t egy k\u00fcl\u00f6n szolg\u00e1ltat\u00e1s m\u00f6g\u00e9 helyezz\u00fck, igazol\u00f3dott. Egy \u00e9vnyi \u00fczemeltet\u00e9s alatt nem volt komolyabb baleset\u00fcnk vagy probl\u00e9m\u00e1nk.<\/p>\n<p><\/p>\n<p>P.S. K\u00f6sz\u00f6net a bar\u00e1tn\u0151mnek, Ekaterina Obalayeva-nak, a cikkhez k\u00e9sz\u00fclt szuper k\u00e9pek\u00e9rt. Ha tetszettek, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.instagram.com\/o.k_o.k_\/\">itt<\/a><\/noindex> tov\u00e1bbi illusztr\u00e1ci\u00f3k is v\u00e1rnak.<\/p>\n<p>Forr\u00e1s: <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.3 - 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\/hu\/blog\/administrirovanie\/kafka-i-mikroservisy-obzor\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\/hu\/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 \u00e9s mikroszolg\u00e1ltat\u00e1sok: \u00e1ttekint\u00e9s | ProHoster","description":"Hell\u00f3 mindenkinek.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kafka-i-mikroservisy-obzor","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/37849","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=37849"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/37849\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/28406"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=37849"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=37849"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=37849"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}