{"id":52525,"date":"2019-11-10T00:00:00","date_gmt":"2019-11-09T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/rabbitmq-protiv-kafka-otkazoustojchivost-i-vysokaya-dostupnost-v-klasterah"},"modified":"2020-02-18T14:00:16","modified_gmt":"2020-02-18T11:00:16","slug":"rabbitmq-protiv-kafka-otkazoustojchivost-i-vysokaya-dostupnost-v-klasterah","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/rabbitmq-protiv-kafka-otkazoustojchivost-i-vysokaya-dostupnost-v-klasterah","title":{"rendered":"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/d8e584d210a6a016a962ad6f956a2078.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA hibabiztoss\u00e1g \u00e9s a magas rendelkez\u00e9sre \u00e1ll\u00e1s nagy t\u00e9m\u00e1k, ez\u00e9rt k\u00fcl\u00f6n cikkeket sz\u00e1nunk a RabbitMQ-nak \u00e9s a Kafk\u00e1nak. Ez a cikk a RabbitMQ-r\u00f3l sz\u00f3l, a k\u00f6vetkez\u0151 pedig a Kafk\u00e1r\u00f3l, a RabbitMQ-hoz viszony\u00edtva. A cikk hossz\u00fa, ez\u00e9rt helyezkedj el k\u00e9nyelmesen.<\/p>\n<p>Vizsg\u00e1ljuk meg a hibabiztoss\u00e1gi, konzisztencia- \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1si (HA) strat\u00e9gi\u00e1kat, valamint azokat a kompromisszumokat, amelyeket minden strat\u00e9gi\u00e1ban meg kell hozni. A RabbitMQ klaszterre \u00e9p\u00fcl\u0151 csom\u00f3pontokon is m\u0171k\u00f6dhet - ekkor elosztott rendszerk\u00e9nt van klasszifik\u00e1lva. Amikor elosztott rendszerekr\u0151l besz\u00e9l\u00fcnk, gyakran eml\u00edtj\u00fck a konzisztenci\u00e1t \u00e9s a rendelkez\u00e9sre \u00e1ll\u00e1st. <\/p>\n<p>Ezek a fogalmak azt \u00edrj\u00e1k le, hogyan viselkedik a rendszer hib\u00e1k eset\u00e9n. H\u00e1l\u00f3zati kapcsolat megszakad\u00e1sa, szerverhiba, merevlemez hiba, a szerver ideiglenes el\u00e9rhetetlens\u00e9ge a szem\u00e9tgy\u0171jt\u00e9s miatt, csomagveszt\u00e9s vagy h\u00e1l\u00f3zati kapcsolat lassul\u00e1sa. Mindez adatveszt\u00e9st vagy konfliktusokat okozhat. Kider\u00fcl, hogy gyakorlatilag lehetetlen olyan rendszert l\u00e9trehozni, amely egyidej\u0171leg teljesen ellentmond\u00e1s-mentes (adatveszt\u00e9s n\u00e9lk\u00fcl, adatelt\u00e9r\u00e9sek n\u00e9lk\u00fcl) \u00e9s el\u00e9rhet\u0151 (elfogadja a olvas\u00e1si \u00e9s \u00edr\u00e1si m\u0171veleteket) az \u00f6sszes hibaesetre.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nL\u00e1tni fogjuk, hogy a konzisztencia \u00e9s a rendelkez\u00e9sre \u00e1ll\u00e1s a spektrum elt\u00e9r\u0151 v\u00e9gein helyezkedik el, \u00e9s v\u00e1lasztani kell, hogy melyik ir\u00e1nyba szeretn\u00e9nk optimaliz\u00e1lni. A j\u00f3 h\u00edr az, hogy a RabbitMQ haszn\u00e1lat\u00e1val ez a v\u00e1laszt\u00e1s lehets\u00e9ges. Olyan \u201egeek\u201d kapcsol\u00f3kat haszn\u00e1lsz, amelyekkel a konzisztencia vagy a nagyobb rendelkez\u00e9sre \u00e1ll\u00e1s ir\u00e1ny\u00e1ba mozd\u00edthatod el az egyens\u00falyt.<\/p>\n<p>K\u00fcl\u00f6n\u00f6s figyelmet ford\u00edtunk arra, hogy mely konfigur\u00e1ci\u00f3k vezetnek adatveszt\u00e9shez a meger\u0151s\u00edtett feljegyz\u00e9sek miatt. Felel\u0151ss\u00e9gi l\u00e1nc \u00e1ll a kiad\u00f3k, br\u00f3kerek \u00e9s fogyaszt\u00f3k k\u00f6z\u00f6tt. Miut\u00e1n a br\u00f3kerhez tov\u00e1bb\u00edtott\u00e1k az \u00fczenetet, az \u0151 feladata - hogy ne vesz\u00edtse el az \u00fczenetet. Amikor a br\u00f3ker meger\u0151s\u00edti a kiad\u00f3nak az \u00fczenet fogad\u00e1s\u00e1t, nem v\u00e1rjuk, hogy elvesszen. De l\u00e1tni fogjuk, hogy ez val\u00f3ban el\u0151fordulhat a br\u00f3ker \u00e9s a kiad\u00f3 konfigur\u00e1ci\u00f3j\u00e1t\u00f3l f\u00fcgg\u0151en.<\/p>\n<h1>Egy csom\u00f3pont hibabiztons\u00e1gi primit\u00edvjai<\/h1>\n<p><\/p>\n<h3>Stabil sorok\/routing<\/h3>\n<p>\nA RabbitMQ k\u00e9tf\u00e9le sorozatot t\u00e1mogat: tart\u00f3s (durable) \u00e9s nem tart\u00f3s (non-durable). Minden sorozat az Mnesia adatb\u00e1zisban t\u00e1rol\u00f3dik. A tart\u00f3s sorozatok \u00fajra megjelennek a csom\u00f3pont ind\u00edt\u00e1sakor, \u00edgy t\u00fal\u00e9lik az \u00fajraind\u00edt\u00e1st, a rendszerhib\u00e1t vagy a szerverle\u00e1ll\u00e1st (addig, am\u00edg az adatok mentve vannak). Ez azt jelenti, hogy am\u00edg a routol\u00e1st (exchange) \u00e9s a sorozatot tart\u00f3snak nyilv\u00e1n\u00edtj\u00e1k, a sorozat\/routol\u00e1si infrastrukt\u00fara visszat\u00e9r a m\u0171k\u00f6d\u0151 \u00e1llapotba.<\/p>\n<p>A nem tart\u00f3s sorozatok \u00e9s routol\u00e1s elt\u00e1vol\u00edt\u00e1sra ker\u00fclnek a csom\u00f3pont \u00fajraind\u00edt\u00e1sakor.<\/p>\n<h3>Tart\u00f3s \u00fczenetek<\/h3>\n<p>\nCsak az\u00e9rt, mert egy sorozat tart\u00f3s, nem jelenti azt, hogy az \u00f6sszes benne l\u00e9v\u0151 \u00fczenet t\u00fal\u00e9li a csom\u00f3pont \u00fajraind\u00edt\u00e1s\u00e1t. Csak azok az \u00fczenetek ker\u00fclnek vissza\u00e1ll\u00edt\u00e1sra, amelyeket a kiad\u00f3 tart\u00f3snak nyilv\u00e1n\u00edtott, <i>tart\u00f3s<\/i> (persistent). A tart\u00f3s \u00fczenetek val\u00f3ban extra terhel\u00e9st jelentenek a broker sz\u00e1m\u00e1ra, de ha az \u00fczenet elveszt\u00e9se elfogadhatatlan, akkor nincs m\u00e1s lehet\u0151s\u00e9g.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/8b8e2de4ef82bf8497960657aac0ddb0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>1. \u00e1bra. A tart\u00f3ss\u00e1g m\u00e1trixa<\/i><\/p>\n<h1>Klaszterez\u00e9s sorozatm\u00e1sol\u00e1ssal<\/h1>\n<p>\nAhhoz, hogy t\u00fal\u00e9lhess\u00fck a broker elveszt\u00e9s\u00e9t, redundanci\u00e1ra van sz\u00fcks\u00e9g. T\u00f6bb RabbitMQ csom\u00f3pontot klaszterbe vonhatunk, majd tov\u00e1bbi redundanci\u00e1t biztos\u00edthatunk a sorozatok t\u00f6bb csom\u00f3pont k\u00f6z\u00f6tti replik\u00e1l\u00e1s\u00e1val. \u00cdgy, ha egy csom\u00f3pont meghib\u00e1sodik, nem vesz\u00edtj\u00fck el az adatokat \u00e9s tov\u00e1bbra is el\u00e9rhet\u0151ek maradunk. <\/p>\n<p>Sorozatm\u00e1sol\u00e1s:<\/p>\n<ul>\n<li>egy f\u0151 sorozat (mester), amely minden \u00edr\u00e1si \u00e9s olvas\u00e1si utas\u00edt\u00e1st fogad\n<\/li>\n<li>egy vagy t\u00f6bb t\u00fck\u00f6r, amelyek minden \u00fczenetet \u00e9s metadata-t kapnak a f\u0151 sorozatb\u00f3l. Ezek a t\u00fckr\u00f6k nem a sk\u00e1l\u00e1z\u00e1s \u00e9rdek\u00e9ben l\u00e9teznek, hanem kiz\u00e1r\u00f3lag redundanci\u00e1t biztos\u00edtanak.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/35f3d4bdc4f5e10da0e40eb91c5d8280.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>2. \u00e1bra. Sorozatm\u00e1sol\u00e1s<\/i><\/p>\n<p>A m\u00e1sol\u00e1st a megfelel\u0151 politik\u00e1k \u00e1ll\u00edtj\u00e1k be. Itt megadhat\u00f3k a replik\u00e1ci\u00f3s ar\u00e1ny \u00e9s ak\u00e1r azok a csom\u00f3pontok is, amelyeken a sorozatnak el kell helyezkednie. P\u00e9ld\u00e1k:<\/p>\n<ul>\n<li><code>ha-mode: all<\/code>\n<\/li>\n<li><code>ha-mode: exactly, ha-params: 2<\/code> (egy mester \u00e9s egy t\u00fck\u00f6r)\n<\/li>\n<li><code>ha-mode: nodes, ha-params: rabbit@node1, rabbit@node2<\/code><\/li>\n<\/ul>\n<p><\/p>\n<h1>A kiad\u00f3 meger\u0151s\u00edt\u00e9se<\/h1>\n<p>\nA k\u00f6vetkezetes \u00fczenetmeg\u0151rz\u00e9s \u00e9rdek\u00e9ben sz\u00fcks\u00e9ges a kiad\u00f3 meger\u0151s\u00edt\u00e9se (Publisher Confirms). En\u00e9lk\u00fcl \u00fczenetek elveszt\u00e9s\u00e9nek kock\u00e1zata \u00e1ll fenn. A meger\u0151s\u00edt\u00e9st a kiad\u00f3 fel\u00e9 a \u00fczenet lemezre \u00edr\u00e1sa ut\u00e1n k\u00fcldik el. A RabbitMQ nem fogadja el az \u00fczeneteket k\u00f6zvetlen\u00fcl, hanem id\u0151szakosan, t\u00f6bb sz\u00e1z milliszekundumonk\u00e9nt \u00edrja azokat lemezre. Amikor a sor t\u00fckr\u00f6z\u0151dik, a meger\u0151s\u00edt\u00e9st csak akkor k\u00fcldik, amikor az \u00f6sszes t\u00fck\u00f6r is lemezre \u00edrta az \u00fczenet m\u00e1solat\u00e1t. Ez azt jelenti, hogy a meger\u0151s\u00edt\u00e9sek haszn\u00e1lata k\u00e9sleltet\u00e9st okoz, de ha az adatbiztons\u00e1g fontos, akkor sz\u00fcks\u00e9ges.<\/p>\n<h1>Hibabiztos sor<\/h1>\n<p>\nAmikor a br\u00f3ker le\u00e1ll vagy \u00f6sszeomlik, az \u00f6sszes vezet\u0151 sor (master) az adott csom\u00f3ponton egy\u00fctt le\u00e1ll. Ezut\u00e1n a klaszter kiv\u00e1lasztja a leg\u00f6regebb t\u00fck\u00f6r p\u00e9ld\u00e1nyt minden masterb\u0151l, \u00e9s \u00faj masterk\u00e9nt el\u0151l\u00e9pteti azt.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/8d8227c00643f35e0dc752b6617e18fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>3. \u00e1bra. T\u00f6bb t\u00fckr\u00f6z\u00f6tt sor \u00e9s azok politik\u00e1i<\/i><\/p>\n<p>A 3. br\u00f3ker \u00f6sszeomlik. Figyelembe kell venni, hogy a C sor t\u00fck\u00f6r p\u00e9ld\u00e1nya a 2. br\u00f3kerben mester szintre emelkedik. Ezenk\u00edv\u00fcl \u00faj t\u00fck\u00f6r p\u00e9ld\u00e1ny k\u00e9sz\u00fcl a C sor sz\u00e1m\u00e1ra az 1. br\u00f3kerben. A RabbitMQ mindig igyekszik fenntartani a politik\u00e1kban megadott replik\u00e1ci\u00f3s ar\u00e1nyt.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/d08b3ada22e79686d448714f7bab009a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>4. \u00e1bra. A 3. br\u00f3ker \u00f6sszeomlik, ami a C sor hib\u00e1j\u00e1t okozza<\/i> <\/p>\n<p>Most az 1. br\u00f3ker is \u00f6sszeomlik! Csak egy br\u00f3ker\u00fcnk maradt. A B sor t\u00fck\u00f6r p\u00e9ld\u00e1nya mesterr\u00e9 emelkedik.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/dcc1d542c40c441194fd07e51046c619.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>5. \u00e1bra<\/i><\/p>\n<p>Vissza\u00e1ll\u00edtottuk az 1. br\u00f3kert. F\u00fcggetlen\u00fcl att\u00f3l, hogy az adatok mennyire \u00e9lt\u00e9k t\u00fal a br\u00f3ker elveszt\u00e9s\u00e9t \u00e9s helyre\u00e1ll\u00edt\u00e1s\u00e1t, az \u00f6sszes t\u00fck\u00f6r \u00fczenet elvet\u00e9sre ker\u00fcl az \u00fajraind\u00edt\u00e1skor. Ezt fontos megjegyezni, mivel k\u00f6vetkezm\u00e9nyei lesznek. Hamarosan \u00e1ttekintj\u00fck ezeket a k\u00f6vetkezm\u00e9nyeket. \u00cdgy az 1. br\u00f3ker most ism\u00e9t a klaszter tagja, \u00e9s a klaszter igyekszik betartani a politik\u00e1kat, ez\u00e9rt t\u00fckr\u00f6ket hoz l\u00e9tre az 1. br\u00f3keren.<\/p>\n<p>Ebben az esetben az 1. br\u00f3ker elveszt\u00e9se teljes volt, ak\u00e1rcsak az adatok\u00e9, teh\u00e1t a nem t\u00fckr\u00f6z\u00f6tt B sor teljesen elveszett.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/7ac7ab65ea6dff9c5a49372c04c83a37.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>6. \u00e1bra. Az 1. br\u00f3ker visszat\u00e9r a rendszerbe<\/i><\/p>\n<p>A 3-as broker visszat\u00e9rt a m\u0171k\u00f6d\u00e9sbe, \u00edgy az A \u00e9s B sorok \u00fajra megkapj\u00e1k az \u00e1ltala l\u00e9trehozott t\u00fck\u00f6rsorokat, hogy megfeleljenek a HA politik\u00e1juknak. De most minden f\u0151 sor egyetlen csom\u00f3ponton tal\u00e1lhat\u00f3! Ez nem ide\u00e1lis, a csom\u00f3pontok k\u00f6z\u00f6tti egyenletes eloszt\u00e1s jobb lenne. Sajnos itt nincsenek k\u00fcl\u00f6n\u00f6sebb lehet\u0151s\u00e9gek a mesterek \u00fajraeloszt\u00e1s\u00e1ra. Ezzel a probl\u00e9m\u00e1val k\u00e9s\u0151bb foglalkozunk, mivel el\u0151sz\u00f6r meg kell vizsg\u00e1lnunk a sorok szinkroniz\u00e1l\u00e1s\u00e1t. <\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/a54e53bb01e2f830a54f88acaa668984.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>7. \u00e1bra. A 3-as broker visszat\u00e9r. Minden f\u0151 sor egyetlen csom\u00f3ponton!<\/i><\/p>\n<p>Igen, most m\u00e1r van egy k\u00e9pe arr\u00f3l, hogyan biztos\u00edtj\u00e1k a t\u00fck\u00f6rsorok a redundanci\u00e1t \u00e9s a hibat\u0171r\u00e9st. Ez garant\u00e1lja a hozz\u00e1f\u00e9rhet\u0151s\u00e9get egy csom\u00f3pont le\u00e1ll\u00e1sa eset\u00e9n, \u00e9s v\u00e9di az adatveszt\u00e9st\u0151l. De m\u00e9g nem v\u00e9gezt\u00fcnk, mert val\u00f3j\u00e1ban minden sokkal bonyolultabb.<\/p>\n<h1>Szinkroniz\u00e1l\u00e1s<\/h1>\n<p>\n\u00daj t\u00fck\u00f6r l\u00e9trehoz\u00e1sakor minden \u00faj \u00fczenet mindig replik\u00e1l\u00f3dik erre a t\u00fck\u00f6rre \u00e9s b\u00e1rmely m\u00e1sikra. Ami a f\u0151 sorban l\u00e9v\u0151 megl\u00e9v\u0151 adatokat illeti, azokat replik\u00e1lhatjuk az \u00faj t\u00fck\u00f6rbe, amely a mester teljes m\u00e1solat\u00e1v\u00e1 v\u00e1lik. A megl\u00e9v\u0151 \u00fczeneteket nem is replik\u00e1lhatjuk, \u00e9s lehet\u0151v\u00e9 tehetj\u00fck a f\u0151 sor \u00e9s az \u00faj t\u00fck\u00f6r k\u00f6z\u00f6tti id\u0151beli egyeztet\u00e9st, amikor az \u00faj \u00fczenetek a v\u00e9ge fel\u00e9 \u00e9rkeznek, m\u00edg a megl\u00e9v\u0151 \u00fczenetek elhagyj\u00e1k a f\u0151 sor fej\u00e9t.<\/p>\n<p>Ez a szinkroniz\u00e1l\u00e1s automatikusan vagy manu\u00e1lisan t\u00f6rt\u00e9nik, \u00e9s a sorok politik\u00e1j\u00e1val van szab\u00e1lyozva. N\u00e9zz\u00fcnk egy p\u00e9ld\u00e1t.<\/p>\n<p>K\u00e9t t\u00fck\u00f6rsorunk van. Az A sor automatikusan szinkroniz\u00e1l\u00f3dik, m\u00edg a B sor manu\u00e1lisan. Mindk\u00e9t sorban t\u00edz \u00fczenet tal\u00e1lhat\u00f3.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/304f2a475fdd0cb6d3069140c667a0a7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>8. \u00e1bra. K\u00e9t sor k\u00fcl\u00f6nb\u00f6z\u0151 szinkroniz\u00e1l\u00e1si m\u00f3dokkal<\/i><\/p>\n<p>Most elvesz\u00edtj\u00fck a 3-as brokert.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/49114966f440c407488bb467ff6dbf93.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>9. \u00e1bra. A 3-as broker le\u00e1llt<\/i><\/p>\n<p>A 3-as broker visszat\u00e9r. A klaszter t\u00fckr\u00f6t hoz l\u00e9tre minden sor sz\u00e1m\u00e1ra egy \u00faj csom\u00f3ponton, \u00e9s automatikusan szinkroniz\u00e1lja az \u00faj A sort a mesterrel. Azonban az \u00faj B sor t\u00fckr\u00f6je \u00fcresen marad. \u00cdgy az A sor teljes redundanci\u00e1j\u00e1val rendelkez\u00fcnk, m\u00edg a B sor megl\u00e9v\u0151 \u00fczeneteihez csak egy t\u00fck\u00f6r tartozik.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/adffc1f5eff8806edbd83772f338d67f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>10. \u00e1bra. Az \u00faj A sori t\u00fck\u00f6r megkapja az \u00f6sszes megl\u00e9v\u0151 \u00fczenetet, m\u00edg az \u00faj B sori t\u00fck\u00f6r nem.<\/i><\/p>\n<p>Mindk\u00e9t sorba tov\u00e1bbi t\u00edz \u00fczenet \u00e9rkezik. Ezt k\u00f6vet\u0151en a 2. Broker le\u00e1ll, \u00e9s az A sor vissza\u00e1ll a leg\u00f6regebb t\u00fck\u00f6rre, ami az 1. Brokeren tal\u00e1lhat\u00f3. A hiba eset\u00e9n nincsen adatveszt\u00e9s. A B sorban h\u00fasz \u00fczenet tal\u00e1lhat\u00f3 a mestern\u00e9l, \u00e9s csak t\u00edz a t\u00fck\u00f6rn\u00e9l, mivel ez a sor soha nem m\u00e1solta az eredeti t\u00edz \u00fczenetet.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/c6cfef4bced5627bf243c2f020a42646.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>11. \u00e1bra. Az A sor vissza\u00e1ll az 1. Brokerre \u00fczenetveszt\u00e9s n\u00e9lk\u00fcl.<\/i><\/p>\n<p>Mindk\u00e9t sorba ism\u00e9t t\u00edz \u00fczenet \u00e9rkezik. Most az 1. Broker le\u00e1ll. Az A sor probl\u00e9ma n\u00e9lk\u00fcl v\u00e1lt a t\u00fck\u00f6rre \u00fczenetveszt\u00e9s n\u00e9lk\u00fcl. A B sor azonban probl\u00e9m\u00e1kkal k\u00fczd. Ezen a ponton optimaliz\u00e1lhatjuk vagy a rendelkez\u00e9sre \u00e1ll\u00e1st, vagy a konzisztenci\u00e1t. <\/p>\n<p>Ha optimaliz\u00e1lni akarjuk a rendelkez\u00e9sre \u00e1ll\u00e1st, akkor a politik\u00e1t <b><i>ha-promote-on-failure<\/i><\/b> kell be\u00e1ll\u00edtani <b><i>mindig<\/i><\/b>. Ez az alap\u00e9rtelmezett \u00e9rt\u00e9k, \u00edgy egyszer\u0171en nem kell megadni a politik\u00e1t. Ebben az esetben tulajdonk\u00e9ppen t\u0171rj\u00fck a hib\u00e1kat a nem szinkroniz\u00e1lt t\u00fckr\u00f6k\u00f6n. Ez \u00fczenetveszt\u00e9shez vezet, de a sor tov\u00e1bbra is olvashat\u00f3 \u00e9s \u00edrhat\u00f3.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/cd704cf4397184c212e1576b986abbaa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>12. \u00e1bra. Az A sor vissza\u00e1ll a 3. Brokerre \u00fczenetveszt\u00e9s n\u00e9lk\u00fcl. A B sor vissza\u00e1ll a 3. Brokerre t\u00edz \u00fczenet vesztes\u00e9ggel.<\/i><\/p>\n<p>Azt is be\u00e1ll\u00edthatjuk, hogy <code>ha-promote-on-failure<\/code> az \u00e9rt\u00e9kre <code>when-synced<\/code>. Ebben az esetben a sor nem a t\u00fck\u00f6rre \u00e1ll vissza, hanem megv\u00e1rja, am\u00edg az 1. Broker a saj\u00e1t adataival ism\u00e9t \u00fczemk\u00e9sz lesz. Miut\u00e1n visszat\u00e9rt, a f\u0151 sor ism\u00e9t az 1. Brokerre ker\u00fcl \u00fczenetveszt\u00e9s n\u00e9lk\u00fcl. A rendelkez\u00e9sre \u00e1ll\u00e1s a adatbiztons\u00e1g rov\u00e1s\u00e1ra megy. De ez egy kock\u00e1zatos \u00fczemm\u00f3d, ami ak\u00e1r teljes adatveszt\u00e9st is okozhat, amit nemsok\u00e1ra megvizsg\u00e1lunk.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/03fed936fe75220e22f68432ca81b654.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>13. \u00e1bra. A B sor el\u00e9rhetetlenn\u00e9 v\u00e1lik az 1. Broker elveszt\u00e9se ut\u00e1n.<\/i><\/p>\n<p>Feltetheted a k\u00e9rd\u00e9st: \"Tal\u00e1n jobb soha nem haszn\u00e1lni az automatikus szinkroniz\u00e1l\u00e1st?\". A v\u00e1lasz az, hogy a szinkroniz\u00e1l\u00e1s blokkol\u00f3 m\u0171velet. A szinkroniz\u00e1l\u00e1s sor\u00e1n a f\u0151 sor nem v\u00e9gezhet el semmilyen olvas\u00e1si vagy \u00edr\u00e1si m\u0171veletet!<\/p>\n<p>N\u00e9zz\u00fck meg a p\u00e9ld\u00e1t. Jelenleg nagyon nagy soraink vannak. Hogyan n\u0151hetnek ilyen m\u00e9ret\u0171re? T\u00f6bb okb\u00f3l is:<\/p>\n<ul>\n<li>A sorokat nem haszn\u00e1lj\u00e1k akt\u00edvan.\n<\/li>\n<li>Ezek nagy sebess\u00e9g\u0171 sorok, \u00e9s jelenleg a fogyaszt\u00f3k lassan dolgoznak. \n<\/li>\n<li>Ezek nagy sebess\u00e9g\u0171 sorok, hiba t\u00f6rt\u00e9nt, \u00e9s a fogyaszt\u00f3k utol\u00e9rik magukat.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/dd4b0fd70cbbc0b7defc06536157770d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>14. \u00e1bra. K\u00e9t nagy sor k\u00fcl\u00f6nb\u00f6z\u0151 szinkroniz\u00e1l\u00e1si m\u00f3ddal<\/i><\/p>\n<p>Most a 3. br\u00f3ker le\u00e1ll.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/8c31cfdf485ab4c9dfe13e86a151df4f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>15. \u00e1bra. A 3. br\u00f3ker le\u00e1ll, egy-master \u00e9s egy-t\u00fck\u00f6r marad minden sorban<\/i><\/p>\n<p>A 3. br\u00f3ker visszat\u00e9r, \u00e9s \u00faj t\u00fckr\u00f6k j\u00f6nnek l\u00e9tre. A F\u0151 A Sor elkezdi \u00fajra szinkroniz\u00e1lni a megl\u00e9v\u0151 \u00fczeneteket az \u00faj t\u00fck\u00f6rre, \u00e9s ez id\u0151 alatt a Sor nem el\u00e9rhet\u0151. Az adatok replik\u00e1ci\u00f3j\u00e1hoz k\u00e9t \u00f3r\u00e1ra van sz\u00fcks\u00e9g, ami k\u00e9t \u00f3r\u00e1s le\u00e1ll\u00e1st jelent a Sor sz\u00e1m\u00e1ra!<\/p>\n<p>Azonban a B Sor az eg\u00e9sz id\u0151szak alatt el\u00e9rhet\u0151 marad. N\u00e9h\u00e1ny redundanci\u00e1r\u00f3l lemondott a rendelkez\u00e9sre \u00e1ll\u00e1s \u00e9rdek\u00e9ben.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/28e641300a1c3f4d70e29a16db51521e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>16. \u00e1bra. A sor nem el\u00e9rhet\u0151 a szinkroniz\u00e1l\u00e1s alatt<\/i><\/p>\n<p>K\u00e9t \u00f3ra eltelt\u00e9vel az A Sor is el\u00e9rhet\u0151v\u00e9 v\u00e1lik \u00e9s \u00fajra kezdheti a be- \u00e9s kiolvas\u00e1si m\u0171veleteket.<\/p>\n<h3>Friss\u00edt\u00e9sek<\/h3>\n<p>\nEz a blokkol\u00f3 viselked\u00e9s a szinkroniz\u00e1l\u00e1s alatt megnehez\u00edti a nagyon nagy sorokkal rendelkez\u0151 klaszterek friss\u00edt\u00e9s\u00e9t. Valamikor a master csom\u00f3pontot \u00fajra kell ind\u00edtani, ami azt jelenti, hogy vagy a t\u00fck\u00f6rre kell \u00e1tt\u00e9rni, vagy a sort le kell \u00e1ll\u00edtani a szerver friss\u00edt\u00e9se alatt. Ha az \u00e1tt\u00e9r\u00e9st v\u00e1lasztjuk, akkor elvesz\u00edtj\u00fck az \u00fczeneteket, ha a t\u00fckr\u00f6k nincsenek szinkroniz\u00e1lva. Alap\u00e9rtelmez\u00e9s szerint a br\u00f3ker kikapcsol\u00e1sa sor\u00e1n nem t\u00f6rt\u00e9nik \u00e1tt\u00e9r\u00e9s a nem szinkroniz\u00e1lt t\u00fckr\u00f6kre. Ez azt jelenti, hogy amint a br\u00f3ker visszat\u00e9r, nem veszt\u00fcnk el \u00fczeneteket, egyed\u00fcl a sor le\u00e1ll\u00e1sa okozott k\u00e1rt. A br\u00f3ker kikapcsol\u00e1s\u00e1nak viselked\u00e9s\u00e9t a politika hat\u00e1rozza meg. <code>ha-promote-on-shutdown<\/code>. K\u00e9t \u00e9rt\u00e9k k\u00f6z\u00fcl lehet v\u00e1lasztani:<\/p>\n<ul>\n<li><code>mindig<\/code>= a nem szinkroniz\u00e1lt t\u00fckr\u00f6kre val\u00f3 \u00e1tt\u00e9r\u00e9s enged\u00e9lyezve van\n<\/li>\n<li><code>when-synced<\/code>= \u00e1tt\u00e9r\u00e9s csak a szinkroniz\u00e1lt t\u00fck\u00f6rre, k\u00fcl\u00f6nben a sor nem lesz el\u00e9rhet\u0151 \u00edr\u00e1sra \u00e9s olvas\u00e1sra. A sor visszat\u00e9r, amint a br\u00f3ker is.<\/li>\n<\/ul>\n<p>\nB\u00e1rhogy is van, a nagy sorok eset\u00e9ben v\u00e1lasztani kell az adatok elveszt\u00e9se \u00e9s a nem el\u00e9rhet\u0151s\u00e9g k\u00f6z\u00f6tt.<\/p>\n<h3>Amikor a rendelkez\u00e9sre \u00e1ll\u00e1s n\u00f6veli az adatok biztons\u00e1g\u00e1t<\/h3>\n<p>\nMiel\u0151tt d\u00f6nt\u00e9st hozn\u00e1nk, figyelembe kell venni egy tov\u00e1bbi bonyodalmat. Noha az automatikus szinkroniz\u00e1l\u00e1s jobb a redundancia szempontj\u00e1b\u00f3l, hogyan befoly\u00e1solja az adatok biztons\u00e1g\u00e1t? Term\u00e9szetesen a RabbitMQ jobb redundanci\u00e1ja kisebb val\u00f3sz\u00edn\u0171s\u00e9ggel veszti el a megl\u00e9v\u0151 \u00fczeneteket, de mi a helyzet az \u00faj \u00fczenetekkel a kiad\u00f3k r\u00e9sz\u00e9r\u0151l?<\/p>\n<p>Itt figyelembe kell venni a k\u00f6vetkez\u0151ket:<\/p>\n<ul>\n<li>Visszaadhat-e a kiad\u00f3 egy hib\u00e1t, \u00e9s a fel\u00fcgyeleti szolg\u00e1ltat\u00e1s vagy a felhaszn\u00e1l\u00f3 k\u00e9s\u0151bb \u00fajrapr\u00f3b\u00e1lkozhat?\n<\/li>\n<li>Visszatarthat-e a kiad\u00f3 egy \u00fczenetet helyben, vagy az adatb\u00e1zisban, hogy k\u00e9s\u0151bb \u00fajrapr\u00f3b\u00e1lkozzon?<\/li>\n<\/ul>\n<p>\nHa a kiad\u00f3 csak eldobja az \u00fczenetet, akkor val\u00f3j\u00e1ban a rendelkez\u00e9sre \u00e1ll\u00e1s jav\u00edt\u00e1sa a adatok biztons\u00e1g\u00e1t is n\u00f6veli.<\/p>\n<p>Ez\u00e9rt meg kell tal\u00e1lni az egyens\u00falyt, \u00e9s a megold\u00e1s a konkr\u00e9t helyzett\u0151l f\u00fcgg.<\/p>\n<h1>Probl\u00e9m\u00e1k a ha-promote-on-failure=when-synced<\/h1>\n<p>\n\u00d6tlet <i><b>ha-promote-on-failure<\/b><\/i>= <i><b>when-synced<\/b><\/i> az abban rejlik, hogy megakad\u00e1lyozzuk a szinkroniz\u00e1latlan t\u00fck\u00f6rre val\u00f3 v\u00e1lt\u00e1st, \u00edgy elker\u00fclve az adatok elveszt\u00e9s\u00e9t. A sor olvas\u00e1sra vagy \u00edr\u00e1sra nem el\u00e9rhet\u0151. Ehelyett megpr\u00f3b\u00e1ljuk vissza\u00e1ll\u00edtani a le\u00e1llt br\u00f3kert s\u00e9rtetlen adatokkal, hogy folytathassa a munk\u00e1t mint mester adatveszt\u00e9s n\u00e9lk\u00fcl. <\/p>\n<p>De (\u00e9s ez egy nagy DE) ha a br\u00f3ker elvesztette az adatait, akkor nagy probl\u00e9m\u00e1nk van: a sor elveszett! Minden adat elt\u0171nt! M\u00e9g akkor is, ha vannak t\u00fck\u00f6r, amelyek jellemz\u0151en a f\u0151 sorhoz k\u00e9pest lemaradnak, ezeket a t\u00fckr\u00f6ket is el kell dobni.<\/p>\n<p>Az azonos nev\u0171 csom\u00f3pont \u00fajabb hozz\u00e1ad\u00e1s\u00e1hoz azt k\u00e9rj\u00fck a klasztert\u0151l, hogy felejtse el az elveszett csom\u00f3pontot (parancs alapj\u00e1n <i>rabbitmqctl forget_cluster_node<\/i>) \u00e9s ind\u00edtson el egy \u00faj br\u00f3kert ugyanazzal a hosztn\u00e9vvel. Am\u00edg a klaszter eml\u00e9kezik az elveszett csom\u00f3pontra, eml\u00e9kezik a r\u00e9gi sorra \u00e9s a szinkroniz\u00e1latlan t\u00fckr\u00f6kre is. Amikor azt k\u00e9rj\u00fck a klasztert\u0151l, hogy felejtse el az elveszett csom\u00f3pontot, ez a sor is elfelejt\u0151dik. Most \u00fajra kell hirdetni. Minden adatunkat elvesztett\u00fck, b\u00e1r voltak t\u00fckr\u00f6k r\u00e9szleges adatk\u00e9szlettel. Jobb lett volna \u00e1tt\u00e9rni a szinkroniz\u00e1latlan t\u00fck\u00f6rre!<\/p>\n<p>Ez\u00e9rt a manu\u00e1lis szinkroniz\u00e1l\u00e1s (\u00e9s a szinkroniz\u00e1l\u00e1s elmarad\u00e1sa) a <code>ha-promote-on-failure=when-synced<\/code>, v\u00e9lem\u00e9nyem szerint, meglehet\u0151sen kock\u00e1zatos. A dokumentumok azt mondj\u00e1k, hogy ez a megold\u00e1s l\u00e9tezik az adatok biztons\u00e1g\u00e1\u00e9rt, de ez egy k\u00e9t\u00e9l\u0171 fegyver.<\/p>\n<h1>A mesterek \u00fajraeloszt\u00e1sa<\/h1>\n<p>\nAhogy \u00edg\u00e9rt\u00fck, visszat\u00e9r\u00fcnk ahhoz a probl\u00e9m\u00e1hoz, hogy az \u00f6sszes mester \u00f6sszegy\u0171lik egy vagy t\u00f6bb csom\u00f3ponton. Ez akkor is bek\u00f6vetkezhet, ha \u201efoly\u00e9kony\u201d (rolling) friss\u00edt\u00e9st hajtanak v\u00e9gre a klaszteren. Egy h\u00e1rom csom\u00f3ponttal rendelkez\u0151 klaszterben minden f\u0151 sor egy vagy k\u00e9t csom\u00f3ponton gy\u0171lik \u00f6ssze.<\/p>\n<p>A mesterek \u00fajraeloszt\u00e1sa k\u00e9t okb\u00f3l probl\u00e9m\u00e1s lehet:<\/p>\n<ul>\n<li>Nincsenek megfelel\u0151 eszk\u00f6z\u00f6k az \u00fajraeloszt\u00e1s v\u00e9grehajt\u00e1s\u00e1ra<\/li>\n<li>Sorok szinkroniz\u00e1l\u00e1sa<\/li>\n<\/ul>\n<p>\nVan egy harmadik f\u00e9l \u00e1thelyez\u00e9se <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Ayanda-D\/rabbitmq-queue-master-balancer\">b\u0151v\u00edtm\u00e9ny<\/a><\/noindex>, amelyet hivatalosan nem t\u00e1mogatnak. A RabbitMQ \u00fatmutat\u00f3ja a harmadik f\u00e9l b\u0151v\u00edtm\u00e9nyekr\u0151l azt \u00edrja: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/upgrade.html\">azt mondja<\/a><\/noindex>A b\u0151v\u00edtm\u00e9ny n\u00e9h\u00e1ny kieg\u00e9sz\u00edt\u0151 konfigur\u00e1ci\u00f3s \u00e9s jelent\u00e9sk\u00e9sz\u00edt\u00e9si eszk\u00f6zt biztos\u00edt, de nem t\u00e1mogatja \u00e9s nem ellen\u0151rzi a RabbitMQ csapata. Haszn\u00e1lja saj\u00e1t felel\u0151ss\u00e9g\u00e9re.<\/p>\n<p>Van m\u00e9g egy tr\u00fckk, hogy a f\u0151 sort a HA politik\u00e1kon kereszt\u00fcl mozgassuk. Az \u00fatmutat\u00f3 eml\u00edti <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rabbitmq\/support-tools\/blob\/master\/scripts\/rebalance-queue-masters\">script<\/a><\/noindex> ehhez. \u00cdgy m\u0171k\u00f6dik:<\/p>\n<ul>\n<li>T\u00f6rli az \u00f6sszes t\u00fckr\u00f6t egy ideiglenes politik\u00e1val, amelynek magasabb priorit\u00e1sa van, mint a megl\u00e9v\u0151 HA politik\u00e1nak.\n<\/li>\n<li>Megv\u00e1ltoztatja az ideiglenes HA politik\u00e1t azzal, hogy \"csom\u00f3pont\" m\u00f3dot haszn\u00e1l, konkr\u00e9t csom\u00f3pontot megadva, amelyre a f\u0151 sort \u00e1t kell helyezni.\n<\/li>\n<li>Szinkroniz\u00e1lja a sort az er\u0151ltetett migr\u00e1ci\u00f3hoz.\n<\/li>\n<li>A migr\u00e1ci\u00f3 befejez\u00e9se ut\u00e1n t\u00f6rli az ideiglenes politik\u00e1t. Az eredeti HA politika l\u00e9p \u00e9rv\u00e9nybe, \u00e9s l\u00e9trej\u00f6n a sz\u00fcks\u00e9ges t\u00fck\u00f6r mennyis\u00e9g.<\/li>\n<\/ul>\n<p>\nA h\u00e1tr\u00e1nya ennek a megk\u00f6zel\u00edt\u00e9snek, hogy nem m\u0171k\u00f6dik j\u00f3l, ha nagy sorok vannak, vagy szigor\u00fa redundanciaig\u00e9nyek.<\/p>\n<p>Most n\u00e9zz\u00fck meg, hogyan m\u0171k\u00f6dnek a RabbitMQ klaszterek h\u00e1l\u00f3zati r\u00e9szlegz\u00e9sekkel.<\/p>\n<h1>Konzisztencia megs\u00e9rt\u00e9se<\/h1>\n<p>\nA disztrib\u00faci\u00f3s rendszer csom\u00f3pontjai h\u00e1l\u00f3zati kapcsolatokkal vannak \u00f6sszekapcsolva, \u00e9s a h\u00e1l\u00f3zati kapcsolatok letilthat\u00f3k. A letilt\u00e1sok gyakoris\u00e1ga a helyi infrastrukt\u00far\u00e1t\u00f3l, vagy a v\u00e1lasztott felh\u0151 megb\u00edzhat\u00f3s\u00e1g\u00e1t\u00f3l f\u00fcgg. Mindenesetre a disztrib\u00faci\u00f3s rendszereknek k\u00e9pesnek kell lenni\u00fck kezelni ezeket. Ism\u00e9t v\u00e1laszt\u00e1s el\u00e9 \u00e1llunk a rendelkez\u00e9sre \u00e1ll\u00e1s \u00e9s a konzisztencia k\u00f6z\u00f6tt, \u00e9s a j\u00f3 h\u00edr az, hogy a RabbitMQ mindkett\u0151t biztos\u00edt (csak nem egyszerre).<\/p>\n<p>A RabbitMQ-val k\u00e9t alapvet\u0151 lehet\u0151s\u00e9g\u00fcnk van:<\/p>\n<ul>\n<li>Enged\u00e9lyezni a logikai r\u00e9szlegz\u00e9st (split-brain). Ez biztos\u00edtja a rendelkez\u00e9sre \u00e1ll\u00e1st, de adatveszt\u00e9st okozhat.\n<\/li>\n<li>Megtagadni a logikai r\u00e9szlegz\u00e9st. Ez r\u00f6vid t\u00e1v\u00fa rendelkez\u00e9sre \u00e1ll\u00e1sveszt\u00e9st okozhat, att\u00f3l f\u00fcgg\u0151en, hogy a kliensek hogyan kapcsol\u00f3dnak a klaszterhez. K\u00e9t csom\u00f3pont eset\u00e9n teljes nem el\u00e9rhet\u0151s\u00e9get is okozhat a klaszterben.<\/li>\n<\/ul>\n<p>\nDe mi az a logikai r\u00e9szlegz\u00e9s? Amikor a klaszter kett\u00e9oszlik a h\u00e1l\u00f3zati kapcsolatok elveszt\u00e9se miatt. Minden oldalon a t\u00fckr\u00f6k f\u0151v\u00e9 emelkednek, \u00edgy v\u00e9g\u00fcl minden sorhoz t\u00f6bb f\u0151 tartozik.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/d880a935df450fb994edfed0715e026e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u00c1bra. 17. F\u0151 sor \u00e9s k\u00e9t t\u00fck\u00f6r, mindkett\u0151 k\u00fcl\u00f6n csom\u00f3ponton. Ezut\u00e1n h\u00e1l\u00f3zati hiba l\u00e9p fel, \u00e9s az egyik t\u00fck\u00f6r lev\u00e1lik. A lev\u00e1lasztott csom\u00f3pont \u00e9szleli, hogy a m\u00e1sik kett\u0151 kiesett, \u00e9s a saj\u00e1t t\u00fckreit f\u0151k\u00e9nt ir\u00e1ny\u00edtja. Most k\u00e9t f\u0151 sorunk van, amelyek mindkett\u0151 enged\u00e9lyezik az \u00edr\u00e1st \u00e9s az olvas\u00e1st.<\/i> <\/p>\n<p>Ha a kiad\u00f3k mindk\u00e9t f\u0151t\u0151l adatokat k\u00fcldenek, akkor k\u00e9t elt\u00e9r\u0151 m\u00e1solatunk lesz.<\/p>\n<p>A RabbitMQ k\u00fcl\u00f6nb\u00f6z\u0151 m\u00f3djai garant\u00e1lj\u00e1k vagy a rendelkez\u00e9sre \u00e1ll\u00e1st, vagy a konzisztenci\u00e1t.<\/p>\n<h3>Ignore m\u00f3d (alap\u00e9rtelmezett)<\/h3>\n<p>\nEz a m\u00f3d a rendelkez\u00e9sre \u00e1ll\u00e1st biztos\u00edtja. A kapcsolat megszakad\u00e1sa ut\u00e1n logikai elv\u00e1l\u00e1s k\u00f6vetkezik be. A kapcsolat helyre\u00e1ll\u00e1sakor a rendszergazd\u00e1nak el kell d\u00f6ntenie, hogy melyik r\u00e9szt kell el\u0151nyben r\u00e9szes\u00edtenie. A vesztes oldal \u00fajraindul, \u00e9s az ott felhalmoz\u00f3dott adatok elvesznek.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/4d82c13b5ef21837ba819f5c246a1e41.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u00c1bra. 18. H\u00e1rom kiad\u00f3 kapcsol\u00f3dik h\u00e1rom br\u00f3kerhez. A klaszter bels\u0151leg az \u00f6sszes k\u00e9r\u00e9st a f\u0151 sorba a Br\u00f3ker 2-re ir\u00e1ny\u00edtja.<\/i><\/p>\n<p>Most elvesz\u00edtj\u00fck a Br\u00f3kert 3. Ez \u00e9szleli, hogy a t\u00f6bbi br\u00f3ker kiesett, \u00e9s saj\u00e1t t\u00fck\u00f6rp\u00e1rj\u00e1t a f\u0151szerepre emeli. \u00cdgy t\u00f6rt\u00e9nik a logikai k\u00fcl\u00f6nv\u00e1l\u00e1s.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/c7e01d51b24023bacdd93cfad95c9eab.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u00c1bra. 19. Logikai elv\u00e1l\u00e1s (split-brain). Az \u00edr\u00e1sok k\u00e9t f\u0151 sorba mennek, \u00e9s a k\u00e9t m\u00e1solat elt\u00e9r.<\/i><\/p>\n<p>A kapcsolat helyre\u00e1ll, de a logikai elv\u00e1l\u00e1s megmarad. A rendszergazd\u00e1nak manu\u00e1lisan kell kiv\u00e1lasztania a vesztes oldalt. Az al\u00e1bbi esetben a rendszergazda \u00fajraind\u00edtja a Br\u00f3kert 3. Minden \u00fczenet elveszik, amelyet nem siker\u00fclt tov\u00e1bb\u00edtania.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/51c3ee15024d3c83ba625e3ff9cdeb90.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u00c1bra. 20. A rendszergazda letiltja a Br\u00f3kert 3.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/0bac8e33de25c0c5381d336d26464858.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u00c1bra. 21. A rendszergazda \u00fajraind\u00edtja a Br\u00f3kert 3, \u00e9s az csatlakozik a klaszterhez, elvesz\u00edtve minden \u00fczenetet, ami ott maradt.<\/i><\/p>\n<p>A kapcsolat megszak\u00edt\u00e1sa alatt \u00e9s a helyre\u00e1ll\u00edt\u00e1sa ut\u00e1n a klaszter \u00e9s ez a sor rendelkez\u00e9sre \u00e1llt az olvas\u00e1shoz \u00e9s \u00edr\u00e1shoz.<\/p>\n<h3>Autoheal m\u00f3d<\/h3>\n<p>\nUgyan\u00fagy m\u0171k\u00f6dik, mint az Ignore m\u00f3d, azzal a k\u00fcl\u00f6nbs\u00e9ggel, hogy a klaszter automatikusan v\u00e1lasztja ki a vesztes oldalt a sz\u00e9tv\u00e1l\u00e1s \u00e9s a kapcsolat helyre\u00e1ll\u00edt\u00e1sa ut\u00e1n. A vesztes oldal \u00fcresen t\u00e9r vissza a klaszterbe, \u00e9s a sor minden olyan \u00fczenetet elvesz\u00edt, amelyeket csak arra az oldalra k\u00fcldtek.<\/p>\n<h3>Pause Minority m\u00f3d<\/h3>\n<p>\nHa el akarjuk ker\u00fclni a logikai sz\u00e9tv\u00e1laszt\u00e1st, akkor az egyetlen lehet\u0151s\u00e9g\u00fcnk, ha lemondunk az \u00edr\u00e1sr\u00f3l \u00e9s olvas\u00e1sr\u00f3l a kisebb oldalon a klaszter sz\u00e9tv\u00e1laszt\u00e1sakor. Amikor a broker \u00e9szleli, hogy a kisebb oldalon van, le\u00e1ll\u00edtja a m\u0171k\u00f6d\u00e9s\u00e9t, azaz lez\u00e1rja az \u00f6sszes megl\u00e9v\u0151 kapcsolatot \u00e9s elutas\u00edt minden \u00fajat. M\u00e1sodpercenk\u00e9nt egyszer ellen\u0151rzi a kapcsolat helyre\u00e1ll\u00edt\u00e1s\u00e1t. Amint a kapcsolat helyre\u00e1ll, \u00fajraind\u00edtja a m\u0171k\u00f6d\u00e9st \u00e9s csatlakozik a klaszterhez.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/7a51cf509b2c94e2ae100c7dedd9d21a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>22. \u00e1bra. H\u00e1rom kiad\u00f3 kapcsol\u00f3dik h\u00e1rom brokerhez. A klaszter bels\u0151leg az \u00f6sszes k\u00e9r\u00e9st az 2. broker f\u0151 sor\u00e1ba ir\u00e1ny\u00edtja.<\/i><\/p>\n<p>Ezut\u00e1n az 1. \u00e9s 2. broker elk\u00fcl\u00f6n\u00fcl a 3. brokert\u0151l. Ahelyett, hogy a t\u00fck\u00f6r m\u00e1solat\u00e1t f\u0151 brokerre emeln\u00e9, a 3. broker le\u00e1ll\u00edtja m\u0171k\u00f6d\u00e9s\u00e9t \u00e9s el\u00e9rhetetlenn\u00e9 v\u00e1lik.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/c12ec38a47e1f8ccceebfa1854f54f21.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>23. \u00e1bra. A 3. broker le\u00e1ll\u00edtja a m\u0171k\u00f6d\u00e9s\u00e9t, bontja az \u00f6sszes kliens kapcsolat\u00e1t, \u00e9s elutas\u00edtja a csatlakoz\u00e1si k\u00e9relmeket.<\/i><\/p>\n<p>Amint a kapcsolat helyre\u00e1ll, visszat\u00e9r a klaszterbe.<\/p>\n<p>N\u00e9zz\u00fck meg egy m\u00e1sik p\u00e9ld\u00e1t, ahol a f\u0151 sor a 3. brokeren tal\u00e1lhat\u00f3.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/4cc6a28270f00a280ecb5af5252f4e07.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>24. \u00e1bra. A f\u0151 sor a 3. brokeren.<\/i><\/p>\n<p>Ezut\u00e1n ism\u00e9t bek\u00f6vetkezik a kapcsolat megszakad\u00e1sa. A 3. broker sz\u00fcnetel, mivel a kisebb oldalon van. A m\u00e1sik oldalon a csom\u00f3pontok \u00e9szlelik, hogy a 3. broker le\u00e1llt, \u00edgy a 1. \u00e9s 2. broker r\u00e9gebbi t\u00fck\u00f6rm\u00e1solata f\u0151 brokerre emelkedik.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/d0d032385533bb53c5a95927afcd3119.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>25. \u00e1bra. \u00c1tmenet a 2. brokerhez, amikor a 3. broker nem el\u00e9rhet\u0151.<\/i><\/p>\n<p>Amikor a kapcsolat helyre\u00e1ll, a 3. broker csatlakozik a klaszterhez.<\/p>\n<p><img decoding=\"async\" alt=\"RabbitMQ vs Kafka: hibat\u0171r\u00e9s \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben\" src=\"\/wp-content\/uploads\/2019\/11\/53f8186a040ae07724ef59cf79b72a0c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>26. \u00e1bra. A klaszter visszat\u00e9rt a norm\u00e1l m\u0171k\u00f6d\u00e9shez.<\/i><\/p>\n<p>Itt fontos meg\u00e9rteni, hogy konzistenci\u00e1t kapunk, de el\u00e9rhet\u0151s\u00e9get is biztos\u00edthatunk. <i><b>ha<\/b><\/i> sikeresen \u00e1tkonfigur\u00e1ljuk a klienseket a r\u00e9sz nagyobb r\u00e9sz\u00e9re. A legt\u00f6bb helyzetben \u00e9n a Sz\u00fcneteltess\u00fck a Kisebbs\u00e9get m\u00f3dot v\u00e1lasztan\u00e1m, de ez t\u00e9nyleg a konkr\u00e9t esett\u0151l f\u00fcgg.<\/p>\n<p>Az el\u00e9rhet\u0151s\u00e9g biztos\u00edt\u00e1sa \u00e9rdek\u00e9ben fontos, hogy a kliensek sikeresen csatlakozzanak a csom\u00f3ponthoz. N\u00e9zz\u00fck meg a lehet\u0151s\u00e9geinket.<\/p>\n<h1>A kliensek kapcsolat\u00e1nak biztos\u00edt\u00e1sa<\/h1>\n<p>\nT\u00f6bb lehet\u0151s\u00e9g\u00fcnk van arra, hogy a kapcsolat megszakad\u00e1sa ut\u00e1n az \u00fcgyfeleket a klaszter f\u0151 r\u00e9sz\u00e9re vagy a m\u0171k\u00f6d\u0151 csom\u00f3pontokra ir\u00e1ny\u00edtsuk (egy csom\u00f3pont le\u00e1ll\u00e1sa ut\u00e1n). El\u0151sz\u00f6r is eml\u00e9kezz\u00fcnk arra, hogy egy adott sor egy bizonyos csom\u00f3ponton helyezkedik el, de a forgalomir\u00e1ny\u00edt\u00e1s \u00e9s a politik\u00e1k minden csom\u00f3ponton replik\u00e1l\u00f3dnak. Az \u00fcgyfelek b\u00e1rmely csom\u00f3ponthoz csatlakozhatnak, \u00e9s a bels\u0151 forgalomir\u00e1ny\u00edt\u00e1s azokat a megfelel\u0151 helyre ir\u00e1ny\u00edtja. De amikor egy csom\u00f3pont felf\u00fcggeszt\u00e9sre ker\u00fcl, akkor elutas\u00edtja a kapcsolatokat, \u00edgy az \u00fcgyfeleknek egy m\u00e1sik csom\u00f3ponthoz kell csatlakozniuk. Ha egy csom\u00f3pont le\u00e1llt, akkor val\u00f3ban alig tud valamit tenni.<\/p>\n<p>Lehet\u0151s\u00e9geink:<\/p>\n<ul>\n<li>A klaszterhez val\u00f3 hozz\u00e1f\u00e9r\u00e9s terhel\u00e9seloszt\u00f3 seg\u00edts\u00e9g\u00e9vel t\u00f6rt\u00e9nik, amely egyszer\u0171en ciklikusan v\u00e9gigj\u00e1rja a csom\u00f3pontokat, mik\u00f6zben az \u00fcgyfelek \u00fajrapr\u00f3b\u00e1lkoznak a csatlakoz\u00e1ssal a sikeres befejez\u00e9sig. Ha egy csom\u00f3pont nem m\u0171k\u00f6dik vagy felf\u00fcggeszt\u00e9sre ker\u00fclt, akkor a csom\u00f3pontra val\u00f3 kapcsol\u00f3d\u00e1si k\u00eds\u00e9rletek kudarcot vallanak, de a k\u00f6vetkez\u0151 k\u00eds\u00e9rletek m\u00e1s szerverekhez fognak ir\u00e1nyulni (ciklikus m\u00f3dban). Ez alkalmas r\u00f6vid t\u00e1v\u00fa kapcsolatmegszakad\u00e1sra vagy olyan szerverre, amely gyorsan \u00fajraindul.\n<\/li>\n<li>A klaszterhez val\u00f3 hozz\u00e1f\u00e9r\u00e9s terhel\u00e9seloszt\u00f3n kereszt\u00fcl, a felf\u00fcggesztett\/hib\u00e1s csom\u00f3pontok list\u00e1b\u00f3l val\u00f3 elt\u00e1vol\u00edt\u00e1s\u00e1val, amint \u00e9szlel\u00e9sre ker\u00fclnek. Ha ezt gyorsan meg tudjuk tenni, \u00e9s az \u00fcgyfelek k\u00e9pesek \u00fajrapr\u00f3b\u00e1lkoz\u00e1sra, akkor folyamatos el\u00e9rhet\u0151s\u00e9get nyer\u00fcnk.\n<\/li>\n<li>Minden \u00fcgyf\u00e9lnek ny\u00fajtsunk egy list\u00e1t az \u00f6sszes csom\u00f3pontr\u00f3l, \u00e9s az \u00fcgyf\u00e9l csatlakoz\u00e1sakor v\u00e9letlenszer\u0171en v\u00e1laszt egyet k\u00f6z\u00fcl\u00fck. Ha a csatlakoz\u00e1si k\u00eds\u00e9rlet hib\u00e1t ad, akkor a lista k\u00f6vetkez\u0151 csom\u00f3pontj\u00e1ra l\u00e9p, am\u00edg csatlakozni nem tud.\n<\/li>\n<li>Az el\u00e9rhetetlen\/felf\u00fcggesztett csom\u00f3pont forgalm\u00e1nak elt\u00e1vol\u00edt\u00e1sa DNS seg\u00edts\u00e9g\u00e9vel. Ezt egy alacsony TTL haszn\u00e1lat\u00e1val hajtjuk v\u00e9gre.<\/li>\n<\/ul>\n<p><\/p>\n<h1>K\u00f6vetkeztet\u00e9sek<\/h1>\n<p>\nA RabbitMQ klaszterez\u00e9s\u00e9nek saj\u00e1t el\u0151nyei \u00e9s h\u00e1tr\u00e1nyai vannak. A legnagyobb h\u00e1tr\u00e1nyok k\u00f6z\u00e9 tartozik, hogy:<\/p>\n<ul>\n<li>a klaszterre csatlakoz\u00f3 csom\u00f3pontok elutas\u00edtj\u00e1k adataikat;\n<\/li>\n<li>a blokkol\u00f3 szinkroniz\u00e1ci\u00f3 a sor el\u00e9rhetetlens\u00e9g\u00e9t eredm\u00e9nyezi.<\/li>\n<\/ul>\n<p>\nMinden neh\u00e9z d\u00f6nt\u00e9s ezekb\u0151l a k\u00e9t architektur\u00e1lis saj\u00e1toss\u00e1gb\u00f3l fakad. Ha a RabbitMQ k\u00e9pes lenne meg\u0151rizni az adatokat a klaszter \u00fajra csatlakoztat\u00e1sakor, a szinkroniz\u00e1l\u00e1s gyorsabban t\u00f6rt\u00e9nne. Ha pedig k\u00e9pes lenne nem blokkol\u00f3 szinkroniz\u00e1l\u00e1sra, akkor jobban kezeln\u00e9 a nagy sorokat. Ezeknek a k\u00e9t probl\u00e9m\u00e1nak a megold\u00e1sa komoly javul\u00e1st hozna a RabbitMQ megb\u00edzhat\u00f3s\u00e1g\u00e1ban \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s\u00e1ban az \u00fczenetk\u00fcld\u0151 technol\u00f3gia ter\u00e9n. Nem mern\u00e9m aj\u00e1nlani a RabbitMQ klaszterez\u00e9s\u00e9t az al\u00e1bbi helyzetekben:<\/p>\n<ul>\n<li>Megb\u00edzhatatlan h\u00e1l\u00f3zat.\n<\/li>\n<li>Megb\u00edzhatatlan t\u00e1rol\u00e1s.\n<\/li>\n<li>Nagyon nagy sorok.<\/li>\n<\/ul>\n<p>\nA magas rendelkez\u00e9sre \u00e1ll\u00e1s be\u00e1ll\u00edt\u00e1saival kapcsolatban a k\u00f6vetkez\u0151ket fontolja meg:<\/p>\n<ul>\n<li><code>ha-promote-on-failure=always<\/code>\n<\/li>\n<li><code>ha-sync-mode=manual<\/code>\n<\/li>\n<li><code>cluster_partition_handling=ignore<\/code> SysWOW64 <code>autoheal<\/code>)\n<\/li>\n<li>megb\u00edzhat\u00f3 \u00fczenetek\n<\/li>\n<li>gy\u0151z\u0151dj\u00f6n meg r\u00f3la, hogy a kliensek az akt\u00edv csom\u00f3ponthoz csatlakoznak, amikor egy csom\u00f3pont meghib\u00e1sodik<\/li>\n<\/ul>\n<p>\nAz adatkonzisztencia (adatbiztons\u00e1g) \u00e9rdek\u00e9ben a k\u00f6vetkez\u0151 be\u00e1ll\u00edt\u00e1sokat fontolja meg:<\/p>\n<ul>\n<li>Publisher Confirms \u00e9s Manual Acknowledgements a fogyaszt\u00f3 oldal\u00e1n\n<\/li>\n<li><code>ha-promote-on-failure=when-synced<\/code>, ha a kiad\u00f3k k\u00e9s\u0151bb \u00fajrapr\u00f3b\u00e1lkozhatnak, \u00e9s ha van nagyon megb\u00edzhat\u00f3 t\u00e1rol\u00f3ja! Ellenkez\u0151 esetben \u00e1ll\u00edtson be <code>=always<\/code>.\n<\/li>\n<li><code>ha-sync-mode=automatic<\/code> (de a nagy, inakt\u00edv sorok eset\u00e9ben sz\u00fcks\u00e9g lehet k\u00e9zi m\u00f3dra; tov\u00e1bb\u00e1 gondolja \u00e1t, hogy a rendelkez\u00e9sre \u00e1ll\u00e1s hi\u00e1nya \u00fczenetveszt\u00e9shez vezethet-e)\n<\/li>\n<li>Pause Minority \u00fczemm\u00f3d\n<\/li>\n<li>megb\u00edzhat\u00f3 \u00fczenetek<\/li>\n<\/ul>\n<p>\nM\u00e9g nem besz\u00e9lt\u00fcnk minden lehets\u00e9ges magas rendelkez\u00e9sre \u00e1ll\u00e1sr\u00f3l \u00e9s megb\u00edzhat\u00f3s\u00e1gr\u00f3l; p\u00e9ld\u00e1ul arr\u00f3l, hogyan v\u00e9gezhetj\u00fck el biztons\u00e1gosan az adminisztrat\u00edv elj\u00e1r\u00e1sokat (p\u00e9ld\u00e1ul a g\u00f6rd\u00fcl\u0151 friss\u00edt\u00e9seket). Besz\u00e9lni kell a feder\u00e1ci\u00f3r\u00f3l \u00e9s a Shovel b\u0151v\u00edtm\u00e9nyr\u0151l is.<\/p>\n<p>Ha m\u00e9g valamit kihagytam, k\u00e9rlek, jelezd.<\/p>\n<p>L\u00e1sd m\u00e9g az \u00e9n <noindex><a rel=\"nofollow\" href=\"https:\/\/jack-vanlightly.com\/blog\/2018\/9\/10\/how-to-lose-messages-on-a-rabbitmq-cluster\">bejegyz\u00e9s<\/a><\/noindex>, ahol a RabbitMQ klaszterben k\u00e9sz\u00edtek k\u00eds\u00e9rleteket Dockeren \u00e9s Blockade-on, hogy teszteljek n\u00e9h\u00e1ny \u00fczenetveszt\u00e9si forgat\u00f3k\u00f6nyvet, amelyeket ebben a cikkben \u00edrok le.<\/p>\n<p>El\u0151z\u0151 cikkek a sorozatban: <br \/>\n1. sz\u00e1m \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/itsumma\/blog\/416629\/\">habr.com\/ru\/company\/itsumma\/blog\/416629<\/a><\/noindex> <br \/>\n2. sz\u00e1m \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/itsumma\/blog\/418389\/\">habr.com\/ru\/company\/itsumma\/blog\/418389<\/a><\/noindex> <br \/>\n3. sz\u00e1m \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/itsumma\/blog\/437446\/\">habr.com\/ru\/company\/itsumma\/blog\/437446<\/a><\/noindex><br \/>\n<br \/>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/itsumma\/blog\/471858\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u0438 \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u2014 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0442\u0435\u043c\u044b, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u0441\u0432\u044f\u0442\u0438\u043c RabbitMQ \u0438 Kafka \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438. \u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043e RabbitMQ, \u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u2014 \u043e Kafka, \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 RabbitMQ. \u0421\u0442\u0430\u0442\u044c\u044f \u0434\u043b\u0438\u043d\u043d\u0430\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043f\u043e\u0443\u0434\u043e\u0431\u043d\u0435\u0435. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438, \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 (HA), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0434\u0442\u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438. RabbitMQ \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-52525","post","type-post","status-publish","format-standard","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=\".\" \/>\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\/rabbitmq-protiv-kafka-otkazoustojchivost-i-vysokaya-dostupnost-v-klasterah\" \/>\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\udd47RabbitMQ \u043f\u0440\u043e\u0442\u0438\u0432 Kafka: \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u0438 \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\".\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/rabbitmq-protiv-kafka-otkazoustojchivost-i-vysokaya-dostupnost-v-klasterah\" \/>\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-11-09T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:00:16+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\udd47RabbitMQ vs Kafka: megb\u00edzhat\u00f3s\u00e1g \u00e9s magas rendelkez\u00e9sre \u00e1ll\u00e1s klaszterekben | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/rabbitmq-protiv-kafka-otkazoustojchivost-i-vysokaya-dostupnost-v-klasterah","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\udd47RabbitMQ \u043f\u0440\u043e\u0442\u0438\u0432 Kafka: \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u0438 \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 | ProHoster","og:description":".","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/rabbitmq-protiv-kafka-otkazoustojchivost-i-vysokaya-dostupnost-v-klasterah","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-11-09T21:00:00+00:00","article:modified_time":"2020-02-18T11:00:16+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"52525","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 03:54:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:41:25","updated":"2026-01-24 03:54:19","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\/52525","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=52525"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/52525\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=52525"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=52525"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=52525"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}