Je, Kafka kwenye Kubernetes ni nzuri?

Salamu, Habr!

Wakati mmoja, tulikuwa wa kwanza kuanzisha mada kwenye soko la Kirusi Kafka na kuendelea wimbo kwa maendeleo yake. Hasa, tulipata mada ya mwingiliano kati ya Kafka na Mabernet. Inazingatiwa (na kwa uangalifu kabisa) makala mada hii ilichapishwa kwenye blogu ya Confluent nyuma mnamo Oktoba mwaka jana chini ya uandishi wa Gwen Shapira. Leo tungependa kuteka mawazo yako kwa nakala ya hivi karibuni zaidi kutoka Aprili na Johann Gyger, ambaye, ingawa hana alama ya swali katika kichwa, anachunguza mada hiyo kwa njia kubwa zaidi, akiandamana na maandishi na viungo vya kupendeza. Tafadhali tusamehe tafsiri ya bure ya "tumbili wa machafuko" ikiwa unaweza!

Je, Kafka kwenye Kubernetes ni nzuri?

Utangulizi

Kubernetes imeundwa kushughulikia mzigo wa kazi usio na uraia. Kwa kawaida, mizigo ya kazi hiyo inawasilishwa kwa namna ya usanifu wa microservice, ni nyepesi, hupanda vizuri kwa usawa, kufuata kanuni za maombi ya vipengele 12, na inaweza kufanya kazi na wavunjaji wa mzunguko na nyani za machafuko.

Kafka, kwa upande mwingine, kimsingi hufanya kama hifadhidata iliyosambazwa. Hivyo, wakati wa kufanya kazi, unapaswa kukabiliana na hali, na ni nzito sana kuliko microservice. Kubernetes inasaidia mizigo ya hali ya juu, lakini kama Kelsey Hightower anavyoonyesha kwenye twiti mbili, zinapaswa kushughulikiwa kwa uangalifu:

Baadhi ya watu wanahisi kuwa ukiingiza Kubernetes kwenye mzigo mkubwa wa kazi, inakuwa hifadhidata inayosimamiwa kikamilifu ambayo inashindana na RDS. Hii si sahihi. Labda, ikiwa unafanya kazi kwa bidii vya kutosha, ongeza vipengee vya ziada na kuvutia timu ya wahandisi wa SRE, utaweza kuunda RDS juu ya Kubernetes.

Mimi hupendekeza kila mtu kuwa waangalifu sana anapoendesha mzigo mkubwa wa kazi kwenye Kubernetes. Watu wengi wanaouliza "Je! ninaweza kuendesha mzigo mkubwa wa kazi kwenye Kubernetes" hawana uzoefu wa kutosha na Kubernetes, na mara nyingi na mzigo wa kazi wanaouliza.

Kwa hivyo, unapaswa kukimbia Kafka kwenye Kubernetes? Swali la kujibu: Je, Kafka itafanya kazi vizuri zaidi bila Kubernetes? Ndio maana ninataka kuangazia katika nakala hii jinsi Kafka na Kubernetes wanavyokamilishana, na ni mitego gani inaweza kuja kwa kuzichanganya.

Muda wa kukamilika

Hebu tuzungumze juu ya jambo la msingi - mazingira ya kukimbia yenyewe

mchakato

Madalali wa Kafka ni rafiki wa CPU. TLS inaweza kuanzisha baadhi ya malipo. Hata hivyo, wateja wa Kafka wanaweza kuwa na CPU kubwa zaidi ikiwa watatumia usimbaji fiche, lakini hii haiathiri madalali.

kumbukumbu

Madalali wa Kafka wanakula kumbukumbu. Saizi ya lundo la JVM kawaida huwa na GB 4-5, lakini pia utahitaji kumbukumbu nyingi za mfumo kwani Kafka hutumia kashe ya ukurasa kwa uzito sana. Katika Kubernetes, weka rasilimali ya chombo na uombe vikomo ipasavyo.

Hifadhi ya data

Hifadhi ya data katika vyombo ni ya muda mfupi - data hupotea inapowashwa upya. Kwa data ya Kafka unaweza kutumia kiasi emptyDir, na athari itakuwa sawa: data yako ya wakala itapotea baada ya kukamilika. Ujumbe wako bado unaweza kuhifadhiwa kwenye madalali wengine kama nakala. Kwa hiyo, baada ya kuanzisha upya, wakala aliyeshindwa lazima kwanza kurudia data zote, na mchakato huu unaweza kuchukua muda mwingi.

Hii ndiyo sababu unapaswa kutumia hifadhi ya data ya muda mrefu. Wacha iwe uhifadhi wa muda mrefu usio wa ndani na mfumo wa faili wa XFS au, kwa usahihi zaidi, ext4. Usitumie NFS. Nilikuonya. Matoleo ya NFS v3 au v4 hayatafanya kazi. Kwa kifupi, wakala wa Kafka ataanguka ikiwa hawezi kufuta saraka ya data kutokana na tatizo la "kubadilisha jina la kijinga" katika NFS. Ikiwa bado sijakushawishi, kwa uangalifu sana soma makala hii. Hifadhi ya data inapaswa kuwa isiyo ya karibu ili Kubernetes iweze kuchagua nodi mpya kwa urahisi baada ya kuwasha upya au kuhamisha.

Mtandao

Kama ilivyo kwa mifumo mingi iliyosambazwa, utendakazi wa Kafka unategemea sana kuweka muda wa kusubiri wa mtandao kwa kiwango cha chini zaidi na kipimo data hadi cha juu zaidi. Usijaribu kukaribisha madalali wote kwenye nodi moja, kwani hii itapunguza upatikanaji. Ikiwa nodi ya Kubernetes itashindwa, nguzo nzima ya Kafka itashindwa. Pia, usitawanye nguzo ya Kafka kwenye vituo vyote vya data. Vile vile huenda kwa nguzo ya Kubernetes. Maelewano mazuri katika kesi hii ni kuchagua kanda tofauti za upatikanaji.

Usanidi

Ilani za mara kwa mara

Tovuti ya Kubernetes ina mwongozo mzuri sana kuhusu jinsi ya kusanidi ZooKeeper kwa kutumia maonyesho. Kwa kuwa ZooKeeper ni sehemu ya Kafka, hapa ni mahali pazuri pa kuanza kufahamu dhana za Kubernetes zinatumika hapa. Mara tu unapoelewa hili, unaweza kutumia dhana sawa na nguzo ya Kafka.

  • Chini ya: Ganda ni sehemu ndogo zaidi inayoweza kutumiwa huko Kubernetes. Ganda lina mzigo wako wa kazi, na ganda lenyewe linalingana na mchakato katika nguzo yako. Ganda lina chombo kimoja au zaidi. Kila seva ya ZooKeeper kwenye mkusanyiko na kila dalali katika nguzo ya Kafka itaendeshwa katika ganda tofauti.
  • StatefulSet: StatefulSet ni kifaa cha Kubernetes ambacho hushughulikia mizigo mingi ya hali ya juu, na mizigo kama hiyo inahitaji uratibu. StatefulSets hutoa hakikisho kuhusu upangaji wa maganda na upekee wao.
  • Huduma zisizo na kichwa: Huduma hukuruhusu kutenga maganda kutoka kwa wateja kwa kutumia jina la kimantiki. Kubernetes katika kesi hii ni wajibu wa kusawazisha mzigo. Walakini, wakati wa kufanya kazi nyingi, kama vile ZooKeeper na Kafka, wateja wanahitaji kuwasiliana na mfano maalum. Hapa ndipo huduma zisizo na kichwa zinakuja kwa manufaa: katika kesi hii, mteja bado atakuwa na jina la mantiki, lakini hutahitaji kuwasiliana na pod moja kwa moja.
  • Kiasi cha uhifadhi wa muda mrefu: Kiasi hiki kinahitajika ili kusanidi hifadhi isiyo na eneo la karibu iliyotajwa hapo juu.

Cha Yolean Hutoa seti ya kina ya maonyesho ili kukusaidia kuanza kutumia Kafka kwenye Kubernetes.

Chati za vichwa

Helm ni kidhibiti kifurushi cha Kubernetes ambacho kinaweza kulinganishwa na wasimamizi wa vifurushi vya OS kama vile yum, apt, Homebrew au Chocolatey. Inarahisisha kusakinisha vifurushi vya programu vilivyofafanuliwa awali katika chati za Helm. Chati ya Helm iliyochaguliwa vizuri hufanya kazi ngumu ya jinsi ya kusanidi vizuri vigezo vyote vya kutumia Kafka kwenye Kubernetes rahisi. Kuna michoro kadhaa za Kafka: ile rasmi iko katika hali ya incubator, kuna moja kutoka Confluent, moja zaidi - kutoka BitNami.

Waendeshaji

Kwa sababu Helm ina mapungufu fulani, chombo kingine kinapata umaarufu mkubwa: waendeshaji wa Kubernetes. Opereta sio tu hupakia programu ya Kubernetes, lakini pia inakuwezesha kupeleka programu hiyo na kuisimamia.

Katika orodha waendeshaji wa ajabu Waendeshaji wawili wa Kafka wametajwa. Mmoja wao - Strimzi. Ukiwa na Strimzi, ni rahisi kupata na kuendesha kikundi chako cha Kafka kwa dakika chache. Kwa kweli hakuna usanidi unaohitajika, kwa kuongeza, mwendeshaji yenyewe hutoa vipengele vyema, kwa mfano, usimbaji fiche wa TLS wa uhakika hadi kumweka ndani ya nguzo. Confluent pia hutoa mwendeshaji mwenyewe.

Uzalishaji

Ni muhimu kupima utendakazi kwa kuweka alama kwenye mfano wako wa Kafka. Vipimo kama hivyo vitakusaidia kupata vikwazo vinavyowezekana kabla ya matatizo kutokea. Kwa bahati nzuri, Kafka tayari hutoa zana mbili za kupima utendaji: kafka-producer-perf-test.sh ΠΈ kafka-consumer-perf-test.sh. Zitumie kikamilifu. Kwa kumbukumbu, unaweza kurejelea matokeo yaliyoelezwa katika chapisho hili Jay Kreps, au kuzingatia tathmini hii Amazon MSK na StΓ©phane Maarek.

Operesheni

Ufuatiliaji

Uwazi katika mfumo ni muhimu sana - vinginevyo huwezi kuelewa kinachotokea ndani yake. Leo kuna zana dhabiti ya zana ambayo hutoa ufuatiliaji kulingana na vipimo katika mtindo asili wa wingu. Zana mbili maarufu kwa kusudi hili ni Prometheus na Grafana. Prometheus inaweza kukusanya metriki kutoka kwa michakato yote ya Java (Kafka, Zookeeper, Kafka Connect) kwa kutumia muuzaji nje wa JMX - kwa njia rahisi zaidi. Ukiongeza vipimo vya cAdvisor, unaweza kuelewa kikamilifu zaidi jinsi rasilimali zinavyotumika katika Kubernetes.

Strimzi ina mfano unaofaa sana wa dashibodi ya Grafana kwa Kafka. Inatoa taswira ya vipimo muhimu, kwa mfano, kuhusu sekta ambazo hazijaigwa au zile ambazo haziko mtandaoni. Kila kitu kiko wazi sana hapo. Vipimo hivi vinakamilishwa na matumizi ya rasilimali na maelezo ya utendaji, pamoja na viashirio vya uthabiti. Kwa hivyo unapata ufuatiliaji wa nguzo za msingi za Kafka bure!

Je, Kafka kwenye Kubernetes ni nzuri?

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

Itakuwa vyema kuongezea haya yote kwa ufuatiliaji wa mteja (metrics kwa watumiaji na wazalishaji), pamoja na ufuatiliaji wa latency (kwa hili kuna Piga) na ufuatiliaji wa mwisho hadi mwisho - kwa matumizi haya Kafka Monitor.

Kuweka magogo

Kuweka kumbukumbu ni kazi nyingine muhimu. Hakikisha vyombo vyote katika usakinishaji wako wa Kafka vimeingia stdout ΠΈ stderr, na pia uhakikishe kuwa kundi lako la Kubernetes linajumlisha kumbukumbu zote kuwa miundombinu kuu ya ukataji miti, k.m. Elasticsearch.

Afya Angalia

Kubernetes hutumia uchanganuzi wa uchangamfu na utayari ili kuangalia kama maganda yako yanafanya kazi kawaida. Kama ukaguzi wa uhai utashindwa, Kubernetes itasimamisha kontena hilo na kisha kuiwasha upya kiotomatiki ikiwa sera ya kuanzisha upya itawekwa ipasavyo. Ikiwa ukaguzi wa utayari utashindwa, Kubernetes hutenga ganda kutoka kwa maombi ya kuhudumia. Kwa hiyo, katika hali hiyo, uingiliaji wa mwongozo hauhitajiki kabisa, ambayo ni pamoja na kubwa.

Inasambaza sasisho

StatefulSets inasaidia masasisho ya kiotomatiki: ukichagua mkakati wa RollingUpdate, kila moja chini ya Kafka itasasishwa kwa zamu. Kwa njia hii, muda wa kupungua unaweza kupunguzwa hadi sifuri.

Kuongeza

Kuongeza nguzo ya Kafka sio kazi rahisi. Walakini, Kubernetes hurahisisha sana kuongeza maganda kwa idadi fulani ya nakala, ambayo inamaanisha kuwa unaweza kufafanua kwa uwazi madalali wengi wa Kafka upendavyo. Jambo ngumu zaidi katika kesi hii ni kugawa tena sekta baada ya kuongeza au kabla ya kupunguza. Tena, Kubernetes itakusaidia kwa kazi hii.

Utawala

Majukumu yanayohusiana na kusimamia kundi lako la Kafka, kama vile kuunda mada na kugawa upya sekta, yanaweza kufanywa kwa kutumia hati zilizopo za ganda kwa kufungua kiolesura cha mstari wa amri kwenye maganda yako. Walakini, suluhisho hili sio nzuri sana. Strimzi inasaidia kudhibiti mada kwa kutumia opereta tofauti. Kuna nafasi ya kuboresha hapa.

Hifadhi nakala rudufu na urejeshe

Sasa upatikanaji wa Kafka pia utategemea upatikanaji wa Kubernetes. Ikiwa nguzo yako ya Kubernetes itashindwa, basi katika hali mbaya zaidi, nguzo yako ya Kafka pia itashindwa. Kwa mujibu wa sheria ya Murphy, hii itatokea, na utapoteza data. Ili kupunguza aina hii ya hatari, kuwa na dhana nzuri ya chelezo. Unaweza kutumia MirrorMaker, chaguo jingine ni kutumia S3 kwa hili, kama ilivyoelezwa katika hili chapisho kutoka Zalando.

Hitimisho

Unapofanya kazi na vikundi vidogo vya ukubwa wa kati vya Kafka, inafaa kutumia Kubernetes kwani inatoa unyumbulifu zaidi na kurahisisha matumizi ya waendeshaji. Ikiwa una mahitaji muhimu sana ya muda usiofanya kazi na/au upitishaji, basi inaweza kuwa bora kuzingatia chaguo lingine la kupeleka.

Chanzo: mapenzi.com

Kuongeza maoni