Fahatakarana ny mpizara hafatra. Mianara ny mekanika amin'ny fandefasana hafatra miaraka amin'ny ActiveMQ sy Kafka. Toko 3. Kafka

Fitohizan'ny fandikana boky kely:
Fahatakarana ny Message Brokers
mpanoratra: Jakub Korab, mpamoaka: O'Reilly Media, Inc., daty navoaka: Jona 2017, ISBN: 9781492049296.

Ampahany nadika teo aloha: Fahatakarana ny mpizara hafatra. Mianara ny mekanika amin'ny fandefasana hafatra miaraka amin'ny ActiveMQ sy Kafka. Toko 1 Fampidirana

TOKO 3

Kafka

Kafka dia novolavolaina tao amin'ny LinkedIn mba hialana amin'ny sasany amin'ireo fetran'ny mpanelanelana amin'ny hafatra nentim-paharazana ary hanalavirana ny fananganana mpanelanelana hafatra maromaro ho an'ny fifandraisana isan-karazany, izay voalaza ato amin'ity boky ity eo ambanin'ny "Fampitomboana sy hivoaka" ao amin'ny pejy 28 .Tranga fampiasa LinkedIn dia niantehitra betsaka tamin'ny fampidirana angon-drakitra be dia be, toy ny fikitihana pejy sy ny diarin'ny fidirana, raha mbola mamela izany angona izany hampiasain'ny rafitra maro nefa tsy misy fiatraikany amin'ny famokarana na ny mpanjifa hafa. Raha ny marina, ny anton'ny fisian'i Kafka dia ny hahazoana ny karazana rafitra fandefasana hafatra izay lazain'ny Universal Data Pipeline.

Noho io tanjona faratampony io, dia nisy fepetra hafa nipoitra ho azy. Kafka dia tokony:

  • Haingana be
  • Manome bandwidth bebe kokoa rehefa miasa amin'ny hafatra
  • Tohano ny modely Publisher-Subscriber sy Point-to-Point
  • Aza miadana amin'ny fampidirana mpanjifa. Ohatra, miharatsy ny fahombiazan'ny filaharana sy ny lohahevitra ao amin'ny ActiveMQ rehefa mitombo ny isan'ny mpanjifa amin'ny toerana haleha.
  • Aoka ho marindrano scalable; raha tsy afaka manao izany amin'ny hafainganam-pandehan'ny kapila ambony indrindra ny broker iray izay manohy hafatra, dia misy dikany ny mandeha mihoatra ny ohatra broker iray mba hampitomboana ny fahombiazany.
  • Fero ny fidirana amin'ny fitahirizana sy famerenana indray ny hafatra

Mba hanatratrarana izany rehetra izany, Kafka dia nanangana rafitra iray izay namaritra indray ny andraikitra sy andraikitry ny mpanjifa sy ny mpanome hafatra. Ny modelin'ny JMS dia tena mifantoka amin'ny broker, izay ny broker no tompon'andraikitra amin'ny fizarana hafatra ary ny mpanjifa dia tsy maintsy manahy momba ny fandefasana sy ny fandraisana hafatra. Kafka, etsy ankilany, dia mifantoka amin'ny mpanjifa, miaraka amin'ny mpanjifa mandray ny maro amin'ireo endri-javatra amin'ny broker nentim-paharazana, toy ny fizarana ara-drariny ny hafatra mifandraika amin'ny mpanjifa, ho takalon'ny broker iray tena haingana sy azo esorina. Ho an'ny olona efa niasa tamin'ny rafitra fandefasana hafatra nentim-paharazana, ny fiaraha-miasa amin'ny Kafka dia mitaky fiovana fototra.
Ity torolàlana momba ny injeniera ity dia nitarika ny fananganana fotodrafitrasa fandefasana hafatra afaka mampitombo ny fidirana amin'ny alàlan'ny baiko marobe raha oharina amin'ny broker mahazatra. Araka ny ho hitantsika, ity fomba fiasa ity dia miaraka amin'ny varotra, izay midika fa ny Kafka dia tsy mety amin'ny karazana enta-mavesatra sasany sy rindrambaiko napetraka.

Modely ho an'ny tanjona iraisana

Mba hanatanterahana ireo fepetra voalaza etsy ambony, dia nampiarahan'i Kafka ny famoahana-famandrihana sy hafatra an-tsoratra amin'ny karazana toerana iray − Lohahevitra. Mampisavoritaka ny olona izay niasa tamin'ny rafitra fandefasana hafatra izany, izay ny teny hoe "lohahevitra" dia manondro mekanika fampielezam-peo izay (avy amin'ny lohahevitra) tsy azo zakaina ny famakiana. Ny lohahevitra Kafka dia tokony hoheverina ho karazana fitsangatsanganana hybrid, araka ny voafaritra ao amin'ny fampidirana ity boky ity.

Ho an'ny ambiny amin'ity toko ity, raha tsy milaza mazava isika, ny teny hoe "lohahevitra" dia manondro lohahevitra Kafka.

Mba hahatakarana tsara ny fomba fitondran'ny lohahevitra sy ny antoka omen'izy ireo, mila jerena aloha ny fomba fampiharana azy ireo ao amin'ny Kafka.
Ny lohahevitra tsirairay ao amin'ny Kafka dia manana ny diany manokana.
Ireo mpamokatra mandefa hafatra any amin'ny Kafka dia manoratra amin'ity diary ity, ary ny mpanjifa dia mamaky avy amin'ny diary mampiasa tondro izay mandroso tsy tapaka. Tsindraindray, mamafa ny ampahany tranainy indrindra amin'ny diary ny Kafka, na efa novakiana na tsia ny hafatra ao amin'ireo faritra ireo. Ny ampahany afovoan'ny famolavolana an'i Kafka dia ny tsy firaharahan'ny broker raha vakiana ny hafatra na tsia - andraikitry ny mpanjifa izany.

Ny teny hoe "log" sy "tondro" dia tsy hita ao Kafka documentation. Ireo teny malaza ireo dia ampiasaina eto mba hanampiana ny fahatakarana.

Ity modely ity dia hafa tanteraka amin'ny ActiveMQ, izay misy hafatra avy amin'ny filaharana rehetra dia voatahiry ao anaty log iray ihany, ary ny broker dia manamarika ny hafatra ho voafafa rehefa avy novakiana.
Andeha isika handalina lalindalina kokoa ary hijery amin'ny antsipiriany bebe kokoa ny diarin'ny lohahevitra.
Ny log Kafka dia misy fizarana maromaro (Sary 3-1). Kafka dia miantoka ny fibaikoana hentitra isaky ny fizarana. Midika izany fa ny hafatra voasoratra ao amin'ny fisarahana amin'ny filaharana iray dia hovakiana amin'ny filaharana mitovy. Ny fizarazarana tsirairay dia ampiharina ho toy ny fichier rolling log izay misy sombiny (sombiny) amin'ny hafatra rehetra nalefan'ny mpamokatra azy amin'ny lohahevitra. Ny lohahevitra noforonina dia misy fizarazarana iray. Ny hevitra momba ny fisarahana dia ny hevitra fototry ny Kafka ho an'ny scaling horizontal.

Fahatakarana ny mpizara hafatra. Mianara ny mekanika amin'ny fandefasana hafatra miaraka amin'ny ActiveMQ sy Kafka. Toko 3. Kafka
Sary 3-1. Kafka Partitions

Rehefa mandefa hafatra amin'ny lohahevitra Kafka ny mpamokatra iray, dia manapa-kevitra izay fizarana handefasana ilay hafatra. Hojerentsika amin’ny antsipiriany kokoa izany any aoriana.

Mamaky hafatra

Ny mpanjifa te hamaky ny hafatra dia mitantana tondro antsoina hoe vondrona mpanjifa, izay manondro ny offset hafatra ao amin'ny fisarahana. Ny offset dia toerana mitombo manomboka amin'ny 0 amin'ny fanombohan'ny fisarahana. Ity vondrona mpanjifa ity, voalaza ao amin'ny API amin'ny alalan'ny group_id voafaritry ny mpampiasa, dia mifanitsy amin'ny mpanjifa na rafitra iray lojika.

Ny ankamaroan'ny rafitra fandefasan-kafatra dia mamaky angona avy amin'ny toerana haleha amin'ny fampiasana tranga sy kofehy maromaro mba handrafetana hafatra mifanitsy. Noho izany, matetika dia hisy trangan'ny mpanjifa maro mizara vondrona mpanjifa mitovy.

Ny olana amin'ny famakiana dia azo aseho toy izao manaraka izao:

  • Misy fizarazarana maro ny lohahevitra
  • Vondrona mpanjifa marobe dia afaka mampiasa lohahevitra iray miaraka
  • Ny vondron'ny mpanjifa dia afaka manana tranga maromaro samihafa

Ity dia olana tsy dia misy dikany firy amin'ny maro. Mba hahatakarana ny fomba itondran'i Kafka ny fifandraisana misy eo amin'ny vondron'ny mpanjifa, ny trangan'ny mpanjifa, ary ny fizarazarana, andeha hojerentsika ny andian-tantara momba ny famakiana be pitsiny kokoa.

Vondrona mpanjifa sy mpanjifa

Andeha isika haka lohahevitra iray misy fizarazarana iray (Sary 3-2).

Fahatakarana ny mpizara hafatra. Mianara ny mekanika amin'ny fandefasana hafatra miaraka amin'ny ActiveMQ sy Kafka. Toko 3. Kafka
Sary 3-2. Ny mpanjifa dia mamaky avy amin'ny fisarahana

Rehefa mifandray amin'ny group_id-ny manokana amin'ity lohahevitra ity ny ohatra mpanjifa iray, dia omena fizarana vakiana sy fanonerana ao amin'io fizarana io. Ny toeran'ity offset ity dia azo amboarina ao amin'ny mpanjifa ho tondro mankany amin'ny toerana farany indrindra (hafatra vaovao) na toerana voalohany indrindra (hafatra tranainy indrindra). Ny mpanjifa dia mangataka (fandatsaham-bato) hafatra avy amin'ny lohahevitra, izay mahatonga azy ireo hovakiana misesy avy amin'ny diary.
Ny toeran'ny offset dia averina tsy tapaka amin'ny Kafka ary voatahiry ho hafatra ao anaty lohahevitra anatiny _consumer_offsets. Ny hafatra vakiana dia mbola tsy voafafa, tsy toy ny broker mahazatra, ary ny mpanjifa dia afaka mamerina ny offset mba hamerenana indray ny hafatra efa hita.

Rehefa mifandray amin'ny group_id hafa ny mpanjifa lojika faharoa dia mitantana tondro faharoa tsy miankina amin'ny voalohany (Sary 3-3). Noho izany, ny lohahevitra Kafka dia miasa toy ny filaharana misy mpanjifa iray ary toy ny lohahevitra famoaham-baovao mahazatra (pub-sub) izay abonin'ny mpanjifa maro, miaraka amin'ny tombony fanampiny fa ny hafatra rehetra dia voatahiry ary azo karakaraina imbetsaka.

Fahatakarana ny mpizara hafatra. Mianara ny mekanika amin'ny fandefasana hafatra miaraka amin'ny ActiveMQ sy Kafka. Toko 3. Kafka
Sary 3-3. Mpanjifa roa ao amin'ny vondrona mpanjifa samy hafa mamaky avy amin'ny fizarana iray ihany

Mpanjifa ao amin'ny vondrona mpanjifa

Rehefa mamaky angon-drakitra avy amin'ny fizarazarana iray ny ohatra iray amin'ny mpanjifa iray, dia manana fifehezana feno ny tondro sy manodina hafatra araka ny voalaza ao amin'ny fizarana teo aloha izy.
Raha misy mpanjifa maromaro mifandray amin'ny group_id mitovy amin'ny lohahevitra iray misy fizarazarana iray, dia homena fifehezana ny pointer ilay ohatra mifandray farany ary manomboka amin'io fotoana io dia handray ny hafatra rehetra (Sary 3-4).

Fahatakarana ny mpizara hafatra. Mianara ny mekanika amin'ny fandefasana hafatra miaraka amin'ny ActiveMQ sy Kafka. Toko 3. Kafka
Sary 3-4. Mpanjifa roa ao amin'ny vondrona mpanjifa iray ihany no mamaky avy amin'ny fizarana mitovy

Ity fomba fanodinana ity, izay mihoatra ny isan'ny fizarazarana ny isan'ny mpanjifa, dia azo heverina ho karazana mpanjifa manokana. Mety ilaina izany raha mila fanangonana "active-passive" (na "hot-warm") amin'ny tranga mpanjifanao ianao, na dia mahazatra kokoa noho ny mahazatra aza ny fampandehanana mpanjifa marobe mifanandrify ("active-active" na "hot-hot") mpanjifa.

Ity fihetsika fizarana hafatra voalaza etsy ambony ity dia mety ho mahagaga raha oharina amin'ny fitondran'ny filaharana JMS mahazatra. Amin'ity modely ity, ny hafatra alefa any amin'ny filaharana dia hozaraina mitovy amin'ny mpanjifa roa.

Matetika indrindra, rehefa mamorona ohatra maro ho an'ny mpanjifa isika, dia manao izany na mba hikarakarana hafatra mifanitsy, na hampitombo ny hafainganam-pandehan'ny famakiana, na hampitombo ny fahamarinan'ny fizotran'ny famakiana. Satria ohatra iray amin'ny mpanjifa ihany no afaka mamaky angon-drakitra avy amin'ny fizarazarana amin'ny fotoana iray, ahoana no fomba hahatratrarana izany ao amin'ny Kafka?

Ny fomba iray hanaovana izany dia ny fampiasana ohatra iray ho an'ny mpanjifa mba hamakiana ny hafatra rehetra ary hampita izany amin'ny dobo filomanosana. Na dia mampitombo ny fizotran'ny fanodinana aza ity fomba fiasa ity, dia mampitombo ny fahasarotan'ny lojikan'ny mpanjifa izany ary tsy manao na inona na inona hampitombo ny hamafin'ny rafitra famakiana. Raha latsaka ny dika mitovy amin'ny mpanjifa noho ny tsy fahampian'ny herinaratra na tranga mitovy amin'izany, dia mijanona ny fanalana.

Ny fomba kanonika hamahana ity olana ity ao amin'ny Kafka dia ny fampiasana bОpartitions bebe kokoa.

fizarazarana

Ny fizarazarana no rafitra lehibe indrindra amin'ny fampitoviana ny famakiana sy ny fampitomboana lohahevitra iray mihoatra ny bandwidth amin'ny ohatra broker iray. Mba hahatakarana bebe kokoa izany, andeha hodinihintsika ny toe-javatra misy lohahevitra misy fizarana roa ary mpanjifa iray no misoratra anarana amin'ity lohahevitra ity (Sary 3-5).

Fahatakarana ny mpizara hafatra. Mianara ny mekanika amin'ny fandefasana hafatra miaraka amin'ny ActiveMQ sy Kafka. Toko 3. Kafka
Sary 3-5. Ny mpanjifa iray dia mamaky avy amin'ny fizarana maromaro

Amin'ity toe-javatra ity, ny mpanjifa dia omena fanaraha-maso ireo tondro mifanaraka amin'ny group_id ao amin'ny fizarana roa ary manomboka mamaky hafatra avy amin'ny fizarana roa.
Rehefa misy mpanjifa fanampiny ho an'ny group_id mitovy amin'ity lohahevitra ity dia averin'i Kafka indray ny iray amin'ireo fizarana manomboka amin'ny mpanjifa voalohany ka hatramin'ny mpanjifa faharoa. Aorian'izay, ny ohatra tsirairay amin'ny mpanjifa dia hamaky avy amin'ny fizarana iray amin'ny lohahevitra (Sary 3-6).

Mba hahazoana antoka fa ny hafatra dia karakaraina mifanitsy amin'ny kofehy 20, mila fizarazarana 20 farafahakeliny ianao. Raha vitsy ny fizarazarana, dia ho tavela miaraka amin'ireo mpanjifa tsy manana na inona na inona hiasa ianao, araka ny voalaza teo aloha tamin'ny resaka momba ny mpanjifa manokana.

Fahatakarana ny mpizara hafatra. Mianara ny mekanika amin'ny fandefasana hafatra miaraka amin'ny ActiveMQ sy Kafka. Toko 3. Kafka
Sary 3-6. Mpanjifa roa ao amin'ny vondrona mpanjifa iray ihany no mamaky avy amin'ny fizarana samihafa

Ity tetika ity dia mampihena be ny fahasarotan'ny broker Kafka raha oharina amin'ny fizarana hafatra ilaina amin'ny fitazonana ny filaharana JMS. Eto ianao dia tsy mila manahy momba ireto teboka manaraka ireto:

  • Iza no mpanjifa tokony handray ny hafatra manaraka, mifototra amin'ny fizarana round-robin, ny fahafahan'ny buffer prefetch amin'izao fotoana izao, na ny hafatra teo aloha (ho an'ny vondrona hafatra JMS).
  • Izay hafatra alefa amin'izay mpanjifa ary na tokony haverina raha sendra tsy fahombiazana.

Ny hany tsy maintsy ataon'ny broker Kafka dia mampita hafatra misesy amin'ny mpanjifa rehefa mangataka azy ireo ity farany.

Na izany aza, ny fepetra takiana amin'ny fampitoviana ny fanitsiana sy ny fandefasana hafatra tsy nahomby dia tsy miala - ny andraikitra amin'izy ireo dia mandalo fotsiny avy amin'ny broker mankany amin'ny mpanjifa. Midika izany fa tsy maintsy raisina ao amin'ny code-nao izy ireo.

Mandefa hafatra

Andraikitry ny mpamokatra io hafatra io ny manapa-kevitra hoe iza no mizara hafatra. Mba hahatakarana ny mekanika anaovana izany dia mila mandinika aloha isika hoe inona marina no tena alefantsika.

Raha ao amin'ny JMS isika dia mampiasa rafitra hafatra misy metadata (lohahevitra sy fananana) ary vatana misy ny enta-mavesatra (betsaka), ao amin'ny Kafka ny hafatra dia pair "key-value". Ny entana entana dia alefa ho sanda. Ny fanalahidy kosa dia ampiasaina indrindra amin'ny fisarahana ary tsy maintsy misy fanalahidin'ny lojika manokana momba ny raharaham-barotrahametraka hafatra mifandraika amin'ny fizarazarana mitovy.

Ao amin'ny Toko 2, niresaka momba ny scenario momba ny filokana an-tserasera izay tokony hokarakarain'ny mpanjifa tokana ny hetsika mifandraika amin'izany:

  1. Ny kaonty mpampiasa dia namboarina.
  2. Ampidirina ao amin'ny kaonty ny vola.
  3. Ny filokana dia natao izay maka vola amin'ny kaonty.

Raha hafatra alefa amin'ny lohahevitra iray ny hetsika tsirairay, dia ny ID kaonty no fanalahidy voajanahary.
Rehefa misy hafatra alefa amin'ny alalan'ny Kafka Producer API, dia ampitaina amin'ny asa fizarazarana izay, raha omena ny hafatra sy ny toetry ny cluster Kafka amin'izao fotoana izao, dia mamerina ny ID ny fizarazarana izay tokony handefasana ny hafatra. Ity endri-javatra ity dia ampiharina amin'ny Java amin'ny alàlan'ny interface Partitioner.

Ity interface ity dia toy izao manaraka izao:

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

Ny fampiharana Partitioner dia mampiasa ny algorithm hashing amin'ny tanjona ankapobeny ho an'ny lakile mba hamaritana ny fisarahana, na round-robin raha tsy misy fanalahidy voafaritra. Ity sanda default ity dia miasa tsara amin'ny ankamaroan'ny tranga. Na izany aza, amin'ny ho avy dia te hanoratra ny anao manokana ianao.

Manoratra ny paikadin'ny fisarahanao manokana

Andeha hojerentsika ohatra iray izay tianao handefasana metadata miaraka amin'ny entana entana. Ny enta-mavesatra amin'ny ohatra asehontsika dia torolàlana momba ny fametrahana vola amin'ny kaonty lalao. Ny toromarika dia zavatra tiantsika ho azo antoka fa tsy hovana amin'ny fampitana ary tiantsika ho azo antoka fa rafitra ambony azo itokisana ihany no afaka manomboka izany fampianarana izany. Amin'ity tranga ity, ny rafitra fandefasana sy fandraisana dia manaiky ny fampiasana sonia hanamarina ny hafatra.
Amin'ny JMS mahazatra, dia mamaritra ny fananana "sonia hafatra" fotsiny isika ary ampidirintsika amin'ny hafatra. Na izany aza, ny Kafka dia tsy manome antsika mekanika handefasana metadata, fa fanalahidy sy sanda fotsiny.

Koa satria ny sandany dia enta-mavesatry ny banky izay tiantsika hotehirizina ny fahamendrehana, tsy manan-tsafidy afa-tsy ny mamaritra ny rafitra angon-drakitra hampiasaina amin'ny fanalahidy. Raha heverina fa mila ID kaonty isika amin'ny fisarahana, satria ny hafatra rehetra mifandraika amin'ny kaonty dia tsy maintsy karakaraina araka ny filaharany, dia ho tonga amin'ny rafitra JSON manaraka isika:

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

Satria ny sandan'ny sonia dia miovaova arakaraka ny enta-mavesatra, ny paikadin'ny hashing default amin'ny interface Partitioner dia tsy azo itokisana ny hafatra mifandraika amin'ny vondrona. Noho izany, mila manoratra ny paikadintsika manokana isika izay hamakivaky an'io fanalahidy io ary hizara ny sandan'ny accountId.

Ao amin'ny Kafka dia misy checksum hamantarana ny kolikoly amin'ny hafatra ao amin'ny magazay ary manana karazana fiarovana feno. Na dia izany aza dia miseho indraindray ny fepetra takian'ny indostria, toy ny etsy ambony.

Ny paikadin'ny mpampiasa fisarahana dia tsy maintsy miantoka fa ny hafatra mifandraika rehetra dia miafara amin'ny fizarazarana iray ihany. Na dia toa tsotra aza izany, ny fepetra dia mety ho sarotra amin'ny maha-zava-dehibe ny fanafarana lahatsoratra mifandraika sy ny fomba nametrahana ny isan'ny fisarahana amin'ny lohahevitra iray.

Ny isan'ny fizarazarana amin'ny lohahevitra iray dia mety hiova rehefa mandeha ny fotoana, satria azo ampiana izy ireo raha mihoatra ny nantenaina voalohany ny fifamoivoizana. Noho izany, ny fanalahidin'ny hafatra dia azo ampifandraisina amin'ny fizarazarana nandefasana azy ireo tany am-boalohany, izay midika fa fanjakana iray hozaraina eo amin'ireo ohatra mpamokatra.

Lafin-javatra iray hafa tokony hodinihina dia ny fizarana hafatra amin'ny fizarana rehetra. Amin'ny ankapobeny, tsy zaraina mitovy amin'ny hafatra ny fanalahidy, ary tsy miantoka ny fizarana hafatra ara-drariny ho an'ireo fanalahidy kely ny fiasan'ny hash.
Zava-dehibe ny manamarika fa na dia misafidy ny hizara hafatra aza ianao, dia mety mila ampiasaina indray ny mpanasa.

Hevero ny fepetra takiana amin'ny fanaovana kopia angon-drakitra eo amin'ny vondron'olona Kafka amin'ny toerana ara-jeografika samihafa. Ho an'ity tanjona ity, tonga miaraka amin'ny fitaovana andalana baiko antsoina hoe MirrorMaker i Kafka, izay ampiasaina hamakiana hafatra avy amin'ny cluster iray ary hamindra izany amin'ny iray hafa.

Ny MirrorMaker dia tsy maintsy mahatakatra ny fanalahidin'ny lohahevitra averina mba hitazomana ny filaharana eo anelanelan'ny hafatra rehefa mamerina eo anelanelan'ny cluster, satria mety tsy hitovy ny isan'ny fizarana ho an'io lohahevitra io amin'ny cluster roa.

Ny paikadin'ny fisarahana manokana dia tsy fahita firy, satria ny hashing default na round robin dia miasa tsara amin'ny ankamaroan'ny toe-javatra. Na izany aza, raha mila antoka famandrihana matanjaka ianao na mila manala metadata amin'ny enta-mavesatra, dia zavatra tokony hojerenao akaiky ny fisarahana.

Ny scalability sy ny tombotsoan'ny Kafka dia avy amin'ny famindrana ny sasany amin'ireo andraikitry ny broker nentim-paharazana amin'ny mpanjifa. Amin'ity tranga ity, ny fanapahan-kevitra dia raisina amin'ny fizarana hafatra mety misy ifandraisany amin'ny mpanjifa maromaro miasa miaraka.

Mila miatrika ny fepetra toy izany koa ny broker JMS. Mahaliana fa ny rafitra handefasana hafatra mifandraika amin'ny mpanjifa iray ihany, nampiharina tamin'ny alàlan'ny JMS Message Groups (fiovana amin'ny paikadin'ny fifandanjana entana mipetaka (SLB), dia mitaky ny mpandefa hanisy marika ireo hafatra mifandraika amin'izany. Raha ny momba ny JMS, ny broker dia tompon'andraikitra amin'ny fandefasana ity vondrona ity misy hafatra mifandraika amin'ny mpanjifa iray amin'ny maro, ary mamindra ny fananan'ny vondrona raha lavo ny mpanjifa.

Fifanarahana mpamokatra

Tsy ny fisarahana ihany no tokony hodinihina rehefa mandefa hafatra. Andeha hojerentsika ny fomba fandefasana () an'ny kilasy Producer ao amin'ny Java API:

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

Marihina avy hatrany fa ireo fomba roa ireo dia mamerina ny Future, izay manondro fa tsy vita avy hatrany ny asa fandefasana. Ny vokatr'izany dia misy hafatra (ProducerRecord) nosoratana ho an'ny buffer fandefasana isaky ny fizarana mavitrika ary alefa any amin'ny broker ho toy ny kofehy fototra ao amin'ny tranomboky mpanjifa Kafka. Na dia manao zavatra faran'izay haingana aza izany, dia midika izany fa ny fampiharana tsy manana traikefa dia mety hamoy hafatra raha mijanona ny fizotrany.

Toy ny mahazatra, misy fomba hahatonga ny fandefasana fandefasana azo antoka kokoa amin'ny vidin'ny fampisehoana. Ny haben'ity buffer ity dia azo apetraka amin'ny 0, ary ny kofehy fampiharana fandefasana dia voatery miandry mandra-pahavitan'ny fandefasana hafatra amin'ny broker, toy izao manaraka izao:

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

Bebe kokoa momba ny famakiana hafatra

Ny famakiana hafatra dia manana fahasarotana fanampiny izay mila vinavinaina. Tsy toy ny JMS API, izay afaka mandefa mpihaino hafatra ho valin'ny hafatra, ny Consumer Kafka ihany no mifidy. Andeha hojerentsika akaiky ny fomba fitsapan-kevitra ()ampiasaina amin'izany tanjona izany:

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

Ny sandan'ny fiverenan'ny fomba dia rafitra fitahirizana misy zavatra maro firaketana mpanjifa avy amin'ny partitions mety ho maromaro. firaketana mpanjifa Izy io dia zavatra tompon'andraikitra ho an'ny mpivady manan-danja miaraka amin'ny metadata mifandraika, toy ny fizarazarana niaviany.

Araka ny resahina ao amin'ny Toko 2, dia tsy maintsy tadidintsika izay mitranga amin'ny hafatra rehefa vita tsara na tsy nahomby izy ireo, ohatra, raha tsy afaka manodina ilay hafatra ny mpanjifa na raha manafoana izany. Ao amin'ny JMS, izany dia nokarakaraina tamin'ny alàlan'ny fomba fanekena. Ny broker dia hamafa ny hafatra vita soa aman-tsara, na hamerina indray ny hafatra manta na sandoka (raha heverina fa nisy ny fifampiraharahana).
Hafa mihitsy ny fiasan'i Kafka. Ny hafatra dia tsy voafafa ao amin'ny broker aorian'ny proofreading, ary ny zava-mitranga amin'ny tsy fahombiazana dia andraikitry ny code proofreading mihitsy.

Araka ny voalazanay, ny vondrona mpanjifa dia mifandray amin'ny offset ao amin'ny log. Ny toeran'ny log mifandray amin'ity offset ity dia mifanandrify amin'ny hafatra manaraka havoaka ho valin'izany fitsapan-kevitra (). Ny teboka amin'ny fotoana hampitomboana ity offset ity dia manapa-kevitra amin'ny famakiana.

Raha iverenana amin'ny maodely famakiana noresahina teo aloha, dia misy dingana telo ny fanodinana hafatra:

  1. Makà hafatra hovakiana.
  2. Amboary ny hafatra.
  3. Hamarino ny hafatra.

Ny mpanjifa Kafka dia tonga miaraka amin'ny safidy fanamafisana enable.auto.commit. Fikirana mahazatra matetika ampiasaina io, toy ny mahazatra amin'ny filaharana misy ny teny hoe "auto".

Talohan'ny Kafka 0.10, ny mpanjifa mampiasa an'io safidy io dia handefa ny offset amin'ny hafatra farany vakiana amin'ny antso manaraka. fitsapan-kevitra () aorian'ny fanodinana. Midika izany fa izay hafatra efa nalaina dia azo averina raha toa ka efa nokarakarain'ny mpanjifa izany saingy potika tampoka alohan'ny niantsoana azy. fitsapan-kevitra (). Satria ny broker dia tsy mitazona fanjakana momba ny impiry novakiana hafatra, ny mpanjifa manaraka izay mamerina io hafatra io dia tsy hahafantatra fa nisy zavatra ratsy nitranga. Ity fihetsika ity dia pseudo-transactional. Ny fanonerana dia natao raha toa ka vita soa aman-tsara ny hafatra, fa raha nanafoana ilay mpanjifa, dia handefa hafatra mitovy amin'ny mpanjifa hafa indray ilay mpivarotra. Ity fihetsika ity dia nifanaraka tamin'ny antoka fandefasana hafatra "farafaharatsiny indray mandeha".

Ao amin'ny Kafka 0.10, niova ny kaody mpanjifa ka ny commit dia atosiky ny tranombokin'ny mpanjifa tsindraindray, araka ny namboarina. auto.commit.interval.ms. Ity fihetsika ity dia eo anelanelan'ny maody JMS AUTO_ACKNOWLEDGE sy DUPS_OK_ACKNOWLEDGE. Rehefa mampiasa autocommit dia azo atao ny hafatra na inona na inona nokarakaraina - mety hitranga amin'ny mpanjifa miadana izany. Raha nanala zaza ny mpanjifa iray, dia horaisin'ny mpanjifa manaraka ny hafatra, manomboka amin'ny toerana voatokana, izay mety hiteraka hafatra tsy hita. Amin'ity tranga ity, tsy very ny hafatra i Kafka, ny code vakiteny dia tsy nikarakara azy ireo.

Ity fomba ity dia manana fampanantenana mitovy amin'ny ao amin'ny version 0.9: azo karakaraina ny hafatra, fa raha tsy mahomby izany, dia mety tsy ho vita ny offset, ka mety hampitombo avo roa heny ny fandefasana. Arakaraka ny hafatra alainao rehefa manatanteraka fitsapan-kevitra (), vao mainka ity olana ity.

Araka ny resahina ao amin'ny "Famakiana Hafatra avy amin'ny Filaharana" ao amin'ny pejy 21, dia tsy misy zavatra toy ny fandefasana hafatra indray mandeha amin'ny rafitra fandefasana hafatra rehefa raisina ny fomba tsy fahombiazana.

Ao amin'ny Kafka, misy fomba roa hanolorana (manolotra) offset (offset): mandeha ho azy sy amin'ny tanana. Amin'ireo tranga roa ireo, dia azo karakaraina imbetsaka ny hafatra raha toa ka nokarakaraina ilay hafatra saingy tsy nahomby talohan'ny fanolorana. Azonao atao ihany koa ny misafidy ny tsy handamina ny hafatra raha toa ka nitranga tany ambadika ny commit ary vita ny kaody alohan'ny nanaovana azy (angamba ao amin'ny Kafka 0.9 sy teo aloha).

Azonao atao ny mifehy ny fizotry ny fanoloran-tena amin'ny manual ao amin'ny API mpanjifa Kafka amin'ny alàlan'ny fametrahana ny mari-pamantarana enable.auto.commit amin'ny fiantsoana diso sy mazava ny iray amin'ireto fomba manaraka ireto:

void commitSync();
void commitAsync();

Raha te handamina ny hafatra ianao "farafaharatsiny indray mandeha", dia tsy maintsy ataonao amin'ny tanana ny offset commitSync()amin'ny fanatanterahana io baiko io avy hatrany aorian'ny fanodinana ireo hafatra.

Ireo fomba ireo dia tsy mamela ny hafatra ho ekena alohan'ny hanaovana azy, saingy tsy manao na inona na inona izy ireo mba hanafoanana ny mety ho fahatarana amin'ny fanodinana raha toa ka miseho ho toy ny transactional. Tsy misy fifampiraharahana ao Kafka. Ny mpanjifa dia tsy afaka manao ireto manaraka ireto:

  • Avereno ho azy ny hafatra sandoka. Ny mpanjifa ny tenany dia tsy maintsy miatrika maningana vokatry ny enta-mavesatra misy olana sy ny fahatapahan'ny backend, satria tsy afaka miantehitra amin'ny broker izy ireo hamerina hafatra.
  • Mandefasa hafatra amin'ny lohahevitra maro amin'ny hetsika atomika iray. Araka ny ho hitantsika tsy ho ela, ny fifehezana lohahevitra sy fizarazarana samihafa dia afaka mipetraka amin'ny milina samihafa ao amin'ny cluster Kafka izay tsy mandrindra ny fifampiraharahana rehefa alefa. Tamin'ny fotoana nanoratana ity lahatsoratra ity dia nisy asa natao mba hanatanterahana izany miaraka amin'ny KIP-98.
  • Ampifandraiso amin'ny fandefasana hafatra amin'ny lohahevitra iray ny famakiana hafatra iray avy amin'ny lohahevitra iray. Indray mandeha, ny maritrano Kafka dia miankina amin'ny milina mahaleo tena maro mandeha toy ny fiara fitateram-bahoaka iray ary tsy misy manandrana manafina izany. Ohatra, tsy misy singa API ahafahanao mampifandray mpanjifa и mpamokatra amin'ny fifampiraharahana. Ao amin'ny JMS dia omen'ny zavatra izany Sessionizay nohariana MessageProducers и MessageConsumers.

Raha tsy afaka miantehitra amin'ny fifampiraharahana isika, ahoana no ahafahantsika manome semantika akaiky kokoa ireo omen'ny rafitra fandefasana hafatra mahazatra?

Raha toa ka misy ny mety hampitombo ny fanoneran'ny mpanjifa alohan'ny nanaovana ny hafatra, toy ny mandritra ny fianjeran'ny mpanjifa, dia tsy fantatry ny mpanjifa raha tsy nahita ilay hafatra ny vondrona mpanjifany rehefa nomena fisarahana. Noho izany, ny paikady iray dia ny famerenana ny offset amin'ny toerana teo aloha. Ny API mpanjifa Kafka dia manome ireto fomba manaraka ireto amin'izany:

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

fomba mitady () dia azo ampiasaina amin'ny fomba
offsetsForTimes(Map timestampToSearch) miverena any amin'ny fanjakana iray amin'ny fotoana manokana taloha.

Amin'ny ankapobeny, ny fampiasana an'io fomba io dia midika fa azo inoana fa hovakiana sy hokarakaraina indray ny hafatra sasany izay nokarakaraina teo aloha. Mba hisorohana an'izany, dia afaka mampiasa famakiam-boky idempotent isika, araka ny voalaza ao amin'ny Toko faha-4, mba hanaraha-maso ireo hafatra efa nojerena teo aloha sy hanafoanana ireo dika mitovy.

Raha tsy izany, ny kaody mpanjifanao dia azo atao tsotra, raha toa ka azo ekena ny fahaverezan'ny hafatra na ny dika mitovy. Rehefa mijery tranga fampiasa izay fampiasa matetika ny Kafka isika, toy ny fitantanana ny hetsika diary, ny metrika, ny fanaraha-maso kitiho, sns., dia tsapanay fa tsy dia misy fiatraikany lehibe amin'ny fampiharana manodidina ny fahaverezan'ny hafatra tsirairay. Amin'ny toe-javatra toy izany dia azo ekena tanteraka ny sanda default. Amin'ny lafiny iray, raha mila mandefa fandoavam-bola ny fangatahanao, dia tsy maintsy mikarakara tsara ny hafatra tsirairay ianao. Miankina amin'ny contexte daholo izany.

Ny fandinihana manokana dia mampiseho fa rehefa mitombo ny hamafin'ny hafatra dia mihena ny lanjan'ny hafatra tsirairay. Ny hafatra lehibe dia mirona ho sarobidy rehefa jerena amin'ny endrika mitambatra.

High Availability

Ny fomba fiasan'i Kafka amin'ny fahazoana avo lenta dia tsy mitovy amin'ny fomba fiasa ActiveMQ. Ny Kafka dia natao manodidina ny cluster mivelatra izay ahafahan'ny broker rehetra mandray sy mizara hafatra amin'ny fotoana mitovy.

Ny kluster Kafka dia ahitana ohatra broker marobe mandeha amin'ny lohamilina samihafa. Kafka dia natao hihazakazaka amin'ny kojakoja mahazatra mahazatra, izay misy ny node tsirairay manana fitehirizana manokana. Tsy soso-kevitra ny fampiasana ny tamba-jotra miendrika fitehirizana (SAN) satria maro ny node compute dia afaka mifaninana amin'ny fotoana.Ыe fitehirizana elanelam-potoana ary miteraka fifandirana.

Kafka dia hatrany rafitra. Maro amin'ireo mpampiasa Kafka lehibe no tsy nanakatona ny vondron'izy ireo ary ny rindrambaiko dia manavao foana miaraka amin'ny fanombohana misesy. Izany dia tratra amin'ny alàlan'ny fiantohana ny fifanarahana amin'ny dikan-teny teo aloha ho an'ny hafatra sy ny fifandraisana eo amin'ny brokers.

Brokers mifandray amin'ny cluster server ZooKeeper, izay miasa toy ny rejisitra angon-drakitra fanamafisana ary ampiasaina handrindrana ny andraikitry ny broker tsirairay. Ny ZooKeeper mihitsy dia rafitra mizara izay manome fahafahana be amin'ny alàlan'ny famerenana ny vaovao amin'ny alàlan'ny fananganana KÔLEJY.

Amin'ny tranga fototra, misy lohahevitra noforonina ao anaty cluster Kafka miaraka amin'ireto toetra manaraka ireto:

  • Ny isan'ny partitions. Araka ny noresahina teo aloha, ny sanda marina ampiasaina eto dia miankina amin'ny haavon'ny famakiana parallèle irina.
  • Ny anton'ny replication (factor) dia mamaritra hoe firy ny isan'ny broker ao amin'ny cluster dia tokony ahitana logs ho an'ity fizarana ity.

Amin'ny fampiasana ny ZooKeepers ho fandrindrana, Kafka dia manandrana mizara fizarana vaovao amin'ireo mpivarotra ao amin'ny cluster. Izany dia atao amin'ny ohatra tokana izay miasa ho Controller.

Amin'ny fotoana fandehanana isaky ny fizarana lohahevitra Controller manendry anjara amin'ny broker mpitarika (mpitarika, tompo, mpanolotra) ary MPANARA-DIA AZY (mpanara-dia, andevo, ambany). Ny broker, izay mitarika amin'ity fizarana ity, dia tompon'andraikitra amin'ny fandraisana ny hafatra rehetra nalefan'ny mpamokatra sy ny fizarana ny hafatra amin'ny mpanjifa. Rehefa alefa any amin'ny fizarana lohahevitra ny hafatra dia averina amin'ny node broker rehetra miasa ho mpanaraka an'io fisarahana io. Ny node tsirairay misy logs ho an'ny fisarahana dia antsoina Mitovy tanteraka aminao. Ny broker dia afaka miasa ho mpitarika amin'ny fizarana sasany ary mpanara-dia ny hafa.

Antsoina ny mpanaraka izay misy hafatra rehetra tazonin'ny mpitarika dika mitovy (replika izay ao anatin'ny toe-javatra mirindra, dika mitovy). Raha misy mpikirakira miasa ho mpitarika amin'ny fizarazarana iray, dia afaka mandray ny andraikitry ny mpitarika ny mpikirakira izay manara-penitra na mifanentana amin'izany fisarahana izany. Izy io dia endrika tena maharitra.

Anisan'ny fanamafisam-peo mpamokatra ny paramètre acks, izay mamaritra hoe firy ny kopia tsy maintsy manaiky (manaiky) fandraisan'ny hafatra iray alohan'ny hanohizan'ny rindranasa fangatahana: 0, 1, na izy rehetra. Raha apetraka amin'ny rehetra, avy eo rehefa misy hafatra voaray, ny mpitarika dia handefa fanamafisana indray any amin'ny mpamokatra raha vantany vao mahazo fanamafisana (fanekena) ny rakitsoratra avy amin'ny famantarana maromaro (anisan'izany ny tenany) voafaritry ny foto-kevitra. min.insync.replicas (default 1). Raha tsy azo averina am-pahombiazana ilay hafatra, dia hanipy fanairana fampiharana ny mpamokatra (NotEnoughReplicas na NotEnoughReplicasAfterAppend).

Ny fanamafisam-peo mahazatra dia mamorona lohahevitra misy 3 (mpitarika 1, mpanjohy 2 isaky ny fizarana) ary ny mari-pamantarana. min.insync.replicas dia napetraka amin'ny 2. Amin'ity tranga ity, ny cluster dia hamela ny iray amin'ireo brokers mitantana ny fizarana lohahevitra hidina tsy misy fiantraikany amin'ny fampiharana mpanjifa.

Izany dia mamerina antsika amin'ny fifampiraharahana efa mahazatra eo amin'ny fahombiazana sy ny fahatokisana. Mitranga ny replication amin'ny fandaniana fotoana fiandrasana fanampiny ho an'ny fanamafisana (fanekena) avy amin'ny mpanaraka. Na izany aza, noho izy mandeha mifanitsy, ny replication amin'ny node telo farafahakeliny dia manana fampisehoana mitovy amin'ny roa (tsy miraharaha ny fitomboan'ny fampiasana bandwidth).

Amin'ny fampiasana an'io tetik'asa replication io, Kafka dia misoroka amim-pahakingana ny tsy maintsy hanoratana ara-batana ny hafatra tsirairay amin'ny kapila miaraka amin'ny fandidiana. sync(). Ny hafatra tsirairay alefan'ny mpamokatra dia hosoratana ao amin'ny log de partition, fa araka ny resahina ao amin'ny Toko 2, ny fanoratana amin'ny rakitra dia atao amin'ny voalohany ao amin'ny buffer an'ny rafitra fandidiana. Raha averina amin'ny ohatra Kafka hafa ity hafatra ity ary ao anatin'ny fitadidiany, ny fahaverezan'ny mpitarika dia tsy midika fa very ilay hafatra - azo raisina amin'ny alàlan'ny dika mitovy.
Fandà tsy hanao ny fandidiana sync() midika fa afaka mandray hafatra haingana araka izay azony soratana ao amin'ny fitadidiana ny Kafka. Mifanohitra amin'izany, arakaraka ny ahafahanao misoroka ny fitadidiana amin'ny kapila, ny tsara kokoa. Noho izany antony izany dia matetika ny Kafka brokers dia omena fahatsiarovana 64 GB na mihoatra. Ity fampiasana fitadidiana ity dia midika fa ny ohatra Kafka tokana dia afaka mihazakazaka mora foana amin'ny hafainganam-pandeha an'arivony heny haingana kokoa noho ny mpivarotra hafatra mahazatra.

Kafka dia azo amboarina ihany koa hampihatra ny fandidiana sync() mandefa hafatra amin'ny fonosana. Satria ny zava-drehetra ao amin'ny Kafka dia mifototra amin'ny fonosana, tena miasa tsara ho an'ny tranga fampiasana maro izy io ary fitaovana mahasoa ho an'ireo mpampiasa izay mitaky antoka matanjaka. Ny ankamaroan'ny fampisehoana madion'ny Kafka dia avy amin'ny hafatra alefa any amin'ny broker ho fonosana ary ireo hafatra ireo dia vakiana avy amin'ny broker amin'ny sakana misesy mampiasa aotra kopy fampandehanana (asa izay tsy anaovana ny asa kopia angona avy amin'ny faritra fitadidiana iray mankany amin'ny iray hafa). Ity farany dia fahombiazana lehibe sy tombony azo avy amin'ny loharanon-karena ary tsy azo atao afa-tsy amin'ny alàlan'ny fampiasana rafitra angon-drakitra fototra izay mamaritra ny rafitra fisarahana.

Fahombiazana tsara kokoa no azo atao ao amin'ny cluster Kafka noho ny amin'ny broker Kafka tokana, satria ny fizarana lohahevitra dia afaka manitatra amin'ny milina samihafa.

vokatra

Ao amin'ity toko ity, nojerentsika ny fomba namerenan'ny maritrano Kafka ny fifandraisan'ny mpanjifa sy ny mpanelanelana mba hanomezana fantsona fandefasana hafatra matanjaka be, miaraka amin'ny fampandehanana imbetsaka mihoatra ny an'ny mpivarotra hafatra mahazatra. Niresaka momba ny fampiasa ampiasainy hanatrarana izany izahay ary nojerena fohifohy ny rafitry ny fampiharana izay manome an'io fampiasa io. Ao amin'ny toko manaraka, isika dia hijery ireo olana mahazatra izay ilain'ny fampiharana mifototra amin'ny hafatra mba hamahana sy hifanakalo hevitra momba ny paikady hiatrehana azy ireo. Hamarana ny toko izahay amin'ny famariparitana ny fomba firesahana momba ny teknolojian'ny fandefasana hafatra amin'ny ankapobeny mba hahafahanao manombana ny mahamety azy ireo amin'ny tranga fampiasanao.

Ampahany nadika teo aloha: Fahatakarana ny mpizara hafatra. Mianara ny mekanika amin'ny fandefasana hafatra miaraka amin'ny ActiveMQ sy Kafka. Toko 1

Dikanteny vita: tele.gg/middle_java

Hanohy ...

Ireo mpampiasa voasoratra anarana ihany no afaka mandray anjara amin'ny fanadihadiana. HiditraPlease.

Ampiasaina ao amin'ny fikambananao ve ny Kafka?

  • fa

  • No

  • Nampiasaina teo aloha fa tsy izao

  • Mikasa ny hampiasa izahay

Mpampiasa 38 no nifidy. Mpampiasa 8 no nifady.

Source: www.habr.com

Add a comment