Ho utloisisa barekisi ba melaetsa. Ho ithuta mekhoa ea ho romellana melaetsa le ActiveMQ le Kafka. Khaolo ea 3. Kafka

Tsoelo-pele ea phetolelo ea buka e nyane:
Ho Utloisisa Melaetsa Brokers
mongoli: Jakub Korab, mohatisi: O'Reilly Media, Inc., letsatsi la phatlalatso: June 2017, ISBN: 9781492049296.

Karolo e fetoletsoeng e fetileng: Ho utloisisa barekisi ba melaetsa. Ho ithuta mekhoa ea ho romellana melaetsa le ActiveMQ le Kafka. Khaolo ea 1 Selelekela

KHAOLO EA 3

Kafka

Kafka e hlahisitsoe ke LinkedIn ho pota-pota tse ling tsa mefokolo ea barekisi ba melaetsa ea setso le ho qoba ho theha melaetsa e mengata ea melaetsa bakeng sa likamano tse fapaneng tsa ntlha-to-point, tse hlalositsoeng bukeng ena tlas'a "Scaling up and out" leqepheng la 28 Ts'ebeliso ea linyeoe LinkedIn e itšetlehile haholo ka mokhoa o le mong oa ho kenya lintlha tse ngata haholo, tse kang ho tobetsa maqephe le ho kena, ha e ntse e lumella boitsebiso boo hore bo sebelisoe ke mekhoa e mengata ntle le ho ama tlhahiso ea bahlahisi kapa bareki ba bang. Ebile, lebaka leo Kafka a leng teng ke ho fumana mofuta oa meralo ea melaetsa eo Universal Data Pipeline e e hlalosang.

Ho latela sepheo sena sa mantlha, litlhokahalo tse ling li ile tsa hlaha ka tlhaho. Kafka e lokela ho:

  • Eba kapele haholo
  • Fana ka bandwidth e eketsehileng ha u sebetsa ka melaetsa
  • Tšehetso ea Mohatisi-Mongoli le mehlala ea Point-to-Point
  • Seke oa fokotsa lebelo ka ho eketsa bareki. Mohlala, tšebetso ea mokoloko le sehlooho ho ActiveMQ lia fokotseha ha palo ea bareki e ntse e hola sebakeng seo u eang ho sona.
  • E be scalable tse rapameng; haeba morekisi a le mong ea phehellang melaetsa a ka etsa joalo feela ka lebelo le phahameng la disk, hoa utloahala ho fetela ka nqane ho mohlala o le mong oa broker ho eketsa ts'ebetso.
  • Fokotsa phihlello ea ho boloka le ho khutlisa melaetsa hape

Ho fihlela tsena tsohle, Kafka e ile ea amohela meralo e hlalosang bocha mesebetsi le boikarabello ba bareki le barekisi ba melaetsa. Mohlala oa JMS o sekametse haholo ho barekisi, moo morekisi a ikarabellang bakeng sa ho aba melaetsa mme bareki ba tlameha ho tšoenyeha feela ka ho romella le ho amohela melaetsa. Kafka, ka lehlakoreng le leng, ke moreki-centric, 'me moreki a nka likarolo tse ngata tsa morekisi oa setso, joalo ka ho aba melaetsa e nepahetseng ho bareki, molemong oa moreki ea potlakileng haholo le ea scalable. Bakeng sa batho ba sebelitseng ka mekhoa ea melaetsa ea setso, ho sebetsa le Kafka ho hloka phetoho e kholo ea kelello.
Tataiso ena ea boenjiniere e lebisitse ho thehoeng ha lisebelisoa tsa melaetsa tse khonang ho eketsa tlhahiso ea thepa ka liodara tse ngata tsa boholo ha li bapisoa le morekisi ea tloaelehileng. Joalokaha re tla bona, mokhoa ona o tla le li-trade-offs, tse bolelang hore Kafka ha e tšoanelehe bakeng sa mefuta e itseng ea mesebetsi le software e kentsoeng.

Moetso o Kopanetsoeng oa Sebaka

Ho phethahatsa litlhoko tse hlalositsoeng ka holimo, Kafka e kopantse melaetsa ea khatiso le ntlha-to-point tlas'a mofuta o le mong oa sebaka - sehlooho. Sena se ferekanya batho ba sebelitseng ka litsamaiso tsa melaetsa, moo lentsoe "topic" le bolelang mokhoa oa khaso oo (ho tloha sehloohong) ho bala ho sa mamelleheng. Lihlooho tsa Kafka li lokela ho nkoa e le mofuta oa sebaka sa lebasetere, joalokaha ho hlalositsoe selelekeleng sa buka ena.

Karolong e setseng ea khaolo ena, ntle le haeba re bolela ka ho hlaka, lentsoe "sehlooho" le tla bolela sehlooho sa Kafka.

Ho utloisisa ka botlalo hore na lihlooho li sebetsa joang le hore na li fana ka litiisetso life, re lokela ho qala ka ho sheba hore na li sebelisoa joang Kafka.
Sehlooho se seng le se seng sa Kafka se na le lintlha tsa sona.
Bahlahisi ba romellang melaetsa ho Kafka ba ngolla lethathamong lena, 'me bareki ba bala ho tloha ho log ba sebelisa lintlha tse tsoelang pele kamehla. Nako le nako, Kafka e hlakola likarolo tsa khale tsa log, hore na melaetsa e likarolong tseo e balile kapa che. Karolo e bohareng ea moralo oa Kafka ke hore morekisi ha a tsotelle hore na melaetsa e baloa kapa che - ke boikarabello ba moreki.

Mantsoe "log" le "pointer" ha a hlahe Litokomane tsa Kafka. Mantsoe ana a tsebahalang a sebelisoa mona ho thusa ho utloisisa.

Moetso ona o fapane ka ho felletseng le ActiveMQ, moo melaetsa e tsoang ho mela eohle e bolokiloeng ka har'a log e le 'ngoe,' me morekisi o tšoaea hore melaetsa e hlakotsoe ka mor'a hore e baloe.
Joale a re ke re cheke hanyane 'me re shebe log log ea sehlooho ka botlalo.
Lenane la Kafka le na le likarolo tse 'maloa (Setšoantšo sa 3-1). Kafka e tiisa ho odara ka thata karolong e 'ngoe le e 'ngoe. Sena se bolela hore melaetsa e ngoletsoeng karohano ka tatellano e itseng e tla baloa ka tatellano e tšoanang. Karolo e 'ngoe le e' ngoe e kenngoa ts'ebetsong e le faele ea li-rolling e nang le karolo e nyane (sehlotšoana) sa melaetsa eohle e romelloang sehloohong ke bahlahisi ba eona. Sehlooho se entsoeng se na le, ka ho sa feleng, karohano e le 'ngoe. Mohopolo oa li-partitions ke mohopolo oa mantlha oa Kafka bakeng sa sekala se otlolohileng.

Ho utloisisa barekisi ba melaetsa. Ho ithuta mekhoa ea ho romellana melaetsa le ActiveMQ le Kafka. Khaolo ea 3. Kafka
Setšoantšo sa 3-1. Kafka Partitions

Ha mohlahisi a romella molaetsa ho sehlooho sa Kafka, o etsa qeto ea hore na o tla romela molaetsa ho eng. Re tla sheba sena ka botlalo hamorao.

Ho bala melaetsa

Moreki ea batlang ho bala melaetsa o laola pointer e bitsoang sehlopha sa bareki, e supang offset melaetsa karohanong. Offset ke boemo ba katoloso bo qalang ho 0 qalong ea karohano. Sehlopha sena sa bareki, se boletsoeng ho API ka sehlopha se hlalosoang ke mosebelisi_id, se lumellana le moreki kapa tsamaiso e le 'ngoe e utloahalang.

Litsamaiso tse ngata tsa melaetsa li bala lintlha tsa sebaka seo u eang ho sona li sebelisa liketsahalo tse ngata le likhoele ho sebetsana le melaetsa ka ho bapisa. Kahoo, hangata ho tla ba le maemo a mangata a bareki a arolelanang sehlopha se le seng sa bareki.

Bothata ba ho bala bo ka hlalosoa ka tsela e latelang:

  • Sehlooho se na le likarolo tse ngata
  • Lihlopha tse ngata tsa bareki li ka sebelisa sehlooho ka nako e le 'ngoe
  • Sehlopha sa bareki se ka ba le maemo a mangata a fapaneng

Ena ke bothata bo sa reng letho ho isa ho ba bangata. Ho utloisisa hore na Kafka e sebetsana joang le likamano lipakeng tsa lihlopha tsa bareki, maemo a bareki le likarohano, ha re shebeng letoto la maemo a thata a ho bala a ntseng a tsoela pele.

Bareki le lihlopha tsa bareki

Ha re nke ntlha ea ho qala sehlooho ka karolo e le 'ngoe (Setšoantšo sa 3-2).

Ho utloisisa barekisi ba melaetsa. Ho ithuta mekhoa ea ho romellana melaetsa le ActiveMQ le Kafka. Khaolo ea 3. Kafka
Setšoantšo sa 3-2. Moreki o bala ho tloha karohanong

Ha mohlala oa moreki o hokahana le sehlopha sa ona_id sehloohong sena, o abeloa karohano ea ho bala le ho fokotsa karohano eo. Boemo ba offset ena bo hlophisitsoe ho moreki joalo ka sesupo sa boemo ba morao-rao (molaetsa o mocha) kapa boemo ba pele (molaetsa oa khale). Moreki o kopa (likhetho) melaetsa ho tsoa sehloohong, e leng se etsang hore e baloe ka tatellano ho tsoa ho log.
Boemo ba offset bo lula bo khutlisetsoa Kafka mme bo bolokoa joalo ka melaetsa sehloohong se ka hare _consumer_offsets. Melaetsa e balang e ntse e so hlakoloe, ho fapana le morekisi ea tloaelehileng, 'me moreki a ka khutlisa offset ho sebetsana le melaetsa e seng e bonoe.

Ha moreki oa bobeli ea nang le kelello a hokahana a sebelisa sehlopha se fapaneng_id, o laola pointer ea bobeli e ikemetseng ho ea pele (Setšoantšo sa 3-3). Ka hona, sehlooho sa Kafka se sebetsa joaloka mokoloko moo ho nang le moreki a le mong 'me joaloka sehlooho se tloaelehileng sa ho hatisa (pub-sub) seo bareki ba bangata ba se ngolisitseng, ka phaello e eketsehileng ea hore melaetsa eohle e bolokiloe 'me e ka sebetsoa ka makhetlo a mangata.

Ho utloisisa barekisi ba melaetsa. Ho ithuta mekhoa ea ho romellana melaetsa le ActiveMQ le Kafka. Khaolo ea 3. Kafka
Setšoantšo sa 3-3. Bareki ba babeli ka lihlopha tse fapaneng tsa bareki ba bala ho tsoa karolong e le 'ngoe

Bareki sehlopheng sa bareki

Ha ketsahalo e le 'ngoe ea bareki e bala data ho tsoa karohanong, e na le taolo e felletseng ea pointer mme e sebetsa melaetsa joalo ka ha e hlalositsoe karolong e fetileng.
Haeba maemo a 'maloa a bareki a ne a hokahantsoe le sehlopha se le seng_id ho sehlooho se nang le karohano e le' ngoe, mohlala o hokahaneng oa ho qetela o tla fuoa taolo holim'a pointer mme ho tloha motsotsong oo ho ea pele o tla amohela melaetsa eohle (Setšoantšo sa 3-4).

Ho utloisisa barekisi ba melaetsa. Ho ithuta mekhoa ea ho romellana melaetsa le ActiveMQ le Kafka. Khaolo ea 3. Kafka
Setšoantšo sa 3-4. Bareki ba babeli sehlopheng se le seng sa bareki ba bala ho tsoa karolong e le 'ngoe

Mokhoa ona oa ts'ebetso, oo palo ea linyeoe tsa bareki e fetang palo ea likarolo, o ka nkoa e le mofuta oa bareki ba ikhethileng. Sena se ka ba molemo haeba o hloka "active-passive" (kapa "hot-warm") e kopanyang maemo a bareki ba hau, leha ho sebelisa bareki ba bangata ka nako e le 'ngoe ("active-active" kapa "hot-hot") ho tloaelehile ho feta. bareki. boemong ba standby.

Boitšoaro bona ba ho aba melaetsa bo hlalositsoeng ka holimo bo ka makatsa ha bo bapisoa le tsela eo mokoloko o tloaelehileng oa JMS o itšoarang ka eona. Mohlaleng ona, melaetsa e romelloang moleng e tla ajoa ka ho lekana pakeng tsa bareki ba babeli.

Hangata, ha re theha mehlala e mengata ea bareki, re etsa sena ho sebetsana le melaetsa ka mokhoa o ts'oanang, kapa ho eketsa lebelo la ho bala, kapa ho eketsa botsitso ba mokhoa oa ho bala. Kaha ke mohlala o le mong feela oa bareki o ka balang data ho tsoa karohanong ka nako, see se finyelloa joang Kafka?

Mokhoa o mong oa ho etsa sena ke ho sebelisa mohlala o le mong oa bareki ho bala melaetsa eohle le ho e fetisetsa letamong la likhoele. Le ha mokhoa ona o eketsa ts'ebetso ea ho sebetsa, o eketsa ho rarahana ha mohopolo oa bareki mme ha o etse letho ho eketsa matla a sistimi ea ho bala. Haeba kopi e le 'ngoe ea moreki e theoha ka lebaka la ho felloa ke matla kapa ketsahalo e tšoanang, joale ho tlosa ho emisa.

Mokhoa o ka sehloohong oa ho rarolla bothata bona Kafka ke ho sebelisa bОlikarolo tse ling.

Karohano

Likarolo ke mokhoa o ka sehloohong oa ho bapisa ho bala le ho phahamisa sehlooho ho feta bandwidth ea mohlala o le mong oa morekisi. Ho utloisisa sena hamolemo, a re nahaneng ka boemo boo ho nang le sehlooho se nang le likarolo tse peli mme moreki a le mong a ingolisa ho sehlooho sena (Setšoantšo sa 3-5).

Ho utloisisa barekisi ba melaetsa. Ho ithuta mekhoa ea ho romellana melaetsa le ActiveMQ le Kafka. Khaolo ea 3. Kafka
Setšoantšo sa 3-5. Moreki e mong o bala ho tsoa ho li-partitions tse ngata

Boemong bona, moreki o fuoa taolo holim'a litsupa tse tsamaellanang le sehlopha_id ea eona likarolong tse peli mme o qala ho bala melaetsa ho tsoa ho likarolo ka bobeli.
Ha moreki ea eketsehileng bakeng sa sehlopha se ts'oanang_id a eketsoa sehloohong sena, Kafka e fetisetsa e 'ngoe ea likarolo ho tloha ho ea pele ho ea ho ea bobeli. Kamora moo, mohlala o mong le o mong oa moreki o tla bala ho tsoa karolong e le 'ngoe ea sehlooho (Setšoantšo sa 3-6).

Ho etsa bonnete ba hore melaetsa e sebetsoa ka mokhoa o ts'oanang ka likhoele tse 20, o hloka bonyane likarolo tse 20. Haeba ho na le likarolo tse fokolang, u tla sala le bareki ba se nang letho leo u ka le sebelisang, joalokaha ho hlalositsoe pejana puisanong ea bareki ba khethehileng.

Ho utloisisa barekisi ba melaetsa. Ho ithuta mekhoa ea ho romellana melaetsa le ActiveMQ le Kafka. Khaolo ea 3. Kafka
Setšoantšo sa 3-6. Bareki ba babeli sehlopheng se le seng sa bareki ba bala ho tsoa likarolong tse fapaneng

Morero ona o fokotsa haholo ho rarahana ha morekisi oa Kafka ha a bapisoa le kabo ea molaetsa e hlokahalang ho boloka mokoloko oa JMS. Mona ha ho hlokahale hore u tšoenyehe ka lintlha tse latelang:

  • Ke moreki ofe ea lokelang ho amohela molaetsa o latelang, o ipapisitse le kabo ea liroboto, bokhoni ba hajoale ba li-buffers tsa pele, kapa melaetsa e fetileng (ha e le lihlopha tsa melaetsa ea JMS).
  • Ke melaetsa efe e romeloang ho bareki bafe le hore na ba lokela ho romelloa hape haeba ho ka hloleha.

Sohle seo moreki oa Kafka a lokelang ho se etsa ke ho fetisetsa melaetsa ka tatellano ho moreki ha oa morao a e kopa.

Leha ho le joalo, litlhoko tsa ho tsamaisana le ho bala le ho romela melaetsa e hlōlehileng ha li fele - boikarabelo ba bona bo tloha ho broker ho ea ho moreki. Sena se bolela hore li tlameha ho nkoa ka har'a khoutu ea hau.

Ho romella melaetsa

Ke boikarabello ba moetsi oa molaetsa oo ho etsa qeto ea hore na o romela molaetsa ho karolo efe. Ho utloisisa mokhoa oo sena se etsoang ka oona, re lokela ho qala ka ho nahana hore na ha e le hantle re romela eng.

Athe ho JMS re sebelisa sebopeho sa molaetsa se nang le metadata (lihlooho le thepa) le 'mele o nang le mojaro oa moputso, ho Kafka molaetsa ke. para "key-value". Molaetsa o lefang o rometsoe e le boleng. Senotlolo, ka lehlakoreng le leng, se sebelisoa haholo bakeng sa ho arola 'me se tlameha ho ba le logic ea khoebo senotlolo se ikhethilengho beha melaetsa e amanang le karohano e le nngwe.

Khaolong ea 2, re buisane ka boemo ba ho becha inthaneteng moo liketsahalo tse amanang li lokelang ho sebetsoa ke moreki a le mong:

  1. Ak'haonte ea mosebelisi e lokisitsoe.
  2. Chelete e kenngoa akhaonteng.
  3. Ho becha ho etsoa e ntšang chelete akhaonteng.

Haeba ketsahalo ka 'ngoe e le molaetsa o rometsoeng sehloohong, joale senotlolo sa tlhaho e tla ba ID ea akhaonto.
Ha molaetsa o romelloa ho sebelisoa Kafka Producer API, o fetisetsoa mosebetsing oa karohano oo, ha o fuoa molaetsa le boemo ba hona joale ba sehlopha sa Kafka, o khutlisetsa ID ea karohano eo molaetsa o lokelang ho romelloa ho eona. Karolo ena e kengoa tšebetsong Java ka sebopeho sa Partitioner.

Sebopeho sena se shebahala tjena:

interface Partitioner {
    int partition(String topic,
        Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster);
}

Ts'ebetsong ea Partitioner e sebelisa algorithm ea hashing ea sepheo se akaretsang holim'a senotlolo ho fumana karohano, kapa robin e pota-potileng haeba ho se senotlolo se boletsoeng. Boleng bona ba kamehla bo sebetsa hantle maemong a mangata. Leha ho le joalo, nakong e tlang u tla batla ho ngola ea hau.

Ho ngola leano la hau la ho arola

Ha re shebeng mohlala moo o batlang ho romella metadata hammoho le moputso oa molaetsa. Lekhetho mohlaleng oa rona ke taelo ea ho etsa depositi akhaonteng ea papali. Taelo ke ntho eo re ka ratang ho tiisetsoa hore e se ke ea fetoloa phetisong 'me re batla ho etsa bonnete ba hore ke sistimi e tšepahalang feela e ka qalang thuto eo. Tabeng ena, mekhoa ea ho romela le ho amohela e lumellana ka tšebeliso ea saena ho netefatsa molaetsa.
Ho JMS e tloaelehileng, re hlalosa feela thepa ea "signature ea molaetsa" ebe re e eketsa molaetseng. Leha ho le joalo, Kafka ha e re fe mokhoa oa ho fetisa metadata, feela senotlolo le boleng.

Kaha boleng ke tefo ea phetisetso ea banka eo re batlang ho boloka botšepehi ba eona, ha re na boikhethelo haese ho hlalosa sebopeho sa data seo re ka se sebelisang senotlolo. Ka ho nka hore re hloka ID ea akhaonto bakeng sa ho arola, kaha melaetsa eohle e amanang le akhaonto e tlameha ho sebetsoa ka tatellano, re tla tla le sebopeho se latelang sa JSON:

{
  "signature": "541661622185851c248b41bf0cea7ad0",
  "accountId": "10007865234"
}

Hobane boleng ba tekeno bo tla fapana ho latela boima ba moputso, leano la kamehla la hashing la sebopeho sa Partitioner le ke ke la tšepahalla melaetsa e amanang le lihlopha. Ka hona, re tla hloka ho ngola leano la rona le tla fetisa senotlolo sena le ho arola boleng ba accountId.

Kafka e kenyelletsa li-checksums ho bona bobolu ba melaetsa ka lebenkeleng mme e na le likarolo tse felletseng tsa ts'ireletso. Leha ho le joalo, ka linako tse ling ho hlaha litlhoko tse ikhethileng indastering, joalo ka tse ka holimo.

Leano la ho arola la mosebelisi le tlameha ho netefatsa hore melaetsa eohle e amanang le eona e qetella e le karohano e tšoanang. Le hoja sena se bonahala se le bonolo, tlhokahalo e ka thatafatsoa ke bohlokoa ba ho laela melaetsa e amanang le hore na palo ea likaroloana tsa sehlooho e tsitsitse hakae.

Palo ea likarolo tsa sehlooho li ka fetoha ha nako e ntse e ea, kaha li ka eketsoa haeba sephethephethe se feta tebello ea pele. Kahoo, linotlolo tsa molaetsa li ka amahanngoa le karohano eo li neng li rometsoe ho eona qalong, ho bolelang hore karolo ea naha e tla arolelanoa lipakeng tsa maemo a mohlahisi.

Ntlha e 'ngoe e lokelang ho nahanoa ke kabo e lekanang ea melaetsa ho pholletsa le likarolo. Ka tloaelo, linotlolo ha li abuoe ka ho lekana ho melaetsa, 'me mesebetsi ea hash ha e fane ka tiiso ea ho ajoa hantle ha melaetsa bakeng sa likotlolo tse nyane.
Ke habohlokoa ho hlokomela hore leha ho le joalo u khetha ho arola melaetsa, karohano ka boeona e ka hloka ho sebelisoa hape.

Nahana ka tlhokahalo ea ho pheta lintlha lipakeng tsa lihlopha tsa Kafka libakeng tse fapaneng tsa libaka. Bakeng sa morero ona, Kafka e tla le sesebelisoa sa mola oa taelo se bitsoang MirrorMaker, se sebelisetsoang ho bala melaetsa e tsoang sehlopheng se seng le ho e fetisetsa ho e 'ngoe.

MirrorMaker e tlameha ho utloisisa linotlolo tsa sehlooho se kopilitsoeng e le ho boloka taolo e lekanyelitsoeng lipakeng tsa melaetsa ha e ikatisetsa lipakeng tsa lihlopha, kaha palo ea likarolo tsa sehlooho seo e kanna ea se tšoane ka lihlopha tse peli.

Maano a karohano a tloaelo a batla a sa tloaeleha, kaha hashing ea kamehla kapa robin e pota-potileng e sebetsa hantle maemong a mangata. Leha ho le joalo, haeba u hloka litiiso tse matla tsa ho laela kapa u hloka ho ntša metadata ho tsoa ho litefo, joale ho arola ke ntho eo u lokelang ho e shebisisa.

Melemo ea scalability le ts'ebetso ea Kafka e tlisoa ke ho fetisetsa tse ling tsa boikarabello ba moreki oa setso ho ea ho moreki. Tabeng ena, ho etsoa qeto ea ho aba melaetsa e ka 'nang ea amana har'a bareki ba' maloa ba sebetsang ka ho tšoana.

Barekisi ba JMS le bona ba hloka ho sebetsana le litlhoko tse joalo. Ho khahlisang ke hore mochini oa ho romella melaetsa e amanang le eona ho moreki a le mong, o kentsoeng tšebetsong ka Lihlopha tsa Melaetsa ea JMS (phapang ea leano la Sticky load balancing (SLB)), o boetse o hloka hore motho ea rometseng a tšoaee melaetsa e amanang le eona. Tabeng ea JMS, morekisi o na le boikarabelo ba ho romela sehlopha sena sa melaetsa e amanang le moreki a le mong ho tsoa ho tse ngata, le ho fetisetsa botho ba sehlopha haeba moreki a oela.

Litumellano tsa Moetsi

Ho arola ha se eona feela ntho eo u ka e nahanang ha u romella melaetsa. Ha re shebeng mekhoa ea send() ea sehlopha sa Moetsi ho Java API:

Future < RecordMetadata > send(ProducerRecord < K, V > record);
Future < RecordMetadata > send(ProducerRecord < K, V > record, Callback callback);

Ho lokela ho hlokomeloa hang-hang hore mekhoa ka bobeli e khutlisa Future, e bontšang hore ts'ebetso ea ho romela ha e etsoe hang-hang. Sephetho ke hore molaetsa (ProducerRecord) o ngolloa ho buffer bakeng sa karohano e 'ngoe le e' ngoe e sebetsang 'me o romelloa ho broker e le khoele e ka morao laebraring ea bareki ba Kafka. Leha sena se etsa hore lintho li potlake haholo, ho bolela hore sesebelisoa se se nang boiphihlelo se ka lahleheloa ke melaetsa haeba ts'ebetso ea sona e emisoa.

Joalo ka mehla, ho na le mokhoa oa ho etsa hore ts'ebetso ea ho romella e tšepahale ka theko ea ts'ebetso. Boholo ba buffer ena bo ka hlophisoa ho 0, 'me khoele ea ho romela kopo e tla qobelloa ho ema ho fihlela molaetsa o fetisetsoang ho broker o phethoa, ka tsela e latelang:

RecordMetadata metadata = producer.send(record).get();

Tse ling mabapi le ho bala melaetsa

Ho bala melaetsa ho na le mathata a eketsehileng a hlokang ho hakanyetsoa. Ho fapana le JMS API, e ka tsamaisang momameli oa molaetsa ho arabela molaetsa, the Bareki Kafka feela likhetho. A re hlahlobeng mokhoa oo ka hloko khetho()e sebelisetsoang morero ona:

ConsumerRecords < K, V > poll(long timeout);

Theko ea ho khutlisa ea mokhoa ke sebopeho sa setshelo se nang le lintho tse ngata rekoto ea bareki ho tloha ho likarolo tse 'maloa tse ka bang teng. rekoto ea bareki ka boeona ke ntho e ts'oereng karolo ea bohlokoa-boleng e nang le metadata e amanang, joalo ka karohano eo e nkiloeng ho eona.

Joalokaha ho tšohliloe Khaolong ea 2, re tlameha ho hopola se etsahalang ka melaetsa ka mor'a hore e sebetsoe ka katleho kapa e sa atlehe, mohlala, haeba moreki a sa khone ho sebetsana le molaetsa kapa haeba o ntša mpa. Ho JMS, sena se ile sa sebetsoa ka mokhoa oa ho amohela. Morekisi o tla hlakola molaetsa o sebetsitsoeng ka katleho, kapa a boele a fane ka molaetsa o tala kapa oa bohata (ho nka hore ho sebelisitsoe litšebelisano).
Kafka e sebetsa ka tsela e fapaneng haholo. Melaetsa ha e hlakoloe ho broker ka mor'a ho hlahloba liphoso, 'me se etsahalang ka ho hlōleha ke boikarabelo ba khoutu ea ho bala ka boeona.

Joalokaha re boletse, sehlopha sa bareki se amahanngoa le offset ho log. Sebaka sa marang-rang se amanang le offset ena se lumellana le molaetsa o latelang o tla fanoa ho arabela khetho(). Nako ea nako eo offset ena e eketsehang ke qeto ea ho bala.

Ha re khutlela mokhoeng oa ho bala o tšohliloeng pejana, ts'ebetso ea melaetsa e na le mekhahlelo e meraro:

  1. Fumana molaetsa bakeng sa ho baloa.
  2. Tsamaisa molaetsa.
  3. Netefatsa molaetsa.

Moreki oa Kafka o tla le khetho ea tlhophiso nolofalletsa.auto.commit. Ena ke tlhophiso e sebelisoang khafetsa, joalo ka ha ho tloaelehile ho li-setting tse nang le lentsoe "auto".

Pele ho Kafka 0.10, moreki ea sebelisang khetho ena o ne a tla romella molaetsa oa ho qetela o baloang mohala o latelang. khetho() ka mora ho sebetsa. Sena se ne se bolela hore melaetsa efe kapa efe e neng e se e nkiloe e ka sebetsoa hape haeba moreki a ne a se a e sebelitse empa e senyehile ka tšohanyetso pele a letsa. khetho(). Hobane morekisi ha a boloke boemo leha e le bofe mabapi le hore na molaetsa o balile makhetlo a makae, moreki ea latelang ea fumanang molaetsa oo a ke ke a tseba letho le lebe le etsahetseng. Boitšoaro bona e ne e le ba pseudo-transaction. Theko e ne e etsoa feela haeba molaetsa o sebetsitsoe ka katleho, empa haeba moreki a ka ntša mpa, morekisi o ne a tla romela molaetsa o tšoanang hape ho moreki e mong. Boitšoaro bona bo ne bo lumellana le tiisetso ea ho fana ka molaetsa "bonyane hang".

Kafka 0.10, khoutu ea bareki e fetotsoe e le hore boitlamo bo qale nako le nako ke laeborari ea bareki, joalo ka ha e lokiselitsoe. auto.commit.interval.ms. Boitšoaro bona bo pakeng tsa mefuta ea JMS AUTO_ACKNOWLEDGE le DUPS_OK_ACKNOWLEDGE. Ha u sebelisa autocommit, melaetsa e ka etsoa ho sa tsotelehe hore na e hlile e sebelitsoe - sena se ka etsahala molemong oa moreki ea liehang. Haeba moreki a ne a ka ntša mpa, melaetsa e ne e tla latoa ke moreki ea latelang, ho qala boemong ba boitlamo, e leng se ka fellang ka molaetsa o fositseng. Tabeng ena, Kafka ha ea ka ea lahleheloa ke melaetsa, khoutu ea ho bala ha ea ka ea e sebetsa.

Mokhoa ona o na le ts'episo e ts'oanang le ea mofuta oa 0.9: melaetsa e ka sebetsoa, ​​​​empa haeba e hloleha, e ka 'na ea se ke ea etsoa, ​​​​e leng se ka etsang hore ho tsamaisoa ho be habeli. Melaetsa e mengata eo o e latang ha o e phetha khetho(), bothata bona le ho feta.

Joalokaha ho hlalositsoe ho "Ho Bala Melaetsa e Tsoang Moleng" leqepheng la 21, ha ho ntho e kang ho fana ka molaetsa hanngoe feela tsamaisong ea melaetsa ha mekhoa ea ho hlōleha e hlokomeloa.

Kafka, ho na le mekhoa e 'meli ea ho etsa (ho itlama) ho fokotsa (offset): ka ho iketsa le ka letsoho. Maemong ana ka bobeli, melaetsa e ka sebetsoa ka makhetlo a mangata haeba molaetsa o ile oa sebetsoa empa o hlolehile pele ho itlama. U ka khetha ho se sebetse molaetsa ho hang haeba boitlamo bo etsahetse ka morao mme khoutu ea hau e phethetsoe pele e ka sebetsoa (mohlomong ka Kafka 0.9 le pejana).

U ka laola ts'ebetso ea "offset conset" ea Kafka API ka ho beha paramethara nolofalletsa.auto.commit ho bua leshano le ka ho hlaka ho bitsa e 'ngoe ea mekhoa e latelang:

void commitSync();
void commitAsync();

Haeba u batla ho sebetsana le molaetsa "bonyane hang", u tlameha ho etsa offset ka letsoho le commitSync()ka ho phethahatsa taelo ena hang ka mor'a ho sebetsana le melaetsa.

Mekhoa ena ha e lumelle melaetsa hore e ananeloe pele e sebetsoa, ​​​​empa ha e etse letho ho felisa tieho e ka bang teng ha e ntse e fana ka ponahalo ea hore e sebetsa. Ha ho na transactions Kafka. Moreki ha a na bokhoni ba ho etsa tse latelang:

  • Khutlisetsa morao molaetsa oa bohata. Bareki ka bobona ba tlameha ho sebetsana le mekhelo e hlahang ka lebaka la mathata a ho lefa le ho khaoha ha morao, kaha ba ke ke ba itšetleha ka morekisi ho fana ka melaetsa hape.
  • Romella melaetsa ho lihlooho tse ngata ts'ebetsong e le 'ngoe ea athomo. Joalokaha re tla bona haufinyane, taolo holim'a lihlooho tse fapaneng le likaroloana li ka lula mechine e fapaneng sehlopheng sa Kafka se sa hokahanyang litšebelisano ha li romelloa. Nakong ea ha ho ngoloa sena, ho entsoe mosebetsi o mong ho etsa hore sena se khonehe ka KIP-98.
  • Amahanya ho bala molaetsa o le mong ho tsoa sehloohong se seng le ho romela molaetsa o mong sehloohong se seng. Hape, mohaho oa Kafka o itšetlehile ka mechine e mengata e ikemetseng e sebetsang e le bese e le 'ngoe' me ha ho boiteko bo etsoang ho pata sena. Ka mohlala, ha ho na likarolo tsa API tse ka u lumellang ho hokahanya moreki и Mohlahisi khoebong. Ho JMS, sena se fanoa ke ntho setlhopha se kopanetseo ho bōpiloeng ho tsona MessageProducers и MessageConsumers.

Haeba re sa khone ho its'etleha, re ka fana ka semantics joang haufi le tse fanoeng ke mekhoa ea khale ea melaetsa?

Haeba ho na le monyetla oa hore moreki a fokotsehe pele molaetsa o sebetsoa, ​​​​joalo ka nakong ea koluoa ​​​​ea bareki, joale moreki ha a na mokhoa oa ho tseba hore na sehlopha sa bareki ba hae se hlolohetsoe molaetsa ha se abeloa karohano. Kahoo leano le le leng ke ho khutlisetsa offset boemong bo fetileng. Kafka API ea bareki e fana ka mekhoa e latelang bakeng sa sena:

void seek(TopicPartition partition, long offset);
void seekToBeginning(Collection < TopicPartition > partitions);

Mokhoa batla() e ka sebelisoa le mokhoa
offsetsForTimes(Mapa timestampsToSearch) ho kgutlela boemong bo itseng sebakeng se itseng se fetileng.

Ka mokhoa o hlakileng, ho sebelisa mokhoa ona ho bolela hore ho ka etsahala hore melaetsa e meng e neng e sebelitsoe pele e baloe le ho sebetsoa hape. Ho qoba sena, re ka sebelisa ho bala ho se nang kelello, joalo ka ha ho hlalositsoe Khaolong ea 4, ho boloka tlaleho ea melaetsa e neng e kile ea bonoa le ho tlosa e kopitsoang.

Ntle le moo, khoutu ea hau ea bareki e ka bolokoa e le bonolo, ha feela tahlehelo ea molaetsa kapa phetisetso e amoheleha. Ha re nahana ka linyeoe tsa tšebeliso tseo Kafka e atisang ho li sebelisa, tse kang ho sebetsana le liketsahalo tsa log, metrics, ho lateloa ha ho tobetsa, joalo-joalo, rea utloisisa hore tahlehelo ea melaetsa ea motho ka mong e ke ke ea e-ba le tšusumetso e kholo lits'ebetsong tse potolohileng. Maemong a joalo, litekanyetso tsa kamehla li amoheleha ka ho phethahetseng. Ka lehlakoreng le leng, haeba kopo ea hau e hloka ho romella litefo, u tlameha ho hlokomela molaetsa ka mong ka hloko. Tsohle li ipapisitse le moelelo oa taba.

Maikutlo a botho a bontša hore ha matla a melaetsa a ntse a eketseha, boleng ba molaetsa ka mong bo fokotseha. Melaetsa e meholo e atisa ho ba ea bohlokoa ha e shejoa ka mokhoa o kopantsoeng.

Ho fumaneha ho Phahameng

Mokhoa oa Kafka oa ho fumaneha haholo o fapane haholo le mokhoa oa ActiveMQ. Kafka e entsoe ho pota-pota lihlopha tse fokolang moo maemo ohle a barekisi a amohelang le ho aba melaetsa ka nako e le 'ngoe.

Sehlopha sa Kafka se na le maemo a mangata a barekisi a sebetsang ho li-server tse fapaneng. Kafka e ne e etselitsoe ho sebetsa ka lisebelisoa tse tloaelehileng tse ikemetseng, moo node ka 'ngoe e nang le polokelo ea eona e inehetseng. Tšebeliso ea marang-rang a khomaretsoeng polokelo (SAN) ha e khothalletsoe hobane li-node tse ngata tsa compute li ka hlōlisana ka nako.Ыe nako ea polokelo le ho baka likhohlano.

Kafka ke kamehla tsamaiso. Basebelisi ba bangata ba Kafka ha ho mohla ba koalang lihlopha tsa bona mme software e lula e nchafatsa ka ho qala bocha ka tatellano. Sena se finyelloa ka ho netefatsa ho lumellana le mofuta o fetileng oa melaetsa le litšebelisano lipakeng tsa barekisi.

Barekisi ba hokahaneng le sehlopha sa li-server ZooKeeper, e sebetsang e le registry ea data ea tlhophiso mme e sebelisetsoa ho hokahanya likarolo tsa morekisi e mong le e mong. ZooKeeper ka boeona ke sistimi e ajoang e fanang ka phihlello e phahameng ka ho pheta-pheta tlhahisoleseling ka ho theha quorum.

Tabeng ea motheo, sehlooho se thehiloe sehlopheng sa Kafka se nang le thepa e latelang:

  • Palo ea li-partitions. Joalokaha ho boletsoe pejana, boleng bo nepahetseng bo sebelisitsoeng mona bo itšetlehile ka boemo bo lakatsehang ba 'malo o bapileng.
  • Replication factor (factor) e etsa qeto ea hore na ke maemo a makae a barekisi sehlopheng a lokelang ho ba le lintlha tsa karohano ena.

E sebelisa ZooKeepers bakeng sa ho hokahanya, Kafka e leka ho aba likarolo tse ncha ka nepo har'a barekisi ba sehlopha. Sena se etsoa ke ketsahalo e le 'ngoe e sebetsang e le Molaoli.

Ka nako ea ho sebetsa bakeng sa karolo ka 'ngoe ea sehlooho Molaoli abela morekisi mesebetsi moetapele (moeta-pele, monghali, moetsi) le balateli (balateli, makhoba, ba tlase). Morekisi, ea sebetsang e le moetapele oa karohano ena, o ikarabella ho amohela melaetsa eohle e rometsoeng ho eona ke bahlahisi le ho aba melaetsa ho bareki. Ha melaetsa e romelloa karolong ea sehlooho, e fetisetsoa ho li-broker tsohle tse sebetsang e le balateli ba karohano eo. Node e 'ngoe le e' ngoe e nang le likutu bakeng sa karohano e bitsoa replica. Morekisi a ka sebetsa e le moetapele oa likarolo tse ling hape e le molateli oa ba bang.

Ho bitsoa molateli ea nang le melaetsa eohle e tšoaroang ke moetapele kopi e kopantsweng (setšoantšo se boemong ba ho amahanngoa, replica e lumellanang). Haeba morekisi ea sebetsang e le moetapele oa karohano a theoha, morekisi ofe kapa ofe ea nakong kapa ea hokahaneng bakeng sa karohano eo a ka nka karolo ea moetapele. Ke moralo o tsitsitseng ka tsela e makatsang.

Karolo ea tlhophiso ea moetsi ke parameter acks, e etsang qeto ea hore na ke likopi tse kae tse lokelang ho amohela (ho amohela) ho fumana molaetsa pele khoele ea kopo e tsoela pele ho romella: 0, 1, kapa kaofela. Haeba e setetsoe ho bohle, joale ha molaetsa o amoheloa, moeta-pele o tla romela tiiso ho mohlahisi hang ha a fumana litiiso (litlaleho) tsa rekoto ho tsoa ho lintlha tse 'maloa (ho kenyeletsoa ka boeona) tse hlalositsoeng ke boemo ba sehlooho. min.insync.replicas (ka ho feletseng 1). Haeba molaetsa o ke ke oa phetoa ka katleho, mohlahisi o tla lahlela mokhelo oa kopo (NotEnoughReplicas kapa NotEnoughReplicasAfterAppend).

Tlhophiso e tloaelehileng e theha sehlooho se nang le ntlha e pheta-phetoang ea 3 (moeta-pele a le mong, balateli ba 1 karohano) le parameter. min.insync.replicas e behiloe ho 2. Tabeng ena, sehlopha se tla lumella e mong oa barekisi ba laolang karolo ea sehlooho ho theoha ntle le ho ama likopo tsa bareki.

Sena se re khutlisetsa khoebong e seng e ntse e tloaelehile lipakeng tsa ts'ebetso le ts'epo. Ho pheta-pheta ho etsahala ka litšenyehelo tsa nako e eketsehileng ea ho leta bakeng sa netefatso (liteboho) ho tsoa ho balateli. Leha ho le joalo, hobane e sebetsa ka tsela e ts'oanang, ho pheta-pheta bonyane li-node tse tharo ho na le ts'ebetso e ts'oanang le tse peli (ho hlokomoloha keketseho ea tšebeliso ea marang-rang a marang-rang).

Ka ho sebelisa leano lena la ho pheta-pheta, Kafka ka bohlale o qoba tlhoko ea ho ngola molaetsa o mong le o mong ho disk ka ts'ebetso. sync(). Molaetsa o mong le o mong o rometsoeng ke mohlahisi o tla ngolloa lethathamong la karohano, empa joalo ka ha ho tšohliloe Khaolong ea 2, ho ngolla faele qalong ho etsoa buffer ea sistimi ea ts'ebetso. Haeba molaetsa ona o phetoa ho mohlala o mong oa Kafka 'me o le mohopolong oa oona, ho lahleheloa ke moetapele ha ho bolele hore molaetsa ka boeona o ne o lahlehile - o ka nkoa ke replica e lumellanang.
Ho hana ho etsa opereishene sync() ho bolela hore Kafka e ka amohela melaetsa ka potlako kamoo e ka e ngolang ka hlooho. Ka lehlakoreng le leng, ha nako e telele u ka qoba ho senya memori ho disk, ho molemo. Ka lebaka lena, ho tloaelehile hore barekisi ba Kafka ba abeloe 64 GB kapa ho feta mohopolong. Tšebeliso ena ea memori e bolela hore mohlala o le mong oa Kafka o ka matha habonolo ka lebelo la makhetlo a likete ho feta morekisi oa melaetsa oa setso.

Kafka e ka hlophisoa hape ho sebelisa ts'ebetso sync() ho liphutheloana tsa melaetsa. Kaha ntho e 'ngoe le e' ngoe e Kafka e itšetlehile ka liphutheloana, e sebetsa hantle bakeng sa linyeoe tse ngata tsa tšebeliso 'me ke sesebelisoa se molemo ho basebelisi ba hlokang litiiso tse matla haholo. Boholo ba ts'ebetso e hloekileng ea Kafka e tsoa melaetsa e rometsoeng ho broker e le lipakete le hore melaetsa ena e baloa ho tsoa ho morekisi ka li-blocks tse latellanang li sebelisa. kopi ea zero ts'ebetso (ts'ebetso eo ka eona mosebetsi oa ho kopitsa data ho tloha sebakeng se seng sa memori ho ea ho se seng ha se etsoe). Ea ho qetela ke ts'ebetso e kholo ea ts'ebetso le phaello ea lisebelisoa 'me e ka khoneha feela ka ho sebelisa sebopeho sa data sa marang-rang se hlalosang morero oa ho arola.

Ts'ebetso e betere haholo e ka etsahala sehlopheng sa Kafka ho feta ka morekisi a le mong oa Kafka, hobane likarohano tsa lihlooho li ka ama mechini e mengata e fapaneng.

Liphello

Khaolong ena, re shebile kamoo meralo ea Kafka e fetolang likamano lipakeng tsa bareki le barekisi ho fana ka phaephe ea melaetsa e matla ka mokhoa o makatsang, e nang le phallo e fetang makhetlo a mangata ho feta ea morekisi ea tloaelehileng oa melaetsa. Re buisane ka ts'ebetso eo e e sebelisang ho fihlela sena mme ra sheba ka bokhutšoanyane sebopeho sa lits'ebetso tse fanang ka ts'ebetso ena. Khaolong e latelang, re tla shebana le mathata a tloaelehileng ao likopo tsa melaetsa li hlokang ho a rarolla le ho buisana ka maano a ho sebetsana le ona. Re tla phethela khaolo ka ho hlalosa mokhoa oa ho bua ka mahlale a melaetsa ka kakaretso hore o tle o tsebe ho lekola hore na a tšoaneleha bakeng sa linyeoe tsa ts'ebeliso ea hau.

Karolo e fetoletsoeng e fetileng: Ho utloisisa barekisi ba melaetsa. Ho ithuta mekhoa ea ho romellana melaetsa le ActiveMQ le Kafka. Khaolo ea 1

Phetolelo e entsoe: tele.gg/middle_java

E tla ntšetsoa pele…

Ke basebelisi ba ngolisitsoeng feela ba ka kenyang letsoho phuputsong. kenaka kopo.

Na Kafka e sebelisoa mokhatlong oa hau?

  • hore

  • No

  • E ne e sebelisoa pele, hona joale

  • Re rerile ho sebelisa

Basebelisi ba 38 ba ile ba khetha. Basebelisi ba 8 ba ile ba hana.

Source: www.habr.com

Eketsa ka tlhaloso