Tere tulemast, Habr!
Kuna tĂ”ime esmakordselt Vene turule teema ja jĂ€tkame selle arendamist. EelkĂ”ige tundus meile huvitav teema Kafka ja . Ălevaatlik (ja ĂŒsna ettevaatlik) 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!
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 . 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 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: 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 , ĂŒks neist kuulub , teine on .
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 mainitakse kahte Kafka operaatorit. Ăks neist on . 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 .
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 Jay Krepsi poolt, vĂ”i jĂ€rgida 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!

Allikas:
Seda kĂ”ike tasuks tĂ€iendada kliendimonitorimisega (metrikad tarbijate ja tootjate kohta) ning latentsuse jĂ€lgimisega (selleks on ) ja lĂ”ppkokkuvĂ”ttes monitorimisega â selleks kasutage .
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 .
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 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
