Kafka Kuberneteses - kas see on hea?

Tere tulemast, Habr!

Oma ajal olime esimesed, kes tĂ”id Venemaa turule teema Kafka ja jĂ€tkame jĂ€lgib selle arendamist. EelkĂ”ige leidis meile huvi teema Kafka ja Kubernetes. Ülevaade (ja ĂŒsna ettevaatlik) artikkel selle teema kohta ilmus Confluenti ettevĂ”tte blogis juba eelmise aasta oktoobris Gwen Shapiro autorlusega. TĂ€napĂ€eval tahame aga juhtida teie tĂ€helepanu vĂ€rskemale, aprillis ilmunud artiklile Johann Gygerilt, kes, kuigi ei suutnud vĂ€ltida kĂŒsimĂ€rki pealkirjas, kĂ€sitleb teemat konkreetsemalt, lisades tekstile huvitavaid linke. Palun andestage meile vabakĂ€eline tĂ”lge "chaos monkey", kui saate!

Kafka Kuberneteses - kas see on hea?

Sissejuhatus

Kubernetes on mÔeldud töötama olekuta koormuste, st. tavaliselt mikroteenuste arhitektuuri vormis, mis on kerged, hÀsti skaleeritavad ja jÀrgivad 12-faktori rakenduse pÔhimÔtteid, vÔimaldades töötada automaatsete katkestajate (circuit breaker) ja kaose ahvidega (chaos monkeys).

Kafka, mis asub teisel pool, toimib sisuliselt jaotatud andmebaasina. Seega peate töötama olekuga, mis on palju raskem kui mikroteenus. Kubernetes toetab olekuga koormusi, kuid nagu osutab Kelsey Hightower oma kahe sÀutsu kaudu, tuleb nendega olla ettevaatlik:

MÔned arvavad, et kui paigaldada Kubernetes olekuga koormusele, muutub see tÀielikult hallatavaks andmebaasiks, mis suudab konkureerida RDS-iga. Nii see ei ole. VÔib-olla, kui piisavalt vaeva nÀha, lisada tÀiendavad komponendid ja kaasata SRE-insenere, on vÔimalik rajada RDS Kubernetes'i peale.

Soovitan alati ÀÀrmiselt ettevaatlikult lĂ€heneda olekuga koormuste kĂ€ivitamisele Kuberneteses. Enamik inimesi, kes kĂŒsivad, "kas ma saan Kuberneteses kĂ€itada olekuga koormusi", ei oma piisavat kogemust Kubernetesega töötamisel ja tihti – isegi selle koormuse osas, mille kohta kĂŒsitakse.

Nii et, kas peaksime kĂ€ivitama Kafka Kubernetesel? VastukĂŒsimus: kas Kafka töötab paremini ilma Kuberneteseta? Just seetĂ”ttu tahan selles artiklis rĂ”hutada, kuidas Kafka ja Kubernetes ĂŒksteist tĂ€iustavad ning millised takistused vĂ”ivad tekkida nende kombinatsiooni korral.

Suunamine

RÀÀgime alustest — jooksukeskkonnast kui sellisest.

Protsess

Kafka maaklerid sobivad hĂ€sti CPU kasutamiseks. TLS vĂ”ib tuua kaasa teatud kulud. Sellegipoolest vĂ”ivad Kafka kliendid koormata CPU-d rohkem, kui nad kasutavad krĂŒpteerimist, kuid see ei mĂ”juta maaklereid.

MĂ€lu

Kafka maaklerid kasutavad mĂ€lu. JVM-i kuhja suurust on tavaliselt soovitatav piirata 4–5 GB-ni, kuid teil on vaja ka palju sĂŒsteemimĂ€lu, kuna Kafka kasutab lehe vahemĂ€lu vĂ€ga aktiivselt. Kuberneteses seadistage konteineri ressursside piirangud ja nĂ”udmised vastavalt.

Andmete salvestamine

Konteineritesse salvestatud andmed on ajutised – andmed kaovad taaskĂ€ivitamisel. Kafka andmete jaoks vĂ”ib kasutada volĂŒĂŒmi, emptyDir, ja efekt on sama: teie maakleri andmed kaovad pĂ€rast sulgemist. Teie sĂ”numid vĂ”ivad siiski jÀÀda teistes maaklerites replikatena. SeetĂ”ttu peab pĂ€rast taaskĂ€ivitamist esmajoones replikatsiooniprotsessi kĂ€ivitama ebaĂ”nnestunud maakler, mis vĂ”ib vĂ”tta pĂ€ris kaua aega.

SeetĂ”ttu on soovitatav kasutada pikaajalist andmesalvestust. Olgu see mittelikealne pikaajaline salvestus XFS failisĂŒsteemiga vĂ”i tĂ€psemalt ext4. Ärge kasutage NFS-i. Ma hoiatatud. NFS versioonid v3 vĂ”i v4 ei tööta. LĂŒhidalt kokku vĂ”ttes, Kafka maakler lĂ”petab töö, kui ta ei saa andmekausta kustutada tĂ€nu probleemile "rumalate ĂŒmbernimetamisega", mis on NFS-is aktuaalne. Kui ma teid siiani ei veennud, vaadake vĂ€ga tĂ€helepanelikult lugeda seda artiklit. Andmesalvestus peab olema mittelikealne, et Kubernetes saaks taaskĂ€ivitamisel vĂ”i uue sĂ”lme valimisel olema paindlikum.

VÔrk

Nagu enamikus hajutatud sĂŒsteemides, sĂ”ltub Kafka jĂ”udlus tugevalt sellest, et vĂ”rgu hilinemine oleks minimaalne ja ribalaius maksimaalne. Ära pĂŒĂŒa paigutada kĂ”iki brokereid samale sĂ”lmele, sest see vĂ€hendab kĂ€ttesaadavust. Kui Kubernetes'i sĂ”lm ebaĂ”nnestub, ebaĂ”nnestub ka kogu Kafka klaster. Samuti Ă€ra jaota Kafka klastrit laialdaselt erinevate andmekeskuste vahel. Sama kehtib Kubernetes'i klustreid. Heaks kompromissiks on valida erinevad kĂ€ttesaadavuse tsoonid.

Konfiguratsioon

Tavalised manifestid

Kubernetes'i veebisaidil on vÀga hea juhend kuidas seadistada ZooKeeperit manifestide abil. Kuna ZooKeeper on osa Kafka'st, on sellest mugav alustada tutvumist nendega, millised Kubernetes'i kontseptsioonid siinkohal kohaldavad. PÀrast nende mÔistmist saad kasutada samu kontseptsioone ka Kafka klastris.

  • Pod: pod – see on minimaalselt kasutusele vĂ”etav ĂŒhik Kubernetes'is. Pod sisaldab sinu töökoormust ja vastab protsessile sinu klastris. Pod'is on ĂŒks vĂ”i rohkem konteinerit. Iga ZooKeeper'i server ansamblis ja iga broker Kafka klastris töötab eraldi pod'is.
  • StatefulSet: StatefulSet – see on Kubernetes'i objekt, mis tegeleb mitme olekut sĂ€ilitava töökoormusega, mis nĂ”uab koordineerimist. StatefulSetid tagavad pod'ide jĂ€rjekorra ja nende ainulaadsuse.
  • Peata teenuseid: Teenused vĂ”imaldavad eraldada pod'id klientidest loogilise nime abil. Kubernetes vastutab sel juhul koormuse tasakaalustamise eest. Kuid oleku sĂ€ilitavate töökoormuste, nagu ZooKeeper ja Kafka puhul, peavad kliendid suhtlema konkreetse instantsiga. Siin tulevad mĂ€ngu peata teenused: antud juhul jÀÀb kliendile loogiline nimi, kuid pod'ile saab otse ei pöörduda.
  • Pikemaajalise salvestamise mahutid: sellised mahutid on vajalikud mitte-lokaalse blokis pikaajalise salvestuse konfigureerimiseks, mida mainiti varem.

Pealehe Yolean pakub pÔhjalikku komplekti manifeste, millega on mugav alustada töötamist Kafka'ga Kubernetes'is.

Helm-diagrammid

Helm on Kubernetesi paketihaldur, mida saab vĂ”rrelda operatsioonisĂŒsteemide pakettide halduritega nagu yum, apt, Homebrew vĂ”i Chocolatey. Selle abil on mugav installida eelnevalt mÀÀratud tarkvarapakette, mida on kirjeldatud Helm’i diagrammides. HĂ€sti koostatud Helm’i diagramm lihtsustab keerulist ĂŒlesannet: kuidas Ă”igesti konfigureerida kĂ”iki parameetreid Kafka kasutamiseks Kuberneteses. On mitmeid Kafka diagramme: ametlik on inkubeerimisseisundis,ĂŒks on Confluent, veel ĂŒks – Bitnami..

Operaatorid

Kuna Helm’il on teatud puudused, on ĂŒha populaarsemaks saanud veel ĂŒks tööriist: Kubernetesi operaatorid. Operaator mitte ainult ei pakenda tarkvara Kuberneteseks, vaid vĂ”imaldab ka selle tarkvara juurutamist ning haldamist.

Loetelus imelistest operaatoritest mainitakse kahte operaatorit Kafka jaoks. Üks neist on Strimzi.Strimzi abil ei ole Kafka klastri pĂŒstitamine mingi probleem ja see vĂ”tab vaid paar minutit. Peaaegu mingit konfiguratsiooni ei pea tegema, lisaks pakub operaator mitmeid meeldivaid vĂ”imalusi, nĂ€iteks „punkt-punkt“ TLS-krĂŒptimist klastris. Confluent pakub samuti oma operaatorit..

TÔhusus

On vĂ€ga oluline testida jĂ”udlust, varustades paigaldatud Kafka eksemplari kontrollpunktidega. Sellised testid aitavad tuvastada potentsiaalsed kitsaskohad, enne kui probleemid algavad. Õnneks pakub Kafka juba kahte jĂ”udluse testimise tööriista: kafka-producer-perf-test.sh ja kafka-consumer-perf-test.sh.Kasutage neid aktiivselt. Viite saamiseks vĂ”ite kontrollida tulemusi, mida on kirjeldanud selles postituses Jay Kreps, vĂ”i orienteeruda sellele ĂŒlevaatele Amazon MSK poolt StĂ©phane Maarek.

Operatsioonid

JĂ€lgimine

SĂŒsteemis on lĂ€bipaistvus vĂ€ga oluline – vastasel juhul ei saa te aru, mis seal toimub. TĂ€napĂ€eval on olemas tugev tööriistakomplekt, mis tagab pilvepĂ”histe meetmete jĂ€lgimise. Kaks populaarset tööriista selle eesmĂ€rgi saavutamiseks on Prometheus ja Grafana. Prometheus saab koguda meetmeid kĂ”igilt Java protsessidelt (Kafka, Zookeeper, Kafka Connect) JMX eksportija abil – kĂ”ige lihtsamal viisil. Kui lisada cAdvisor'i meetmed, on vĂ”imalik paremini mĂ”ista, kuidas Kuberneteses ressursse kasutatakse.

Strimzi'l on vĂ€ga mugav Grafana armatuurlaud Kafka jaoks. See visualiseerib vĂ”tme mÔÔdikud, nĂ€iteks mitte-replitseeritud sektoreid vĂ”i neid, mis on vĂ”rguĂŒhenduseta. KĂ”ik on vĂ€ga arusaadav. Need mÔÔdikud tĂ€iustatakse ressursside kasutamise ja jĂ”udluse ning stabiilsuse nĂ€itajatega. Niisiis, saate baasil Kafkade klastrite jĂ€lgimise tasuta!

Kafka Kuberneteses - kas see on hea?

Allikas: strimzi.io/docs/master/#kafka_dashboard

Kohandatud jÀlgimisse oleks hea lisada klientide monitorimine (mÔÔdikud tarbijate ja tootjate kohta) ning viibimise jÀlgimine (sel eesmÀrgil on olemas Burrow) ja lÔppkasutaja jÀlgimine - selleks kasutage Kafka Monitor.

Logimine

Logimine on veel ĂŒks vĂ€ga oluline ĂŒlesanne. Veenduge, et kĂ”ik teie Kafka seadistuse konteinerid logitakse stdout ja stderr, ja tehke kindlaks, et teie Kubernetes klaster kogub kĂ”ik logid keskse logimise infrastruktuuri, nĂ€iteks Elasticsearch.

Töötamise kontrollimine

Kubernetes kasutab „elujĂ”u“ (liveness) ja valmisoleku (readiness) alasid, et kontrollida, kas teie podid töötavad korralikult. Kui elujĂ”u kontroll ebaĂ”nnestub, peatab Kubernetes selle konteineri ja seejĂ€rel taaskĂ€ivitab selle automaatselt, kui taaskĂ€ivitamise poliitika on vastavalt seadistatud. Kui valmisoleku kontroll ebaĂ”nnestub, isoleerib Kubernetes selle podi teenuste taotlustest. Seega, sellistes olukordades ei ole enam vaja kĂ€sitsi sekkuda, mis on suur pluss.

Uuenduste juurutamine

StatefulSet'id toetavad automaatseid uuendusi: RollingUpdate strateegia valimisel uuendatakse iga Kafka podi jÀrkjÀrgult. Seega on vÔimalik vÀhendada seisakute kestust nullini.

Mastaabis

Kafka klastrite suurendamine on keeruline ĂŒlesanne. Siiski on Kubernetesis vĂ€ga lihtne podide skaleerimine kindlatele koopiaarvudele, mis tĂ€hendab, et saate deklaratiivselt mÀÀrata nii palju Kafka brokereid kui soovite. KĂ”ige keerulisem asi on sektorite ĂŒmberjaotamine pĂ€rast suurendamist vĂ”i enne vĂ€hendamist. JĂ€llegi saab Kubernetes teid selle ĂŒlesanne tĂ€itmisel aidata.

Haldamine

Kafka klastrite haldamise ĂŒlesandeid, sealhulgas teema loomist ja jaotuste ĂŒmbersuunamist, saab teostada olemasolevate shell-skriptide abil, avades kĂ€surea liidese teie podides. Kuid see lahendus ei ole just kĂ”ige ilusam. Strimzi toetab teemasid haldavat teist operaatorit. Siinkohal on kindlasti veel, millega töötada.

Kopeerimine ja taastamine

NĂŒĂŒd sĂ”ltub meie Kafka kĂ€ttesaadavus ka Kubernetesest. Kui teie Kubernetes klaster kukub, siis halvimal juhul kukub ka Kafka klaster. Murphy seaduse kohaselt juhtub see kindlasti ja te kaotate andmed. Selle riski vĂ€hendamiseks töötage vĂ€lja tugev varundamisstrateegia. VĂ”ite kasutada MirrorMakerit, teine vĂ”imalus on kasutada S3, nagu on selgitatud siin. postitusest Zalando poolt.

KokkuvÔte

Kui töötate vÀikeste vÔi keskmise suurusega Kafka klastritega, on Kubernetes kindlasti mÔistlik, sest see pakub tÀiendavat paindlikkust ja lihtsustab operaatoritega töötamist. Kui teil on tÔsised mittefunktsionaalsed nÔuded, mis puudutavad latentsust ja/vÔi lÀbilaskevÔimet, vÔib-olla tasub kaaluda mÔnda teist juurutusvarianti.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster