Fahimtar dillalan sako. Koyan injiniyoyin saƙo tare da ActiveMQ da Kafka. Babi na 3. Kafka

Ci gaba da fassarar ƙaramin littafi:
Fahimtar Dillalan Saƙo
marubuci: Jakub Korab, mawallafi: O'Reilly Media, Inc., kwanan watan da aka buga: Yuni 2017, ISBN: 9781492049296.

Bangaren da aka fassara a baya: Fahimtar dillalan sako. Koyan injiniyoyin saƙo tare da ActiveMQ da Kafka. Babi na 1 Gabatarwa

BABI NA 3

Kafka

Kamfanin LinkedIn ne ya kirkiro Kafka don sanin wasu iyakoki na dillalan sakonni na gargajiya da kuma guje wa kafa dillalan sakonni da yawa don mu’amalar maki-da-baki, wanda aka bayyana a cikin wannan littafi a karkashin “Scaling up and out” a shafi na 28. Amfani da shari'o'in LinkedIn ya dogara ne akan shigar da bayanai masu yawa ta hanya ɗaya, kamar danna shafi da rajistar shiga, yayin da har yanzu yana ba da damar yin amfani da bayanan ta tsarin da yawa ba tare da tasiri ga yawan samarwa ko wasu masu amfani ba. A gaskiya ma, dalilin da ya sa Kafka ya wanzu shine don samun nau'in gine-ginen saƙon da Bututun Bayanai na Duniya ya bayyana.

Ganin wannan babban burin, wasu buƙatu sun taso a zahiri. Kafka ya kamata:

  • Yi sauri sosai
  • Bayar da ƙarin bandwidth lokacin aiki tare da saƙonni
  • Goyan bayan Mawallafi-Subscriber da Samfuran Nuna-zuwa-Point
  • Kada ku rage gudu tare da ƙara masu amfani. Misali, aikin duka jerin gwano da jigo a cikin ActiveMQ yana raguwa yayin da adadin masu siye da ke kan wurin da ake ci gaba da girma.
  • Kasance mai daidaitawa a kwance; idan dillali ɗaya wanda ya ci gaba da saƙo zai iya yin haka a matsakaicin saurin faifai, to yana da ma'ana ya wuce misalin dillali guda ɗaya don haɓaka aiki.
  • Iyakance damar adanawa da sake dawo da saƙonni

Don cimma duk wannan, Kafka ta ɗauki tsarin gine-gine wanda ya sake fasalin ayyuka da alhakin abokan ciniki da dillalan saƙo. Samfurin JMS yana da tsarin dillali sosai, inda dillali ke da alhakin rarraba saƙonni kuma abokan ciniki kawai su damu da aikawa da karɓar saƙonni. Kafka, a gefe guda, yana da mahimmanci ga abokin ciniki, tare da abokin ciniki yana ɗaukar abubuwa da yawa na dillali na gargajiya, kamar rarraba daidaitattun saƙonnin da suka dace ga masu amfani, don musanyawa ga dillali mai sauri da ƙima. Ga mutanen da suka yi aiki tare da tsarin saƙon gargajiya, aiki tare da Kafka yana buƙatar canji na asali.
Wannan jagorar aikin injiniya ta haifar da ƙirƙirar kayan aikin saƙon da ke da ikon haɓaka kayan aiki ta umarni masu girma da yawa idan aka kwatanta da dillali na yau da kullun. Kamar yadda za mu gani, wannan hanya ta zo tare da ciniki, wanda ke nufin cewa Kafka ba ta dace da wasu nau'in nauyin aiki da shigar da software ba.

Samfuran Ƙofar Haɗin Kai

Don cika buƙatun da aka bayyana a sama, Kafka ta haɗu da buga-biyan kuɗi da saƙon-zuwa-aya a ƙarƙashin nau'in manufa ɗaya - batu. Wannan yana da ruɗani ga mutanen da suka yi aiki tare da tsarin aika saƙon, inda kalmar "maudu'i" ke nufin tsarin watsa shirye-shirye wanda (daga jigon) karatu ba ya dawwama. Ya kamata a ɗauki batutuwan Kafka a matsayin nau'in makoma, kamar yadda aka bayyana a gabatarwar wannan littafi.

Ga ragowar wannan babi, sai dai idan mun bayyana wani abu a sarari, kalmar "maudu'i" zai yi nuni ga batun Kafka.

Don cikakken fahimtar yadda batutuwa ke aiki da abin da garantin da suke bayarwa, muna buƙatar fara duba yadda ake aiwatar da su a cikin Kafka.
Kowane batu a cikin Kafka yana da tarihin kansa.
Masu samarwa da ke aika saƙonni zuwa Kafka suna rubutawa zuwa wannan log ɗin, kuma masu amfani suna karantawa daga log ɗin ta amfani da masu nuni waɗanda ke ci gaba koyaushe. Lokaci-lokaci, Kafka yana goge tsoffin sassa na log ɗin, ko an karanta saƙonnin da ke cikin waɗannan sassan ko a'a. Babban ɓangaren ƙirar Kafka shine cewa dillali bai damu ba idan an karanta saƙonni ko a'a - wannan shine alhakin abokin ciniki.

Kalmomin "log" da "pointer" ba sa bayyana a ciki Dokokin Kafka. Ana amfani da waɗannan sanannun kalmomin nan don taimakawa fahimta.

Wannan samfurin ya sha bamban da ActiveMQ, inda ake adana saƙon dukkan layukan layi a cikin log ɗin guda ɗaya, kuma dillali ya yi alama saƙon a matsayin share bayan an karanta su.
Bari yanzu mu ɗan zurfafa mu dubi gunkin jigon daki-daki.
Littafin Kafka ya ƙunshi ɓangarori da yawa (Hoto na 3-1). Kafka yana ba da garanti mai tsauri a kowane bangare. Wannan yana nufin cewa za a karanta saƙonnin da aka rubuta zuwa ga ɓangaren a wani tsari guda ɗaya. Ana aiwatar da kowane bangare azaman fayil ɗin log na birgima wanda ya ƙunshi wani juzu'i (subset) na duk saƙonnin da masu yin sa suka aika zuwa ga batun. Taken da aka ƙirƙira ya ƙunshi, ta tsohuwa, bangare ɗaya. Tunanin ɓangarori shine babban ra'ayi na Kafka don sikelin kwance.

Fahimtar dillalan sako. Koyan injiniyoyin saƙo tare da ActiveMQ da Kafka. Babi na 3. Kafka
Hoto na 3-1. Kafka Partitions

Lokacin da furodusa ya aika da saƙo zuwa batun Kafka, yana yanke shawarar wane bangare ne zai aika saƙon. Za mu duba wannan dalla-dalla nan gaba.

Sakonnin karantawa

Abokin ciniki wanda ke son karanta saƙonnin yana sarrafa alamar mai suna da ake kira kungiyar mabukaci, wanda ke nuni da biya diyya saƙonni a cikin bangare. Matsala matsayi ne na karuwa wanda ke farawa a 0 a farkon bangare. Wannan rukunin mabukaci, da aka ambata a cikin API ta hanyar ƙayyadadden ƙayyadadden ƙungiyar_id, yayi daidai da mabukaci mai ma'ana ɗaya ko tsarin.

Yawancin tsarin aika saƙon suna karanta bayanai daga wurin da aka nufa ta amfani da lokuta da yawa don aiwatar da saƙonni a layi daya. Don haka, yawanci za a sami yawancin mabukaci da ke raba rukunin mabukaci iri ɗaya.

Ana iya wakilta matsalar karatu kamar haka:

  • Taken yana da bangarori da yawa
  • Ƙungiyoyin masu amfani da yawa suna iya amfani da batu a lokaci guda
  • Ƙungiya na masu amfani za su iya samun lokuta daban-daban

Wannan matsala ce marar ƙaranci da yawa zuwa da yawa. Don fahimtar yadda Kafka ke tafiyar da alaƙa tsakanin ƙungiyoyin mabukaci, misalan mabukaci, da ɓangarori, bari mu kalli jerin yanayin yanayin karatu masu rikitarwa.

Ƙungiyoyin masu amfani da masu amfani

Mu dauki a matsayin mafari jigo mai bangare daya (Hoto na 3-2).

Fahimtar dillalan sako. Koyan injiniyoyin saƙo tare da ActiveMQ da Kafka. Babi na 3. Kafka
Hoto na 3-2. Mabukaci ya karanta daga partition

Lokacin da misalin mabukaci ya haɗa tare da nasa group_id zuwa wannan batu, ana sanya shi ɓangaren karantawa da ƙari a cikin ɓangaren. Matsayin wannan kashe-kashe an saita shi a cikin abokin ciniki azaman mai nuni ga matsayi na baya-bayan nan (sabon saƙo) ko matsayi na farko (saƙo mafi tsufa). Mabukaci na buƙatun (zaɓe) saƙonni daga batun, wanda ke sa ana karanta su bi da bi daga log ɗin.
Matsayin kashewa ana mayar da shi akai-akai zuwa Kafka kuma ana adana shi azaman saƙonni a cikin jigon ciki _masu amfani. Har yanzu ba a share saƙonnin karantawa ba, ba kamar dillali na yau da kullun ba, kuma abokin ciniki na iya sake dawo da saƙon don sake aiwatar da saƙon da aka riga aka gani.

Lokacin da mabukaci mai ma'ana na biyu ya haɗa ta amfani da rukuni_id daban, yana sarrafa mai nuni na biyu wanda ya zaman kansa na farko (Hoto na 3-3). Don haka, batun Kafka yana aiki kamar jerin gwano inda akwai mabukaci ɗaya kuma kamar batun bugu na yau da kullun-subscribe (pub-sub) wanda masu amfani da yawa ke biyan kuɗi zuwa, tare da ƙarin fa'ida cewa ana adana duk saƙonni kuma ana iya sarrafa su sau da yawa.

Fahimtar dillalan sako. Koyan injiniyoyin saƙo tare da ActiveMQ da Kafka. Babi na 3. Kafka
Hoto na 3-3. Masu amfani biyu a cikin ƙungiyoyin mabukaci daban-daban suna karantawa daga bangare ɗaya

Masu amfani a cikin ƙungiyar mabukaci

Lokacin da wani mabukaci ɗaya ke karanta bayanai daga ɓangaren, yana da cikakken iko na mai nuni da aiwatar da saƙonni kamar yadda aka bayyana a sashin da ya gabata.
Idan an haɗa yawancin masu amfani da su tare da wannan group_id zuwa wani batu mai bangare ɗaya, to, misalin da ya haɗa ƙarshe za a ba shi iko akan mai nuni kuma daga wannan lokacin zai karɓi duk saƙonni (Hoto na 3-4).

Fahimtar dillalan sako. Koyan injiniyoyin saƙo tare da ActiveMQ da Kafka. Babi na 3. Kafka
Hoto na 3-4. Masu amfani biyu a cikin rukunin mabukaci iri ɗaya suna karantawa daga bangare ɗaya

Wannan yanayin sarrafawa, wanda adadin mabukaci ya zarce adadin ɓangarori, ana iya ɗaukar shi azaman nau'in mabukaci na keɓancewa. Wannan na iya zama da amfani idan kuna buƙatar "mai aiki-mai aiki" (ko "zafi-dumi") tari na misalin mabukatan ku, kodayake gudanar da masu amfani da yawa a layi daya ("active-active" ko "zafi-zafi") ya fi dacewa fiye da masu amfani A cikin jiran aiki.

Wannan halin rarraba saƙon da aka kwatanta a sama na iya zama abin mamaki idan aka kwatanta da yadda jerin gwano na JMS na yau da kullun ke aiki. A cikin wannan ƙirar, za a rarraba saƙon da aka aika zuwa jerin gwano tsakanin masu siye biyu.

Mafi sau da yawa, idan muka ƙirƙiri lokuta da yawa na masu amfani, muna yin hakan ko dai don aiwatar da saƙonni a layi daya, ko don ƙara saurin karatu, ko kuma ƙara kwanciyar hankali na tsarin karatu. Tun da misalin mabukaci ɗaya ne kawai zai iya karanta bayanai daga bangare a lokaci guda, ta yaya ake samun hakan a Kafka?

Hanya ɗaya don yin wannan ita ce yin amfani da misalin mabukaci guda ɗaya don karanta duk saƙon kuma a tura su zuwa tafkin zaren. Yayin da wannan hanyar ta ƙara haɓaka kayan aiki, yana ƙara rikitaccen tunanin mabukaci kuma ba ya yin wani abu don ƙara ƙarfin tsarin karatu. Idan kwafin mabukaci ɗaya ya faɗi saboda gazawar wutar lantarki ko makamancin haka, to ragi ya tsaya.

Hanyar canonical don magance wannan matsala a cikin Kafka shine amfani da bОƙarin partitions.

Rarraba

Rarraba su ne babban hanyar daidaita karatu da daidaita batun fiye da bandwidth na misalin dillali ɗaya. Don ƙarin fahimtar wannan, bari mu yi la'akari da halin da ake ciki inda akwai batun da ke da bangarori biyu kuma mabukaci ɗaya ya yi rajista ga wannan batu (Hoto na 3-5).

Fahimtar dillalan sako. Koyan injiniyoyin saƙo tare da ActiveMQ da Kafka. Babi na 3. Kafka
Hoto na 3-5. Mabukaci ɗaya yana karantawa daga ɓangarori da yawa

A cikin wannan yanayin, ana ba mabukaci iko akan masu nuni da suka yi daidai da group_id ɗin sa a cikin ɓangarori biyu kuma ya fara karanta saƙonni daga ɓangarori biyu.
Lokacin da aka ƙara ƙarin mabukaci don wannan rukunin_id zuwa wannan batu, Kafka ta sake gano ɗayan ɓangarori daga na farko zuwa mabukaci na biyu. Bayan haka, kowane misali na mabukaci zai karanta daga bangare ɗaya na jigon (Hoto na 3-6).

Don tabbatar da cewa ana sarrafa saƙon a layi daya cikin zaren guda 20, kuna buƙatar aƙalla ɓangarori 20. Idan akwai ƙarancin ɓangarori, za a bar ku tare da masu amfani waɗanda ba su da wani abin da za su yi aiki akai, kamar yadda aka bayyana a baya a cikin tattaunawa na keɓaɓɓun masu amfani.

Fahimtar dillalan sako. Koyan injiniyoyin saƙo tare da ActiveMQ da Kafka. Babi na 3. Kafka
Hoto na 3-6. Masu amfani biyu a rukunin mabukaci iri ɗaya suna karantawa daga ɓangarori daban-daban

Wannan makirci yana rage rikitattun dillalin Kafka sosai idan aka kwatanta da rarraba saƙon da ake buƙata don kula da layin JMS. Anan ba kwa buƙatar damuwa game da abubuwa masu zuwa:

  • Wane mabukaci ne ya kamata ya karɓi saƙo na gaba, dangane da rabon zagaye-zagaye, ƙarfin halin yanzu na buffers prefetch, ko saƙonnin da suka gabata (kamar na ƙungiyoyin saƙon JMS).
  • Waɗanne saƙonni ne aka aika zuwa ga masu amfani da kuma ko ya kamata a sake isar da su idan an gaza.

Duk abin da dillali na Kafka ya yi shi ne aika saƙonnin jeri ga mabukaci lokacin da na ƙarshe ya buƙace su.

Duk da haka, abubuwan da ake buƙata don daidaitawa da sake karantawa da sake aika saƙonnin da suka gaza ba su tafi ba - alhakin su kawai ya wuce daga dillali zuwa ga abokin ciniki. Wannan yana nufin cewa dole ne a yi la'akari da su a cikin lambar ku.

Aika saƙonni

Hakki ne da ya rataya a wuyan wanda ya shirya wannan sakon ya yanke shawarar ko wane bangare ne zai aika da sako. Don fahimtar hanyar da ake yin hakan, da farko muna buƙatar yin la'akari da ainihin ainihin abin da muke aikawa.

Ganin cewa a cikin JMS muna amfani da tsarin saƙo tare da metadata (masu kai da kaddarorin) da kuma jiki mai ɗauke da kaya mai nauyi (aiki), a cikin Kafka saƙon shine. biyu "key-darajar". Ana aika nauyin kuɗin saƙon azaman ƙima. Makullin, a gefe guda, ana amfani da shi ne don rarrabawa kuma dole ne ya ƙunshi kasuwanci dabaru takamaiman keydon sanya saƙonni masu alaƙa a cikin bangare ɗaya.

A cikin Babi na 2, mun tattauna yanayin yin fare ta kan layi inda ake buƙatar sarrafa abubuwan da suka danganci su ta hanyar mabukaci guda:

  1. An saita asusun mai amfani.
  2. Ana saka kuɗi zuwa asusun.
  3. Ana yin fare wanda ke cire kuɗi daga asusun.

Idan kowane taron saƙo ne da aka buga zuwa wani batu, to, maɓallin halitta zai zama ID na asusun.
Lokacin da aka aika saƙo ta amfani da API ɗin Kafka Producer, ana tura shi zuwa aikin partition wanda, idan aka yi la’akari da saƙon da kuma halin da ƙungiyar Kafka ke ciki a yanzu, tana mayar da ID ɗin ɓangaren da ya kamata a aika da saƙon. Ana aiwatar da wannan fasalin a cikin Java ta hanyar Interitioner Partitioner.

Wannan mu'amala yayi kama da haka:

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

Aiwatar da Partitioner yana amfani da tsoho na gama-gari hashing algorithm akan maɓalli don tantance ɓangaren, ko zagaye-robin idan ba a ƙayyade maɓalli ba. Wannan ƙimar tsohuwar tana aiki da kyau a mafi yawan lokuta. Duk da haka, a nan gaba za ku so ku rubuta naku.

Rubuta dabarun rarraba ku

Bari mu kalli misali inda kake son aika metadata tare da ɗaukar nauyin saƙo. Abubuwan da aka biya a cikin misalinmu umarni ne don yin ajiya zuwa asusun wasan. Umarni wani abu ne da muke so a ba mu garantin cewa ba za a gyara shi akan watsawa ba kuma muna son tabbatar da cewa amintaccen tsarin sama ne kawai zai iya fara wannan koyarwar. A wannan yanayin, tsarin aikawa da karɓa sun yarda da amfani da sa hannu don tabbatar da saƙon.
A cikin JMS na al'ada, muna kawai ayyana kayan "sa hannu na saƙo" kuma mu ƙara shi zuwa saƙon. Koyaya, Kafka baya samar mana da hanyar wucewa metadata, kawai maɓalli da ƙima.

Tun da ƙimar kuɗin kuɗin canja wurin banki ne wanda muke son adana amincinsa, ba mu da wani zaɓi face mu ayyana tsarin bayanan da za mu yi amfani da shi a cikin maɓalli. Ganin cewa muna buƙatar ID na asusun don rarrabawa, tunda duk saƙonnin da suka shafi asusu dole ne a sarrafa su cikin tsari, za mu fito da tsarin JSON mai zuwa:

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

Saboda darajar sa hannu za ta bambanta dangane da abin da ake biya, tsohuwar dabarar hashing na keɓancewa na Partitioner ba zai dogara da saƙon da ke da alaƙa da rukuni ba. Don haka, za mu buƙaci rubuta dabarun kanmu waɗanda za su rarraba wannan maɓalli kuma mu raba ƙimar asusun ID.

Kafka ya haɗa da rajistan rajista don gano ɓarna na saƙonni a cikin shagon kuma yana da cikakken tsarin tsaro. Ko da haka, takamaiman buƙatun masana'antu, kamar wanda ke sama, wani lokaci suna bayyana.

Dabarun rarrabuwar mai amfani dole ne su tabbatar da cewa duk saƙonnin da ke da alaƙa sun ƙare a bangare ɗaya. Duk da yake wannan yana da sauƙi, buƙatun na iya zama mai rikitarwa ta mahimmancin yin odar saƙonnin da ke da alaƙa da yadda kayyade adadin ɓangarori a cikin wani batu yake.

Adadin ɓangarori a cikin wani batu na iya canzawa akan lokaci, saboda ana iya ƙara su idan zirga-zirgar zirga-zirga ta wuce tsammanin farko. Don haka, ana iya haɗa maɓallan saƙo tare da ɓangaren da aka tura su tun asali, wanda ke nuna wani yanki da za a raba tsakanin masu samarwa.

Wani abin da za a yi la'akari da shi shi ne har ma da rarraba saƙonni a cikin sassan. Yawanci, ba a rarraba maɓallai daidai gwargwado a cikin saƙonnin, kuma ayyukan hash ba su da garantin rarraba saƙon da ya dace don ƙaramin saitin maɓalli.
Yana da mahimmanci a lura cewa duk da ka zaɓi raba saƙonni, mai raba shi na iya buƙatar sake amfani da shi.

Yi la'akari da abin da ake buƙata don yin kwafin bayanai tsakanin gungu na Kafka a wurare daban-daban. Don wannan dalili, Kafka yana zuwa da kayan aikin layin umarni da ake kira MirrorMaker, wanda ake amfani da shi don karanta saƙonni daga gungu ɗaya da tura su zuwa wani.

MirrorMaker dole ne ya fahimci maɓallan abin da aka kwafi don kiyaye tsarin dangi tsakanin saƙo yayin da ake yin kwafi tsakanin gungu, tunda adadin ɓangaren wannan batu ƙila ba zai zama iri ɗaya ba a cikin gungu biyu.

Dabarun rarrabuwa na al'ada ba su da yawa, saboda tsoho hashing ko zagaye robin yana aiki da kyau a mafi yawan al'amuran. Koyaya, idan kuna buƙatar garantin oda mai ƙarfi ko buƙatar cire metadata daga abubuwan da aka biya, to rarraba wani abu ne da yakamata ku duba sosai.

Ƙarfafawa da fa'idodin aiki na Kafka sun zo ne daga canza wasu nauyin dillali na gargajiya ga abokin ciniki. A wannan yanayin, an yanke shawara don rarraba saƙonni masu alaƙa tsakanin masu amfani da yawa da ke aiki a layi daya.

Dillalan JMS kuma suna buƙatar magance irin waɗannan buƙatun. Abin sha'awa shine, hanyar aika saƙonni masu alaƙa zuwa mabukaci iri ɗaya, wanda aka aiwatar ta hanyar ƙungiyoyin saƙon JMS (saɓani akan dabarun daidaita nauyi (SLB)), kuma yana buƙatar mai aikawa ya sanya alamar saƙon kamar alaƙa. Dangane da JMS, dillali ne ke da alhakin aika wannan rukunin na saƙonnin da suka danganci mabukaci ɗaya daga cikin da yawa, da kuma canja wurin mallakar ƙungiyar idan mabukaci ya faɗi.

Yarjejeniyar Furodusa

Rarraba ba shine kawai abin da za a yi la'akari ba lokacin aika saƙonni. Bari mu kalli hanyoyin aikawa () na ajin Producer a cikin Java API:

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

Ya kamata a lura nan da nan cewa duka hanyoyin biyu sun dawo nan gaba, wanda ke nuna cewa ba a aiwatar da aikin aika nan da nan ba. Sakamakon shi ne cewa an rubuta saƙo (ProducerRecord) zuwa ga mai aika buffer don kowane bangare mai aiki kuma a aika zuwa dillali azaman zaren bango a cikin ɗakin karatu na abokin ciniki na Kafka. Duk da yake wannan yana sa abubuwa su yi sauri da sauri, yana nufin cewa aikace-aikacen da ba shi da kwarewa zai iya rasa saƙonni idan an dakatar da tsarinsa.

Kamar koyaushe, akwai hanyar da za a sa aikin aikawa ya fi aminci a cikin kuɗin aiki. Ana iya saita girman wannan buffer zuwa 0, kuma za a tilasta zaren aika aikace-aikacen ya jira har sai an kammala aikawa da sakon zuwa dillali, kamar haka:

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

Karin bayani game da karanta sakonni

Saƙonnin karantawa suna da ƙarin rikiɗa waɗanda ke buƙatar hasashe. Ba kamar JMS API ba, wanda zai iya tafiyar da mai sauraron saƙo don amsa saƙo, da Mai amfani da Kafka zabe kawai. Bari mu dubi hanyar sosai zabe()ana amfani da shi don wannan dalili:

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

Ƙimar dawowar hanyar ita ce tsarin kwantena mai ɗauke da abubuwa da yawa rikodin mabukaci daga yuwuwar ɓangarorin da yawa. rikodin mabukaci ita kanta abu ne mai riƙe da maɓalli-darajar maɓalli mai alaƙa da metadata, kamar ɓangaren da aka samo shi.

Kamar yadda aka tattauna a Babi na 2, dole ne mu tuna abin da ke faruwa da saƙonni bayan an yi nasara ko kuma ba a yi nasara ba, misali, idan abokin ciniki ya kasa sarrafa saƙon ko kuma idan ya zubar. A cikin JMS, an sarrafa wannan ta yanayin yarda. Dillalin zai share saƙon da aka sarrafa cikin nasara, ko kuma ya sake isar da ɗanyen ko saƙon na jabu (yana zaton an yi amfani da ciniki).
Kafka yana aiki daban. Ba a goge saƙonni a cikin dillali bayan karantawa, kuma abin da ke faruwa akan gazawar shine alhakin lambar tantancewa da kanta.

Kamar yadda muka fada, ƙungiyar mabukaci tana da alaƙa da kashewa a cikin log ɗin. Matsayin log ɗin da ke da alaƙa da wannan kashewa yayi daidai da saƙo na gaba da za a bayar don amsawa zabe(). Ma'anar lokacin da wannan haɓaka ya karu yana da mahimmanci ga karatu.

Komawa ga tsarin karatun da aka tattauna a baya, sarrafa saƙon ya ƙunshi matakai uku:

  1. Dawo da sako don karantawa.
  2. Tsara saƙon.
  3. Tabbatar da saƙo.

Mai amfani da Kafka ya zo tare da zaɓi na daidaitawa kunna.auto.commit. Wannan saitin tsoho ne akai-akai da ake amfani da shi, kamar yadda aka saba da saitunan da ke ɗauke da kalmar "atomatik".

Kafin Kafka 0.10, abokin ciniki da ke amfani da wannan zaɓi zai aika saƙon ƙarshe da aka karanta akan kira na gaba. zabe() bayan sarrafawa. Wannan yana nufin cewa duk saƙonnin da aka riga aka samo za a iya sake sarrafa su idan abokin ciniki ya riga ya sarrafa su amma an lalata su ba zato ba tsammani kafin ya kira. zabe(). Domin dillalin ba ya adana kowace jiha game da sau nawa aka karanta saƙon, mabukaci na gaba wanda ya dawo da wannan sakon ba zai san wani mummunan abu ya faru ba. Wannan dabi'ar ta kasance ta bogi. Matsakaicin an yi shi ne kawai idan an sarrafa saƙon cikin nasara, amma idan abokin ciniki ya zubar, dillalin zai sake aika wannan saƙon zuwa wani abokin ciniki. Wannan halin ya yi daidai da garantin isar da saƙo"akalla sau daya".

A cikin Kafka 0.10, an canza lambar abokin ciniki ta yadda ɗakin ɗakin karatu na abokin ciniki ke haifar da ƙaddamarwa lokaci-lokaci, kamar yadda aka tsara. auto.commit.interval.ms. Wannan halin yana wani wuri tsakanin yanayin JMS AUTO_ACKNOWLEDGE da DUPS_OK_ACKNOWLEDGE. Lokacin amfani da autocommit, ana iya ƙaddamar da saƙonni ba tare da la'akari da ko an sarrafa su da gaske ba - wannan na iya faruwa a yanayin jinkirin mabukaci. Idan mabukaci ya zubar, mabukaci na gaba zai karɓi saƙon, wanda zai fara daga wurin da aka sadaukar, wanda zai iya haifar da saƙon da aka rasa. A wannan yanayin, Kafka bai rasa saƙonnin ba, lambar karatun kawai ba ta aiwatar da su ba.

Wannan yanayin yana da alkawari iri ɗaya kamar yadda yake a cikin sigar 0.9: ana iya sarrafa saƙon, amma idan ya gaza, ƙila ba za a yi kashewa ba, mai yuwuwar sa isar da ninki biyu. Ƙarin saƙonnin da kuke ɗauka lokacin aiwatarwa zabe(), yawan wannan matsalar.

Kamar yadda aka tattauna a cikin “Karanta Saƙonni daga jerin gwano” a shafi na 21, babu wani abu kamar isar da saƙo sau ɗaya a cikin tsarin saƙon lokacin da aka yi la’akari da yanayin gazawa.

A cikin Kafka, akwai hanyoyi guda biyu don yin (ƙaddara) kashewa (kayyade): ta atomatik kuma da hannu. A kowane hali, ana iya sarrafa saƙon sau da yawa idan an sarrafa saƙon amma ya gaza kafin ƙaddamarwa. Hakanan zaka iya zaɓar kar a sarrafa saƙon kwata-kwata idan aikin ya faru a bango kuma an kammala lambar ku kafin a iya sarrafa ta (watakila a cikin Kafka 0.9 da baya).

Kuna iya sarrafa aiwatar da aikin kashe kuɗi na hannu a cikin API na Kafka ta hanyar saita siga kunna.auto.commit don yin ƙarya da kiran ɗaya daga cikin hanyoyin masu zuwa:

void commitSync();
void commitAsync();

Idan kuna son aiwatar da saƙon "aƙalla sau ɗaya", dole ne ku aiwatar da kashewa da hannu ƙaddamar Sync()ta hanyar aiwatar da wannan umarni nan da nan bayan sarrafa saƙonnin.

Waɗannan hanyoyin ba sa ba da damar amincewa da saƙonnin kafin a sarrafa su, amma ba sa yin wani abu don kawar da yuwuwar jinkirin sarrafawa yayin ba da kamanni na kasuwanci. Babu ciniki a Kafka. Abokin ciniki bashi da ikon yin abubuwa masu zuwa:

  • Mirgine saƙon karya ta atomatik. Masu amfani da kansu dole ne su kula da keɓancewa da suka taso daga matsalar biyan kuɗi da kuma ɓata lokaci, saboda ba za su iya dogara ga dillali don sake isar da saƙonni ba.
  • Aika saƙonni zuwa batutuwa da yawa a cikin aikin atomic guda ɗaya. Kamar yadda za mu gani nan ba da jimawa ba, iko akan batutuwa daban-daban da ɓangarori na iya zama akan injuna daban-daban a cikin gungu na Kafka waɗanda ba sa daidaita ma'amaloli lokacin aika su. A lokacin rubuta wannan, an yi wasu ayyuka don yin hakan tare da KIP-98.
  • Haɗa karanta saƙo ɗaya daga batu ɗaya tare da aika wani saƙo zuwa wani batu. Bugu da ƙari, gine-gine na Kafka ya dogara da yawancin injuna masu zaman kansu da ke gudana a matsayin bas ɗaya kuma ba a yi ƙoƙarin ɓoye wannan ba. Misali, babu abubuwan API da zasu baka damar haɗawa mabukaci и Mai samarwa a cikin ciniki. A cikin JMS, wannan abu ne ya samar da shi Zamadaga wanda aka halicce su Masu Shirya Saƙo и Saƙon Masu amfani.

Idan ba za mu iya dogara ga ma'amaloli ba, ta yaya za mu samar da ilimin tauhidi kusa da waɗanda tsarin saƙon gargajiya ke bayarwa?

Idan akwai yuwuwar haɓakar mabukaci na iya ƙaruwa kafin sarrafa saƙon, kamar a lokacin haɗarin mabukaci, to mabukaci ba shi da wata hanya ta sanin ko ƙungiyar mabukaci ta rasa saƙon lokacin da aka ba shi yanki. Don haka dabara ɗaya ita ce mayar da diyya zuwa matsayi na baya. API ɗin Kafka mabukaci yana ba da hanyoyi masu zuwa don wannan:

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

Hanyar nema() za a iya amfani da hanyar
offsetsForTimes (Map timestampsToSearch) don komawa zuwa wani yanayi a wani takamaiman lokaci a baya.

A fakaice, yin amfani da wannan hanyar yana nufin cewa yana yiwuwa a sake karanta wasu saƙonnin da aka sarrafa a baya kuma a sake sarrafa su. Don guje wa wannan, za mu iya amfani da karantawa mai ƙarfi, kamar yadda aka bayyana a Babi na 4, don kiyaye saƙon da aka gani a baya da kuma kawar da kwafi.

A madadin, lambar mabukacin ku na iya kasancewa mai sauƙi, muddin asarar saƙo ko kwafi ya karɓu. Lokacin da muka yi la'akari da lokuta masu amfani waɗanda aka fi amfani da Kafka don su, kamar sarrafa abubuwan da suka faru na log, ma'auni, danna bin diddigin, da sauransu, mun fahimci cewa asarar saƙonnin mutum ɗaya ba zai yi tasiri sosai kan aikace-aikacen da ke kewaye ba. A irin waɗannan lokuta, ƙimar tsohowar suna da karɓuwa sosai. A gefe guda, idan aikace-aikacenku yana buƙatar aika kuɗi, dole ne ku kula da kowane saƙon a hankali. Duk ya zo ƙasa ga mahallin.

Abubuwan lura na sirri sun nuna cewa yayin da ƙarfin saƙonnin ya ƙaru, ƙimar kowane saƙo yana raguwa. Manya-manyan saƙon suna da ƙima idan aka duba su a cikin tsari mai ƙima.

Babban Samuwar

Hanyar Kafka zuwa babban samuwa ya sha bamban da tsarin ActiveMQ. An ƙirƙira Kafka a kusa da gungu-fita inda duk abubuwan dillalai ke karɓa da rarraba saƙonni a lokaci guda.

Tarin Kafka ya ƙunshi misalin dillalai da yawa da ke gudana akan sabar daban-daban. An ƙera Kafka don yin aiki akan kayan aiki na yau da kullun, inda kowane kumburi yana da nasa ajiyar ajiya. Ba a ba da shawarar yin amfani da ma'ajiyar cibiyar sadarwa (SAN) ba saboda ƙididdiga masu yawa na iya yin gasa na lokaci.Ыe ajiya tazara da haifar da rikici.

Kafka da ko da yaushe a kan tsarin. Yawancin manyan masu amfani da Kafka ba su taɓa rufe gungu nasu ba, kuma software koyaushe tana sabuntawa tare da sake kunnawa. Ana samun wannan ta hanyar tabbatar da dacewa tare da sigar baya don saƙonni da hulɗar tsakanin dillalai.

Dillalai sun haɗa zuwa tarin uwar garken Kulawa da Zoo, wanda ke aiki azaman tsarin rajistar bayanai kuma ana amfani dashi don daidaita ayyukan kowane dillali. ZooKeeper kanta tsarin rarrabawa ne wanda ke ba da dama mai yawa ta hanyar kwafin bayanai ta hanyar kafawa. kuri'a.

A cikin shari'ar tushe, an ƙirƙiri wani batu a cikin gungu na Kafka tare da kaddarorin masu zuwa:

  • Yawan partitions. Kamar yadda aka tattauna a baya, ainihin ƙimar da aka yi amfani da ita a nan ya dogara da matakin da ake so na karatun layi ɗaya.
  • Ma'anar maimaitawa (factor) yana ƙayyade adadin dillalai nawa a cikin tari yakamata ya ƙunshi rajistan ayyukan wannan bangare.

Yin amfani da ZooKeepers don daidaitawa, Kafka yana ƙoƙarin rarraba sabbin sassa tsakanin dillalai a cikin tari. Ana yin wannan ta misali guda ɗaya wanda ke aiki azaman Mai sarrafawa.

A lokacin aiki ga kowane bangare bangare Mai sarrafawa ba da matsayin ga dillali shugaba (shugaba, maigida, mai gabatarwa) da mabiyan (mabiya, bayi, ƴan ƙasa). Dillalin dake aiki a matsayin jagoran wannan bangare, shi ne ke da alhakin karban dukkan sakonnin da furodusoshi suka aiko masa da kuma rarraba sakwannin ga masu amfani. Lokacin da aka aika saƙonni zuwa ɓangaren jigo, ana maimaita su zuwa duk ƙofofin dillalai masu aiki a matsayin masu bin wannan ɓangaren. Ana kiran kowane kumburi mai ɗauke da rajistan ayyukan yanki kwafi. Dillali na iya aiki a matsayin jagora ga wasu ɓangarori kuma a matsayin mabiyi ga wasu.

Ana kiran mabiyi mai ɗauke da duk saƙonnin da jagora ke riƙe kwafin aiki tare (kwafin da ke cikin yanayin aiki tare, kwafin in-sync). Idan dillalin da ke aiki a matsayin jagora na bangare ya fadi, duk wani dillalin da ya dace ko kuma aka yi aiki tare don wannan ɓangaren zai iya ɗaukar matsayin jagora. Zane ne mai ɗorewa mai ban mamaki.

Wani ɓangare na daidaitawar mai samarwa shine siga aks, wanda ke ƙayyade adadin kwafi nawa dole ne ya amince da (ƙididdigar) karɓar saƙo kafin zaren aikace-aikacen ya ci gaba da aikawa: 0, 1, ko duka. Idan an saita zuwa dukan, sa'an nan idan an karɓi saƙo, jagora zai aika da tabbaci ga furodusa da zarar ya sami tabbaci (yabo) na rikodin daga alamomi da yawa (ciki har da kanta) wanda aka ayyana ta hanyar saitin taken. min.insync.replicas (default 1). Idan ba za a iya yin nasarar kwafin saƙon ba, to furodusa zai jefa banda aikace-aikacen (Babu Isasshen Replicas ko NotEnoughReplicasBayanApppend).

Tsarin tsari na yau da kullun yana haifar da jigo tare da juzu'in maimaitawa na 3 (shugaban 1, mabiya 2 kowane bangare) da siga. min.insync.replicas an saita zuwa 2. A wannan yanayin, gungu zai ba da damar ɗaya daga cikin dillalan da ke kula da ɓangaren jigo don sauka ba tare da shafar aikace-aikacen abokin ciniki ba.

Wannan yana dawo da mu zuwa cinikin da aka saba da shi tsakanin aiki da aminci. Maimaitawa yana faruwa a cikin kuɗin ƙarin lokacin jira don tabbatarwa (yabo) daga mabiya. Ko da yake, saboda yana gudana a layi daya, kwafi zuwa akalla nodes uku yana da aiki iri ɗaya da na biyu (ba kula da karuwar amfani da bandwidth na cibiyar sadarwa).

Ta amfani da wannan tsarin kwafi, Kafka da wayo ya guje wa buƙatar rubuta kowane saƙo a jiki tare da aikin. daidaita (). Duk saƙon da furodusa ya aika za a rubuta shi zuwa ga log ɗin partition, amma kamar yadda aka tattauna a Babi na 2, rubutawa zuwa fayil ana fara aiwatar da shi a cikin buffer na tsarin aiki. Idan an maimaita wannan saƙon zuwa wani misali na Kafka kuma yana cikin ƙwaƙwalwar ajiyarsa, asarar jagora baya nufin cewa sakon da kansa ya ɓace - ana iya ɗaukar shi ta hanyar kwafi mai aiki tare.
ƙin yin aikin daidaita () yana nufin cewa Kafka na iya karɓar saƙonni da sauri kamar yadda zai iya rubuta su zuwa ƙwaƙwalwar ajiya. Sabanin haka, tsawon lokacin da za ku iya guje wa zubar da ƙwaƙwalwar ajiya zuwa faifai, mafi kyau. Saboda wannan dalili, ba sabon abu ba ne ga dillalan Kafka don ware 64 GB ko fiye na ƙwaƙwalwar ajiya. Wannan amfani da ƙwaƙwalwar ajiya yana nufin cewa misalin Kafka ɗaya na iya yin saurin gudu cikin sauri sau dubbai fiye da dillalin saƙo na gargajiya.

Hakanan ana iya saita Kafka don aiwatar da aikin daidaita () zuwa fakitin saƙo. Tun da duk abin da ke cikin Kafka yana da tsarin fakiti, a zahiri yana aiki sosai don yawancin lokuta masu amfani kuma kayan aiki ne mai amfani ga masu amfani waɗanda ke buƙatar garanti mai ƙarfi. Yawancin ayyuka masu tsabta na Kafka sun fito ne daga saƙonnin da aka aika zuwa dillali a matsayin fakiti kuma ana karanta waɗannan saƙonnin daga dillali a cikin jerin abubuwa ta hanyar amfani da su. kwafin sifili ayyuka (ayyukan da ba a aiwatar da aikin kwafin bayanai daga yankin ƙwaƙwalwar ajiya zuwa wani). Ƙarshen babban aiki ne da ribar albarkatu kuma yana yiwuwa ne kawai ta hanyar amfani da tsarin bayanan log ɗin da ke ma'anar tsarin rarraba.

Mafi kyawun aiki yana yiwuwa a cikin gungu na Kafka fiye da dillalan Kafka guda ɗaya, saboda ɓangarorin jigo na iya haɓaka cikin injuna daban daban.

Sakamakon

A cikin wannan babi, mun kalli yadda tsarin gine-ginen Kafka ya sake tunanin dangantakar abokan ciniki da dillalai don samar da bututun saƙo mai ƙarfi mai ƙarfi, tare da kayan aiki da yawa fiye da na dillalin saƙo na al'ada. Mun tattauna aikin da yake amfani da shi don cimma wannan kuma a taƙaice mun kalli tsarin gine-ginen aikace-aikacen da ke ba da wannan aikin. A babi na gaba, za mu duba matsalolin gama-gari na aikace-aikacen aika saƙon da ke buƙatar warwarewa da tattauna dabarun magance su. Za mu ƙare babin ta hanyar bayyana yadda ake magana game da fasahar saƙon gabaɗaya don ku iya kimanta dacewarsu ga shari'o'in amfanin ku.

Bangaren da aka fassara a baya: Fahimtar dillalan sako. Koyan injiniyoyin saƙo tare da ActiveMQ da Kafka. Babi na 1

Anyi fassarar: tele.gg/middle_java

A ci gaba…

Masu amfani da rajista kawai za su iya shiga cikin binciken. Shigadon Allah.

Ana amfani da Kafka a cikin ƙungiyar ku?

  • A

  • Babu

  • A baya amfani, yanzu ba

  • Muna shirin amfani

Masu amfani 38 sun kada kuri'a. Masu amfani 8 sun kaurace.

source: www.habr.com

Add a comment