
Assalamu alaikum. A cikin wannan labarin zan gaya muku dalilin da yasa muke a Avito ya zaɓi Kafka watanni tara da suka wuce da abin da yake. Zan raba ɗaya daga cikin maganganun amfani - dillalin saƙo. Kuma a ƙarshe, bari muyi magana game da fa'idodin da muka samu daga amfani da Kafka azaman hanyar Sabis.
matsala

Na farko, ɗan mahallin. Wani lokaci da suka wuce mun fara motsawa daga gine-ginen monolithic, kuma yanzu Avito yana da ayyuka daban-daban da yawa. Suna da ma'ajiyar nasu, tarin fasahar nasu kuma suna da alhakin sashin dabarun kasuwancin su.
Ɗaya daga cikin matsalolin tare da adadi mai yawa na ayyuka shine sadarwa. Sabis A galibi yana son sanin bayanin da Sabis na B yake da shi. A wannan yanayin, Sabis A yana samun damar Sabis B ta API na aiki tare. Sabis na B yana so ya san abin da ke faruwa tare da sabis na D da D, kuma su, bi da bi, suna sha'awar sabis na A da B. Lokacin da yawancin irin waɗannan ayyuka na "m", haɗin da ke tsakanin su ya juya zuwa cikin tangled.
A lokaci guda, sabis na A na iya zama babu shi a kowane lokaci. Kuma menene ya kamata sabis na B da duk sauran ayyukan da ke da alaƙa da shi suyi a wannan yanayin? Kuma idan ana buƙatar jerin jerin kira na daidaitawa don kammala aikin kasuwanci, yuwuwar gazawar duk aikin ya zama mafi girma (kuma tsawon sarkar, mafi girma shine).
Zaɓin fasaha

To, matsalolin a bayyane suke. Ana iya kawar da su ta hanyar ƙirƙirar tsarin saƙon tsakiya tsakanin ayyuka. Yanzu kowane sabis ɗin yana buƙatar sani kawai game da wannan tsarin saƙon. Bugu da ƙari, tsarin da kansa dole ne ya kasance mai jurewa da kuskure kuma a kwance a kwance, da kuma, a cikin yanayin haɗari, tara ma'ajin samun damar aiki don aiki na gaba.
Yanzu bari mu zaɓi fasahar da za a aiwatar da isar da saƙo. Don yin wannan, bari mu fara fahimtar abin da muke tsammani daga gare ta:
- bai kamata a rasa saƙonnin tsakanin sabis ba;
- ana iya kwafin saƙonnin;
- ana iya adana saƙonni da karantawa zuwa zurfin kwanaki da yawa (mai riƙewa na dindindin);
- ayyuka na iya biyan kuɗi zuwa bayanan da suke sha'awar;
- ayyuka da yawa na iya karanta bayanai iri ɗaya;
- saƙonnin na iya ƙunsar dalla-dalla, kaya mai ƙarfi (canja wurin yanayi mai ɗaukar hoto);
- Wani lokaci kuna buƙatar garantin odar saƙonni.
Hakanan yana da mahimmanci a gare mu mu zaɓi tsarin mafi girman ƙima kuma abin dogaro tare da babban kayan aiki (aƙalla saƙon 100k na kilobytes da yawa a sakan daya).
A wannan gaba, mun yi bankwana da RabbitMQ (wanda ke da wahala a tsaya tsayin daka a babban rps), PGQ daga SkyTools (ba da saurin isa ba kuma baya sikeli da kyau) da NSQ (ba dagewa ba). Muna amfani da duk waɗannan fasahohin a cikin kamfaninmu, amma ba su dace da matsalar da ake warwarewa ba.
Bayan haka, mun fara kallon fasahar da suka saba mana - Apache Kafka, Apache Pulsar da NATS Streaming.
Pulsar ita ce farkon da aka jefar. Mun yanke shawarar cewa Kafka da Pulsar mafita iri ɗaya ne. Kuma duk da cewa manyan kamfanoni sun gwada Pulsar, sabo ne kuma yana ba da ƙananan latency (a cikin ka'idar), mun yanke shawarar barin Kafka na waɗannan biyu a matsayin ma'auni na gaskiya don irin waɗannan ayyuka. Wataƙila za mu koma Apache Pulsar nan gaba.
Kuma yanzu akwai sauran 'yan takara biyu: NATS Streaming da Apache Kafka. Mun yi nazarin duka mafita a cikin wasu daki-daki, kuma duka biyun sun dace da aikin. Amma a ƙarshe, mun ji tsoron dangi matasa na NATS Streaming (da kuma gaskiyar cewa daya daga cikin manyan masu haɓakawa, Tyler Treat, ya yanke shawarar barin aikin kuma ya fara nasa - Liftbridge). A lokaci guda, yanayin Clustering na NATS Streaming bai samar da yuwuwar yin sikeli mai ƙarfi a kwance ba (wataƙila wannan ba matsala bane bayan ƙari na yanayin rabuwa a cikin 2017).
Koyaya, NATS Streaming fasaha ce mai kyau da aka rubuta a cikin Go kuma Gidauniyar Kwamfuta ta Cloud Native tana tallafawa. Ba kamar Apache Kafka ba, baya buƙatar Zookeeper yayi aiki (watakila ), tunda yana aiwatar da RAFT a ciki. A lokaci guda, NATS Streaming ya fi sauƙi don gudanarwa. Ba mu yanke hukuncin cewa za mu koma wannan fasaha a nan gaba ba.
Duk da haka, a yau wanda ya ci nasara shine Apache Kafka. A cikin gwaje-gwajenmu, an tabbatar da cewa yana da sauri sosai (fiye da saƙon miliyan ɗaya a sakan daya don karantawa da rubutu tare da ƙarar saƙo na kilobyte 1), abin dogaro sosai, mai girman gaske kuma an tabbatar da shi ta hanyar gogewa wajen samar da manyan kamfanoni. Bugu da ƙari, Kafka yana goyan bayan aƙalla manyan kamfanoni na kasuwanci (mu, alal misali, muna amfani da sigar Confluent), kuma Kafka yana da haɓakar yanayin muhalli.
Kafka overview
Kafin mu fara, Ina so in ba da shawarar ingantaccen littafi nan da nan - "Kafka: Tabbataccen Jagora" (akwai kuma fassarar Rashanci, amma sharuddan suna da ɗan damuwa). Ya ƙunshi bayanan da kuke buƙata don samun ainihin fahimtar Kafka har ma da ɗan ƙari. Takaddun bayanan Apache da bulogin Confluent suma an rubuta su da sauƙin karantawa.
Don haka bari mu kalli idon tsuntsaye yadda Kafka ke aiki. Tushen topology na Kafka ya ƙunshi furodusa, mabukaci, dillali da mai kula da zoo.
dillali

Dillali ne ke da alhakin adana bayanan ku. Ana adana duk bayanan a cikin nau'in binary, kuma dillali ya san kadan game da abin da suke da kuma tsarin su.
Kowane nau'in aukuwa na ma'ana yawanci yana cikin nasa jigo na daban. Misali, taron ƙirƙirar talla na iya faɗuwa cikin abin da aka ƙirƙira, kuma taron canza shi na iya faɗuwa cikin abu.canza. Za a iya ɗaukar batutuwa azaman masu rarraba taron. A matakin jigo, zaku iya saita sigogin daidaitawa kamar:
- adadin bayanan da aka adana da/ko shekarun sa (retention.bytes, retention.ms);
- bayanai redundancy factor (mai maimaita factor);
- matsakaicin girman saƙo ɗaya (max.message.bytes);
- ƙaramin adadin daidaitattun kwafi wanda za'a iya rubuta bayanai zuwa wani batu (min.insync.replicas);
- ikon aiwatar da gazawar a kan kwafin da ba a daidaita shi ba tare da yuwuwar asarar bayanai (unclean.leader.election.enable);
- da dai sauransu ().
Bi da bi, kowane batu ya kasu kashi daya ko fiye partitions. A cikin jam'iyyun ne abubuwan da suka faru a ƙarshe suka faɗi. Idan akwai dillali fiye da ɗaya a cikin gungu, to, za a rarraba ɓangarori a ko'ina a kan duk dillalai (imar yadda zai yiwu), wanda zai ba da damar ɗaukar nauyin rubutu da karantawa cikin jigo ɗaya don daidaitawa a kan dillalai da yawa lokaci guda.
A kan faifai, ana adana bayanai na kowane bangare a cikin nau'in fayilolin yanki, ta tsohuwa daidai da gigabyte ɗaya (wanda ake sarrafa ta log.segment.bytes). Wani muhimmin fasali shi ne cewa ana share bayanai daga ɓangarori (lokacin da aka kunna riƙewa) a cikin sassan (ba za ku iya share abin da ya faru ɗaya daga ɓangaren ba, kawai kuna iya share duk wani yanki, kuma kawai mara aiki).
Mai kiwon dabbobi
Zookeeper yana aiki azaman ma'ajin metadata da mai gudanarwa. Shi ne wanda zai iya sanin ko dillalai suna raye (zaku iya kallon wannan ta idanun mai kula da zoo ta amfani da mai kula da zoo tare da umarnin ls /brokers/ids), wane dillali ne mai sarrafawa (get /controller), ko ɓangarorin suna cikin aiki tare da kwafin su (get /brokers/topics/topic_name/partitions/partition_number/state). Har ila yau, ma'aikacin gidan zoo ne furodusa da mabukaci za su fara zuwa don gano ko wane dillali ne aka adana batutuwa da ɓangarorin. A cikin yanayin da aka ayyana maɓalli fiye da 1 don wani batu, mai kula da gidan zoo zai nuna waɗanne ɓangarori ne shugabannin (za a rubuta su kuma a karanta su). A cikin yanayin gazawar dillali, za a yi rikodin bayanai game da sabbin ɓangarorin jagora a cikin zookeeper (daga sigar 1.1.0 asynchronously, ).
A cikin tsofaffin nau'ikan Kafka, mai kula da zoo shi ma yana da alhakin adana abubuwan da aka gyara, amma yanzu ana adana su a cikin wani batu na musamman. __consumer_offsets a kan dillali (ko da yake har yanzu kuna iya amfani da zookeeper don waɗannan dalilai).
Hanya mafi sauƙi don juya bayanan ku zuwa kabewa ita ce rasa bayanai daga mai kula da zoo. A irin wannan yanayin, zai yi wuya a fahimci abin da za a karanta da kuma daga ina.
m
Furodusa galibi sabis ne wanda ke rubuta bayanai kai tsaye zuwa Apache Kafka. Furodusa ya zaɓi batun da zai adana saƙonnin jigon sa kuma ya fara rubuta masa bayanai. Misali, furodusa zai iya zama sabis na talla. A wannan yanayin, za ta aika abubuwan da suka faru kamar "ad created", "ad updated", "share talla", da dai sauransu zuwa jigogi. Kowane taron maɓalli ne-darajar biyu.
Ta hanyar tsoho, ana rarraba duk abubuwan da suka faru a tsakanin ɓangarorin batutuwa ta amfani da zagaye-robin idan ba a ƙayyade maɓalli ba (rasa oda), kuma ta hanyar MurmurHash (maɓalli) idan maɓallin yana nan (oda a cikin bangare ɗaya).
Ya kamata a lura nan da nan cewa Kafka yana ba da garantin tsari na al'amuran kawai a cikin tsari ɗaya. Amma a gaskiya wannan sau da yawa ba matsala ba ne. Misali, zaku iya tabbatar da ƙara duk canje-canje zuwa sanarwa iri ɗaya zuwa bangare ɗaya (don haka kiyaye tsarin waɗannan canje-canje a cikin sanarwar). Hakanan zaka iya aika lambar jeri a ɗaya daga cikin filayen taron.
Mai amfani da

Mabukaci ne ke da alhakin tattara bayanai daga Apache Kafka. Idan muka koma misalin da ke sama, mabukaci zai iya zama sabis na daidaitawa. Wannan sabis ɗin za a yi rajista ga batun sabis na talla, kuma lokacin da sabon talla ya bayyana, za ta karɓa kuma ta bincikar shi don biyan wasu ƙayyadaddun manufofi.
Apache Kafka yana tunawa da abubuwan da suka faru kwanan nan da mabukaci ya karɓa (ana amfani da batun sabis don wannan __consumer__offsets), don haka tabbatar da cewa idan karatun ya yi nasara, mabukaci ba ya samun saƙo iri ɗaya sau biyu. Koyaya, idan kun yi amfani da ikon.auto.commit = zaɓi na gaskiya kuma gabaɗaya wakilta aikin bin matsayin mabukaci a cikin batun zuwa Kafka, zaku iya. . A cikin lambar samarwa, galibi ana sarrafa matsayin mabukaci da hannu (mai haɓakawa yana sarrafa lokacin da ƙaddamarwar taron dole ne ya faru).
A cikin yanayin da mabukaci ɗaya bai isa ba (misali, kwararar sabbin al'amura suna da girma sosai), zaku iya ƙara ƙarin masu amfani da yawa ta hanyar haɗa su tare cikin ƙungiyar mabukaci. Ƙungiyar mabukaci daidai yake da mabukaci, amma tare da rarraba bayanai tsakanin membobin rukuni. Wannan yana bawa kowane ɗan takara damar ɗaukar rabon saƙon su, ta haka yana daidaita saurin karatu.
Sakamakon gwaji

Ba zan rubuta rubutun bayani da yawa a nan ba, kawai zan raba sakamakon da aka samu. An gudanar da gwaji akan injunan jiki guda 3 (12 CPU, 384GB RAM, 15k SAS DISK, 10GBit/s Net), dillalai da masu kula da zoo an tura su a lxc.
Gwajin aiki
Lokacin gwaji, an sami sakamako masu zuwa.
- Gudun rikodin saƙonnin 1KB a lokaci guda ta furodusoshi 9 shine abubuwan 1300000 a cikin sakan daya.
- Gudun karanta saƙonnin 1KB a lokaci guda ta masu amfani da 9 shine abubuwan 1500000 a cikin daƙiƙa guda.
Gwajin haƙurin kuskure
A lokacin gwaji, an sami sakamako masu zuwa (dillalai 3, masu kula da namun daji 3).
- Ƙarshen rashin daidaituwa na ɗaya daga cikin dillalai baya sa gungu ya tsaya ko zama babu shi. Ana ci gaba da aiki kamar yadda aka saba, amma sauran dillalai suna da nauyi mai nauyi.
- Rashin ƙarewar dillalai biyu a al'ada a cikin yanayin gungun dillalai uku da min.isr = 2 yana kaiwa ga gungu ba zai iya rubutu ba, amma ana iya karantawa. Idan min.isr = 1, gungu yana ci gaba da kasancewa don duka karatu da rubutu. Koyaya, wannan yanayin ya ci karo da abin da ake buƙata don babban tsaro na bayanai.
- Wani mummunan kashewa na ɗaya daga cikin sabar Zookeeper baya sa gungu ya tsaya ko zama babu shi. Ana ci gaba da aiki kamar yadda aka saba.
- Wani mummunan rufewar sabobin Zookeeper guda biyu ya haifar da rashin samun gungu har sai an dawo da aƙalla ɗaya daga cikin sabar Zookeeper. Wannan bayanin gaskiya ne ga rukunin gidan Zookeeper na sabobin 3. Sakamakon haka, bayan bincike, an yanke shawarar ƙara gungun Zookeeper zuwa sabobin 5 don ƙara haƙuri da kuskure.
Kafka a matsayin sabis

Mun tabbata cewa Kafka fasaha ce mai kyau wanda ke ba mu damar magance aikin da aka ba mu (aiwatar da dillalin saƙo). Koyaya, mun yanke shawarar hana sabis ɗin shiga Kafka kai tsaye kuma mun rufe shi a saman tare da sabis ɗin bas ɗin bayanai. Me yasa muka yi haka? A gaskiya ma, akwai dalilai kaɗan.
Data-bas ya ɗauki duk ayyukan da suka shafi haɗin kai tare da Kafka (aiwatarwa da daidaitawa na masu amfani da masu samarwa, saka idanu, faɗakarwa, shiga, ƙira, da sauransu). Don haka, haɗin kai tare da dillalin saƙo yana da sauƙi kamar yadda zai yiwu.
Data-bas ya ƙyale mu mu nisanta daga takamaiman harshe ko ɗakin karatu don aiki tare da Kafka.
Bas-bas ya ƙyale wasu ayyuka su kawar da Layer ɗin ajiya. Wataƙila a wani lokaci za mu canza Kafka zuwa Pulsar, kuma babu wanda zai lura da wani abu (duk ayyukan kawai sun sani game da API-bas API).
Bas-bas ya ɗauki aikin tabbatar da tsare-tsaren taron.
Ana aiwatar da tabbaci ta amfani da bas-bas.
Ƙarƙashin murfin bas ɗin bayanai, za mu iya ɗaukaka sigar Kafka cikin nutsuwa ba tare da bata lokaci ba, sarrafa tsarin masu samarwa, masu siye, dillalai, da sauransu.
Data-bas ya ba mu damar ƙara abubuwan da muke buƙata waɗanda ba a cikin Kafka ba (kamar jigogi na duba, sa ido kan abubuwan da ba su dace ba a cikin gungu, ƙirƙirar DLQ, da sauransu).
Data-bas yana ba ku damar aiwatar da gazawar tsakiya don duk sabis.
A halin yanzu, don fara aika abubuwan da suka faru zuwa dillalin saƙo, kawai kuna buƙatar haɗa ƙaramin ɗakin karatu zuwa lambar sabis ɗin ku. Wannan duka. Kuna da ikon rubutu, karantawa da ma'auni tare da layin lamba ɗaya. Duk aiwatar da aiwatarwa yana ɓoye daga gare ku, tare da ƴan girman hannaye kaɗan ne kawai ke fitowa. Ƙarƙashin murfin, sabis ɗin bas na bayanai yana haɓaka adadin da ake buƙata na masu samarwa da mabukaci a cikin Kubernetes kuma yana ba su daidaitattun saitin, amma duk wannan yana bayyane ga sabis ɗin ku.
Tabbas, babu harsashi na azurfa, kuma wannan hanyar tana da iyakoki.
- Data-bas yana buƙatar tallafi a cikin gida, sabanin ɗakunan karatu na ɓangare na uku.
- Data-bas yana ƙara yawan hulɗar tsakanin sabis da dillalin saƙo, wanda ke haifar da ƙarancin aiki idan aka kwatanta da Kafka mara kyau.
- Ba kowane abu ba ne za a iya ɓoye daga ayyuka cikin sauƙi; ba ma son yin kwafin ayyukan KSQL ko Kafka Streams a cikin bas-bas, don haka wani lokacin dole ne mu ƙyale ayyuka su tafi kai tsaye.
A cikin yanayinmu, ribobi sun fi nauyi fiye da rashin amfani, kuma yanke shawarar rufe dillalin saƙo tare da sabis na daban ya dace. A cikin shekarar da aka yi aikin ba mu sami wani babban hatsari ko matsala ba.
PS Godiya ga budurwata, Ekaterina Obalyaeva, don kyawawan hotuna don wannan labarin. Idan kuna son su, akwai ƙarin misalai masu zuwa.
source: www.habr.com
