Ydy Kafka ar Kubernetes yn dda?

Cyfarchion, Habr!

Ar un adeg, ni oedd y cyntaf i gyflwyno'r pwnc i farchnad Rwsia Kafka a pharhau trac ar gyfer ei ddatblygiad. Yn benodol, canfuom bwnc y rhyngweithio rhwng Kafka a Kubernetes. Arsylwi (ac yn eithaf gofalus) erthygl cyhoeddwyd y testun hwn ar flog Confluent nôl ym mis Hydref y llynedd dan awduraeth Gwen Shapira. Heddiw hoffem dynnu eich sylw at erthygl fwy diweddar o fis Ebrill gan Johann Gyger, sydd, er nad heb farc cwestiwn yn y teitl, yn archwilio'r pwnc mewn modd mwy sylweddol, gan gyd-fynd â'r testun gyda chysylltiadau diddorol. Maddeuwch i ni y cyfieithiad rhad ac am ddim o “chaos monkey” os gallwch chi!

Ydy Kafka ar Kubernetes yn dda?

Cyflwyniad

Mae Kubernetes wedi'i gynllunio i drin llwythi gwaith di-wladwriaeth. Yn nodweddiadol, cyflwynir llwythi gwaith o'r fath ar ffurf pensaernïaeth microservice, maent yn ysgafn, yn raddfa'n dda yn llorweddol, yn dilyn egwyddorion cymwysiadau 12 ffactor, a gallant weithio gyda thorwyr cylched a mwncïod anhrefn.

Mae Kafka, ar y llaw arall, yn ei hanfod yn gweithredu fel cronfa ddata ddosbarthedig. Felly, wrth weithio, mae'n rhaid i chi ddelio â'r wladwriaeth, ac mae'n llawer trymach na microwasanaeth. Mae Kubernetes yn cefnogi llwythi nodedig, ond fel y mae Kelsey Hightower yn nodi mewn dau drydariad, dylid eu trin yn ofalus:

Mae rhai pobl yn teimlo, os ydych chi'n rholio Kubernetes yn lwyth gwaith dirdynnol, y daw'n gronfa ddata a reolir yn llawn sy'n cystadlu â'r RDS. Mae hyn yn anghywir. Efallai, os ydych chi'n gweithio'n ddigon caled, yn ychwanegu cydrannau ychwanegol ac yn denu tîm o beirianwyr SRE, byddwch chi'n gallu adeiladu RDS ar ben Kubernetes.

Rwyf bob amser yn argymell bod pawb yn ofalus iawn wrth redeg llwythi gwaith urddasol ar Kubernetes. Nid oes gan y rhan fwyaf o bobl sy'n gofyn “a allaf redeg llwythi gwaith dirdynnol ar Kubernetes” ddigon o brofiad gyda Kubernetes, ac yn aml gyda'r llwyth gwaith y maent yn gofyn amdano.

Felly, a ddylech chi redeg Kafka ar Kubernetes? Cwestiwn cownter: a fydd Kafka yn gweithio'n well heb Kubernetes? Dyna pam rwyf am dynnu sylw yn yr erthygl hon at sut mae Kafka a Kubernetes yn ategu ei gilydd, a pha beryglon y gellir eu cyfuno wrth eu cyfuno.

Amser cwblhau

Gadewch i ni siarad am y peth sylfaenol - yr amgylchedd Rhedeg ei hun

proses

Mae broceriaid Kafka yn gyfeillgar i CPU. Gall TLS gyflwyno rhywfaint o orbenion. Fodd bynnag, efallai y bydd cleientiaid Kafka yn fwy dwys CPU os ydynt yn defnyddio amgryptio, ond nid yw hyn yn effeithio ar froceriaid.

Память

Mae broceriaid Kafka yn bwyta cof. Mae maint y domen JVM fel arfer yn gyfyngedig i 4-5 GB, ond bydd angen llawer o gof system arnoch hefyd gan fod Kafka yn defnyddio storfa'r dudalen yn drwm iawn. Yn Kubernetes, gosodwch adnoddau cynhwysydd a gofyn am derfynau yn unol â hynny.

Storfa ddata

Mae storio data mewn cynwysyddion yn fyrhoedlog - mae data'n cael ei golli wrth ailgychwyn. Ar gyfer data Kafka gallwch ddefnyddio cyfrol emptyDir, a bydd yr effaith yn debyg: bydd eich data brocer yn cael ei golli ar ôl ei gwblhau. Gall eich negeseuon gael eu storio o hyd ar froceriaid eraill fel replicas. Felly, ar ôl ailgychwyn, rhaid i'r brocer a fethodd ailadrodd yr holl ddata yn gyntaf, a gall y broses hon gymryd llawer o amser.

Dyma pam y dylech ddefnyddio storio data hirdymor. Gadewch iddo fod yn storfa hirdymor nad yw'n lleol gyda system ffeiliau XFS neu, yn fwy manwl gywir, ext4. Peidiwch â defnyddio NFS. Yr wyf yn rhybuddio chi. Ni fydd fersiynau NFS v3 neu v4 yn gweithio. Yn fyr, bydd y brocer Kafka yn chwalu os na all ddileu'r cyfeiriadur data oherwydd y broblem "ail-enwi dwp" yn NFS. Os nad wyf wedi eich argyhoeddi eto, yn ofalus iawn darllenwch yr erthygl hon. Ni ddylai'r storfa ddata fod yn lleol fel y gall Kubernetes ddewis nod newydd yn fwy hyblyg ar ôl ailgychwyn neu adleoli.

Rhwydwaith

Fel gyda'r rhan fwyaf o systemau gwasgaredig, mae perfformiad Kafka yn dibynnu'n fawr ar gadw hwyrni rhwydwaith i'r lleiafswm a lled band i'r eithaf. Peidiwch â cheisio cynnal pob brocer ar yr un nod, gan y bydd hyn yn lleihau argaeledd. Os bydd nod Kubernetes yn methu, bydd clwstwr cyfan Kafka yn methu. Hefyd, peidiwch â gwasgaru clwstwr Kafka ar draws canolfannau data cyfan. Mae'r un peth yn wir am glwstwr Kubernetes. Cyfaddawd da yn yr achos hwn yw dewis gwahanol barthau argaeledd.

Ffurfweddiad

Maniffestos rheolaidd

Mae gan wefan Kubernetes canllaw da iawn am sut i ffurfweddu ZooKeeper gan ddefnyddio maniffestau. Gan fod ZooKeeper yn rhan o Kafka, mae hwn yn lle da i ddechrau dod yn gyfarwydd â pha gysyniadau Kubernetes sy'n berthnasol yma. Unwaith y byddwch chi'n deall hyn, gallwch chi ddefnyddio'r un cysyniadau â chlwstwr Kafka.

  • Dan: Cod yw'r uned leiaf y gellir ei defnyddio yn Kubernetes. Mae pod yn cynnwys eich llwyth gwaith, ac mae'r pod ei hun yn cyfateb i broses yn eich clwstwr. Mae pod yn cynnwys un neu fwy o gynwysyddion. Bydd pob gweinydd ZooKeeper yn yr ensemble a phob brocer yn y clwstwr Kafka yn rhedeg mewn pod ar wahân.
  • StatefulSet: Mae StatefulSet yn wrthrych Kubernetes sy'n delio â llwythi gwaith gwladwriaethol lluosog, ac mae angen cydlynu llwythi gwaith o'r fath. Mae StatefulSets yn darparu gwarantau ynghylch archebu codennau a'u natur unigryw.
  • Gwasanaethau di-ben: Mae gwasanaethau'n caniatáu ichi ddatgysylltu codennau oddi wrth gleientiaid gan ddefnyddio enw rhesymegol. Kubernetes yn yr achos hwn sy'n gyfrifol am gydbwyso llwyth. Fodd bynnag, wrth weithredu llwythi gwaith cadarn, fel ZooKeeper a Kafka, mae angen i gleientiaid gyfathrebu ag achos penodol. Dyma lle mae gwasanaethau di-ben yn ddefnyddiol: yn yr achos hwn, bydd gan y cleient enw rhesymegol o hyd, ond ni fydd yn rhaid i chi gysylltu â'r pod yn uniongyrchol.
  • Cyfaint storio hirdymor: Mae angen y cyfrolau hyn i ffurfweddu'r storfa barhaus bloc nad yw'n lleol a grybwyllir uchod.

Ar Iolaidd Yn darparu set gynhwysfawr o faniffestau i'ch helpu i ddechrau gyda Kafka ar Kubernetes.

Siartiau Helm

Mae Helm yn rheolwr pecyn ar gyfer Kubernetes y gellir ei gymharu â rheolwyr pecyn OS fel yum, apt, Homebrew neu Chocolatey. Mae'n ei gwneud hi'n hawdd gosod pecynnau meddalwedd rhagddiffiniedig a ddisgrifir yn siartiau Helm. Mae siart Helm a ddewiswyd yn dda yn gwneud y dasg anodd o sut i ffurfweddu'r holl baramedrau'n iawn i ddefnyddio Kafka ar Kubernetes yn hawdd. Mae yna sawl diagram Kafka: mae'r un swyddogol wedi'i leoli mewn cyflwr deorydd, mae un o Cyflenwol, un arall - o Bitnami.

Gweithredwyr

Oherwydd bod gan Helm rai diffygion, mae offeryn arall yn dod yn boblogaidd iawn: gweithredwyr Kubernetes. Mae'r gweithredwr nid yn unig yn pecynnu meddalwedd ar gyfer Kubernetes, ond hefyd yn caniatáu ichi ddefnyddio meddalwedd o'r fath a'i reoli.

Yn y rhestr gweithredwyr anhygoel Sonnir am ddau weithredwr ar gyfer Kafka. Un o nhw - Strimzi. Gyda Strimzi, mae'n hawdd cael eich clwstwr Kafka ar waith mewn munudau. Nid oes angen bron unrhyw gyfluniad, yn ogystal, mae'r gweithredwr ei hun yn darparu rhai nodweddion braf, er enghraifft, amgryptio TLS pwynt-i-bwynt o fewn y clwstwr. Mae Confluent hefyd yn darparu gweithredwr ei hun.

Cynhyrchiant

Mae'n bwysig profi perfformiad trwy feincnodi eich enghraifft Kafka. Bydd profion o'r fath yn eich helpu i ddod o hyd i dagfeydd posibl cyn i broblemau godi. Yn ffodus, mae Kafka eisoes yn darparu dau offeryn profi perfformiad: kafka-producer-perf-test.sh и kafka-consumer-perf-test.sh. Gwnewch ddefnydd gweithredol ohonynt. Er gwybodaeth, gallwch gyfeirio at y canlyniadau a ddisgrifir yn y swydd hon Jay Kreps, neu canolbwyntio ar adolygiad hwn Amazon MSK gan Stéphane Maarek.

Gweithrediadau

Monitro

Mae tryloywder yn y system yn bwysig iawn - fel arall ni fyddwch yn deall beth sy'n digwydd ynddi. Heddiw mae yna becyn cymorth cadarn sy'n darparu monitro ar sail metrigau yn arddull brodorol y cwmwl. Dau offeryn poblogaidd at y diben hwn yw Prometheus a Grafana. Gall Prometheus gasglu metrigau o holl brosesau Java (Kafka, Zookeeper, Kafka Connect) gan ddefnyddio allforiwr JMX - yn y ffordd symlaf. Os ydych chi'n ychwanegu metrigau cAdvisor, gallwch chi ddeall yn well sut mae adnoddau'n cael eu defnyddio yn Kubernetes.

Mae gan Strimzi enghraifft gyfleus iawn o ddangosfwrdd Grafana ar gyfer Kafka. Mae'n delweddu metrigau allweddol, er enghraifft, am sectorau nad ydynt yn cael eu hailadrodd neu'r rhai nad ydynt yn cael eu hailadrodd. Mae popeth yn glir iawn yno. Ategir y metrigau hyn gan ddefnyddio adnoddau a gwybodaeth am berfformiad, yn ogystal â dangosyddion sefydlogrwydd. Felly rydych chi'n cael monitro clwstwr Kafka sylfaenol am ddim!

Ydy Kafka ar Kubernetes yn dda?

Ffynhonnell: streamzi.io/docs/master/#kafka_dashboard

Byddai'n braf ategu hyn i gyd â monitro cleientiaid (metrigau ar ddefnyddwyr a chynhyrchwyr), yn ogystal â monitro hwyrni (ar gyfer hyn mae yna Burrow) a monitro diwedd-i-ddiwedd - ar gyfer y defnydd hwn Monitor Kafka.

Logio

Mae logio yn dasg hollbwysig arall. Gwnewch yn siŵr bod yr holl gynwysyddion yn eich gosodiad Kafka wedi'u mewngofnodi stdout и stderr, a hefyd sicrhau bod eich clwstwr Kubernetes yn agregu pob log i mewn i seilwaith logio canolog, e.e. Elastig.

Profi Swyddogaethol

Mae Kubernetes yn defnyddio chwilwyr bywiogrwydd a pharodrwydd i wirio a yw'ch codennau'n rhedeg yn normal. Os bydd y gwiriad bywiogrwydd yn methu, bydd Kubernetes yn atal y cynhwysydd hwnnw ac yna'n ei ailgychwyn yn awtomatig os gosodir y polisi ailgychwyn yn unol â hynny. Os bydd y gwiriad parodrwydd yn methu, mae Kubernetes yn ynysu'r pod rhag ceisiadau gwasanaethu. Felly, mewn achosion o'r fath, nid oes angen ymyrraeth â llaw o gwbl mwyach, sy'n fantais fawr.

Cyflwyno diweddariadau

Mae StatefulSets yn cefnogi diweddariadau awtomatig: os dewiswch y strategaeth RollingUpdate, bydd pob un o dan Kafka yn cael ei ddiweddaru yn ei dro. Yn y modd hwn, gellir lleihau amser segur i sero.

Graddio

Nid yw graddio clwstwr Kafka yn dasg hawdd. Fodd bynnag, mae Kubernetes yn ei gwneud hi'n hawdd iawn graddio codennau i nifer benodol o atgynyrchiadau, sy'n golygu y gallwch chi ddiffinio'n ddatganoledig cymaint o froceriaid Kafka ag y dymunwch. Y peth anoddaf yn yr achos hwn yw ailbennu sectorau ar ôl cynyddu neu cyn lleihau. Unwaith eto, bydd Kubernetes yn eich helpu gyda'r dasg hon.

Gweinyddiaeth

Gellir gwneud tasgau sy'n gysylltiedig â gweinyddu'ch clwstwr Kafka, megis creu pynciau ac ailbennu sectorau, gan ddefnyddio sgriptiau cregyn presennol trwy agor y rhyngwyneb llinell orchymyn yn eich codennau. Fodd bynnag, nid yw'r ateb hwn yn brydferth iawn. Mae Strimzi yn cefnogi rheoli pynciau gan ddefnyddio gweithredwr gwahanol. Mae rhywfaint o le i wella yma.

Gwneud copi wrth gefn ac adfer

Nawr bydd argaeledd Kafka hefyd yn dibynnu ar argaeledd Kubernetes. Os bydd eich clwstwr Kubernetes yn methu, yna yn y senario waethaf, bydd eich clwstwr Kafka hefyd yn methu. Yn ôl cyfraith Murphy, bydd hyn yn bendant yn digwydd, a byddwch yn colli data. Er mwyn lleihau'r math hwn o risg, mae gennych gysyniad da wrth gefn. Gallwch ddefnyddio MirrorMaker, opsiwn arall yw defnyddio S3 ar gyfer hyn, fel y disgrifir yn hwn post o Zalando.

Casgliad

Wrth weithio gyda chlystyrau Kafka bach i ganolig, mae'n bendant yn werth defnyddio Kubernetes gan ei fod yn darparu hyblygrwydd ychwanegol ac yn symleiddio profiad y gweithredwr. Os oes gennych chi ofynion hwyrni a/neu drwybwn anweithredol sylweddol iawn, yna efallai y byddai'n well ystyried rhyw opsiwn defnyddio arall.

Ffynhonnell: hab.com

Ychwanegu sylw