Kas Kafka Kuberneteses on hea?

Tere tulemast, Habr!

Kuna tĂ”ime esmakordselt Vene turule teema Kafka ja jĂ€tkame jĂ€lgida selle arendamist. EelkĂ”ige tundus meile huvitav teema Kafka ja Kubernetes. Ülevaatlik (ja ĂŒsna ettevaatlik) artikkel selle teema kohta ilmus Confluenti blogis juba eelmise aasta oktoobris Gwen Shapiro autorluses. TĂ€na soovime teie tĂ€helepanu juhtida uuemale, aprillikuiselle artiklile Johann Gygerilt, kes, kuigi ei suutnud peatuda kĂŒsimĂ€rgi lisamiseta pealkirjas, kĂ€sitleb teemat konkreetselt, tĂ€iustades teksti huvitavate linkidega. Palun vabandage meie vaba tĂ”lget „chaos monkey“, kui suudate!

Kas Kafka Kuberneteses on hea?

Sissejuhatus

Kubernetes on mÔeldud töötama seisundit mitte sÀilitavate koormustega. Reeglina esindavad sellised töökoormused mikroteenuste arhitektuuri, need on kerged, hÀsti horisontaalselt skaleeritavad, alluvad 12-faktori rakenduste pÔhimÔtetele ning vÔimaldavad kasutada automaatseid katkestusi (circuit breaker) ja kaose ahve (chaos monkeys).

Kafka, mis paikneb teisel pool, toimib sisuliselt jaotatud andmebaasina. Seega, töötades, peate arvestama seisundiga, mis on palju raskem kui mikroteenus. Kubernetes toetab olekuga koormusi, kuid nagu Kelsey Hightower oma kahes tweet'is osutab, tuleks nendega ettevaatlik olla:

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

K soovitan alati olla ÀÀrmiselt ettevaatlik, kui kĂ€ivitate olekuga koormusi Kubernetes'es. Enamik neist, kes kĂŒsivad, "kas ma saan Kubernetes'es kĂ€itada olekuga koormusi", ei oma piisavalt kogemusi Kubernetes'ega, ja sageli ka selle koormusega, mille kohta kĂŒsitakse.

Seega, kas peaks Kafka töötama Kubernetesel? VastakĂŒsimus: kas Kafka töötab paremini ilma Kuberneteseta? Just sellepĂ€rast tahan ma selles artiklis rĂ”hutada, kuidas Kafka ja Kubernetes ĂŒksteist tĂ€iendavad ning millised vingerpussid vĂ”ivad nende kombinatsiooniga kaasneda.

KĂ€itusaja

RÀÀgime kĂ”ige olulisemast — kĂ€ituskeskkonnast sellisena.

Protsess

Kafka brokerid on kasutusele lihtsad CPU-ga seotud. TLS vĂ”ib kaasa tuua teatud kulud. Samuti vĂ”ivad Kafka kliendid CPU-d rohkem koormata, kui nad kasutavad krĂŒpteerimist, kuid see ei mĂ”juta brokereid.

MĂ€lu

Kafka brokerid tarvitavad palju mĂ€lu. JVM-i hunniku suurus on tavaliselt soovitatav piirata 4-5 GB peale, kuid vajate ka palju sĂŒsteemimĂ€lu, kuna Kafka kasutab lehekĂŒljecache'i vĂ€ga aktiivselt. Kuberneteses seadke vastavalt konteinerite ressurssidele piirangud ja nĂ”uded.

Andmete salvestamine

Konteinerites andmete salvestamine on efemerne – andmed kaovad taaskĂ€ivitamisel. Kafka andmete jaoks saab kasutada mahtu. emptyDir, ja mĂ”ju on sarnane: teie maakleri andmed kaovad pĂ€rast lĂ”petamist. Teie sĂ”numid vĂ”ivad siiski teiste maaklerite juures jÀÀda koopiatena. SeetĂ”ttu peab pĂ€rast taaskĂ€ivitamist hĂ€vinud maakler kĂ”igepealt taastama kĂ”ik andmed, mis vĂ”ib vĂ”tta aega.

Just seetĂ”ttu tuleks kasutada pikaajalist andmete salvestamist. Olgu see mitte-lokaalne pikaajaline salvestamine koos XFS failisĂŒsteemiga vĂ”i tĂ€psemalt ext4. Ärge kasutage NFS-i. Ma hoiatasin. NFS versioonid v3 vĂ”i v4 ei toimi. LĂŒhidalt, Kafka maakler lĂ”petab töö, kui ei suuda andmekaustat kustutada „lollide ĂŒmbernimetamise” tĂ”ttu, mis NFS-is kehtib. Kui ma ei ole teid veel veennud, siis lugege vĂ€ga tĂ€helepanelikult seda artiklit. Andmete salvestamine peab olema mitte-lokaalne, et Kubernetes saaks pĂ€rast taaskĂ€ivitamist vĂ”i ĂŒmberpaigutamist paindlikumalt uut sĂ”lme valida.

VÔrk

Nagu enamikul hajutatud sĂŒsteemidest, sĂ”ltub Kafka jĂ”udlus tugevalt sellest, et vĂ”rgu latentsus oleks minimaalne ja ribalaius maksimaalne. Ärge proovige kĂ”ikide vahendajate paigutamist samale sĂ”lmele, kuna see vĂ€hendab saadavust. Kui Kubernetes'i sĂ”lm peaks ebaĂ”nnestuma, ebaĂ”nnestub ka kogu Kafka klaster. Samuti Ă€rge hajutage Kafka klastrit eri andmekeskustesse. Sama kehtib Kubernetes'i klastrite kohta. Hea kompromiss on valida erinevad kĂ€ttesaadavuspiirkonnad.

Konfiguratsioon

Tavalised manifestid

Kubernetes'i saidil on vÀga hea juhend kuidas seadistada ZooKeeper'i manifestide abil. Kuna ZooKeeper on osa Kafka'st, on mugav alustada just sellest, et tutvuda, millised Kubernetes'i mÔisted siinkohal rakenduvad. Kui olete sellega tuttav, saate samu mÔisteid rakendada ka Kafka klastriga.

  • Alustama: pod – see on minimaalne juurutatav ĂŒksus Kuberneteses. Podis asub teie koormus ning pod vastab teie klastris asuvale protsessile. Podis on ĂŒks vĂ”i rohkem konteinerit. Iga ZooKeeperi serveri ensemble'is ja iga Kafka klastris olev broker töötavad eraldi podis.
  • StatefulSet: StatefulSet – see on Kubernetes objekti, mis töötab mitme koormusega, mis sĂ€ilitavad olekut, ning sellised koormused nĂ”uavad koordineerimist. StatefulSet pakub garantii podide jĂ€rjekorra ja ainulaadsuse osas.
  • Peata teenused: Teenused vĂ”imaldavad pods'i klentidest lahti harutada loogilise nime kaudu. Kubernetes vastutab sel juhul koormuse tasakaalustamise eest. Siiski, oleku sĂ€ilitamisega seotud koormuste töötlemisel, nagu ZooKeeperi ja Kafka puhul, peavad kliendid jagama teavet konkreetsete instantsidega. Siin tulevadki appi peata teenused: siis on kliendil ikkagi loogiline nimi, kuid otse podiga ei pea ĂŒhendust vĂ”tma.
  • Pikajaline salvestustohm: sellised mahud on vajalikud mitte-lokaalse plokk-pikaajalise salvestuse konfigureerimiseks, mida mainiti eelnevalt.

VDS-l on vÔimalik installida: Yolean pakub pÔhjalikku manifeestide kogumit, mis lihtsustab Kafka kasutamist Kubernetes'is.

Helm-diagrammid

Helm on pakihaldur Kubernetes'ile, mida vĂ”ib vĂ”rrelda operatsioonisĂŒsteemide pakihalduritega, nagu yum, apt, Homebrew vĂ”i Chocolatey. Selle abil on lihtne installida eeldefineeritud tarkvarapakette, mis on kirjeldatud Helm-diagrammides. HĂ€sti koostatud Helm-diagramm lihtsustab keerulist ĂŒlesannet: kuidas Ă”igesti seadistada kĂ”ik parameetrid Kafka kasutamiseks Kubernetes'is. On olemas mitu Kafka diagrammi: ametlik asub inkubaatoriseisundis, ĂŒks neist kuulub Confluent, teine on Bitnami.

Operaatorid

TÀpse seadistuse tÔttu on Helm'il omad puudused, seetÔttu on suurenenud populaarsus ka teisel tööriistal: Kubernetes'i operaatoritel. Operaator mitte ainult ei pakenda tarkvara Kubernetes'ile, vaid vÔimaldab ka selle tarkvara juurutada ja hallata.

Loendis hĂ€mmastavatest operaatoritest mainitakse kahte Kafka operaatorit. Üks neist on Strimzi. Strimzi aitab teil Kafka-klastrit seadistada vaid mĂ”ne minutiga. Peaaegu ei ole vaja konfiguratsiooni muuta, lisaks pakub operaator ka mĂ”ningaid kasulikke funktsioone, nagu nĂ€iteks TLS-krĂŒpteerimine "punkt-punkt" klustri sees. Confluent pakub samuti oma operaatorit.

Tootlikkus

On vĂ€ga oluline testida jĂ”udlust, varustades teie Kafka instantsi kontrollpunktidega. Sellised testid aitavad avastada vĂ”imalikke kitsaskohti enne probleemide tekkimist. Õnneks on Kafka juba varustatud kahe jĂ”udluse testimise tööriistaga: kafka-producer-perf-test.sh ja kafka-consumer-perf-test.sh. Kasutage neid aktiivselt. Viidatud tulemusi saate kontrollida selles postituses Jay Krepsi poolt, vĂ”i jĂ€rgida seda ĂŒlevaadet Amazon MSK StĂ©phane Maarek'ilt.

Operatsioonid

Monitooring

SĂŒsteemi lĂ€binĂ€htavus on vĂ€ga oluline – vastasel juhul ei saa te aru, mis seal toimub. TĂ€na on olemas tugev tööriistade komplekt, mis tagab pilvepĂ”hiselt monitorimise. Kaks populaarset tööriista selleks on Prometheus ja Grafana. Prometheus suudab koguda metrikat kĂ”igilt Java protsessidelt (Kafka, Zookeeper, Kafka Connect) JMX eksportija abil – kĂ”ige lihtsamal viisil. Kui lisada cAdvisor'i metrikad, saab parema arusaama, kuidas Kubernetes ressursside kasutamist haldab.

Strimzil on vÀga mugav Grafana armatuurlaud Kafka jaoks. See visualiseerib vÔtmemetrikaid, nÀiteks alarekereid vÔi neid, mis on offline. KÔik on seal vÀga selge. Need metrikad tÀiendavad teavet ressursside kasutamise ja jÔudluse kohta, samuti stabiilsuse indikaatoreid. Seega saad algse Kafka klastrimonitorimise tasuta!

Kas Kafka Kuberneteses on hea?

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

Seda kĂ”ike tasuks tĂ€iendada kliendimonitorimisega (metrikad tarbijate ja tootjate kohta) ning latentsuse jĂ€lgimisega (selleks on Burrow) ja lĂ”ppkokkuvĂ”ttes monitorimisega – selleks kasutage Kafka Monitor.

Logimine

Logimine on veel ĂŒks oluline ĂŒlesanne. Veenduge, et kĂ”ik teie Kafka paigaldamise konteinerid logitakse, stdout ja stderrja hoolitsege selle eest, et teie Kubernetes klaster koguks kĂ”ik logid kesksesse logide infrastruktuuri, nĂ€iteks Elasticsearch.

Töötavuse kontrollimine

Kubernetes kasutab elujÔudluse ja valmiduse sondid, et kontrollida, kas teie pod'id töötavad normaalselt. Kui elujÔudluse kontroll ebaÔnnestub, peatab Kubernetes selle konteineri ja kÀivitab selle seejÀrel automaatselt uuesti, kui taaskÀivitamise poliitika on Ôigesti seadistatud. Kui valmiduse kontroll ebaÔnnestub, isoleerib Kubernetes selle pod'i teenindamisest. Nii et sellistel juhtudel ei ole enam vaja kÀsitsi sekkuda, mis on suur pluss.

Uuenduste vÀljalaskmine

StatefulSet toetab automaatseid uuendusi: RollingUpdate strateegia valimisel uuendatakse iga Kafka pod'i ĂŒkshaaval. Nii saab pikkuse seisakut vĂ€hendada nullini.

Mastaapimine

Kafka klastrite suurendamine on keeruline ĂŒlesanne. Kuberneetides on aga podide suurendamine kindla replikate arvu vĂ”rra vĂ€ga lihtne, mis tĂ€hendab, et saate deklareerida nii palju Kafka broker’ite koopiaid kui soovite. KĂ”ige keerulisem on siinkohal sektorite ĂŒmbermĂ€ngimine pĂ€rast suurendamist vĂ”i enne vĂ€hendamist. JĂ€llegi aitab teid selles Kubernetes.

Haldamine

Teie Kafka klastrite haldamisega seotud ĂŒlesanded, sealhulgas teemasid loomine ja sektoreid ĂŒmber mÀÀramine, on tehtavad olemasolevate shell-skriptide abil, avades kĂ€surida oma podides. Kuid see lahendus ei ole just ilus. Strimzi toetab teema haldamist teise operaatori kaudu. Siin on veel, millega töötada.

Varundamine ja taastamine

NĂŒĂŒd sĂ”ltub meie Kafka kĂ€ttesaadavus ka Kubernetesest. Kui teie Kubernetes klaster peaks kokku kukkuma, siis kĂ”ige halvemal juhul kukub kokku ka Kafka klaster. Murphy seaduse kohaselt juhtub see kindlasti ja te kaotate andmed. Selliste riskide vĂ€hendamiseks on oluline hĂ€sti lĂ€bi mĂ”elda varunduskonseptsioon. Saate kasutada MirrorMaker'i, teine vĂ”imalus on selle jaoks S3 kasutada, nagu sellest on kirjeldatud selles postituses Zalando.

KokkuvÔte

Kui töötate vÀikeste vÔi keskmise suurusega Kafka klastritega, on kindlasti mÔistlik kasutada Kubernetes, kuna see pakub tÀiendavat paindlikkust ja lihtsustab operaatoritega töötamist. Kui teil on vÀga tÔsised mittefunktsionaalsed nÔuded, mis puudutavad latentsust ja/vÔi lÀbilaskevÔimet, siis tasuks vÔib-olla kaaluda mÔnd muud paigaldusvarianti.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster