Kubernetesdagi Kafka yaxshimi?

Salom, Xabr!

O'z vaqtida biz ushbu mavzuni Rossiya bozoriga birinchi bo'lib kiritgan edik Kafka va davom eting kuzatib boring rivojlanishi uchun. Xususan, biz Kafka va o'rtasidagi o'zaro ta'sir mavzusini topdik Kubernetes. Kuzatiladigan (va juda ehtiyotkor) maqola bu mavzu Confluent blogida o'tgan yilning oktyabr oyida Gven Shapiraning muallifligi ostida nashr etilgan. Bugun biz sizning e'tiboringizni Iogann Gygerning aprel oyidagi so'nggi maqolasiga qaratmoqchimiz, u sarlavhada savol belgisi bo'lmasa-da, mavzuni mazmunliroq ko'rib chiqadi va matnga qiziqarli havolalar bilan birga keladi. Iltimos, iloji bo'lsa, "xaos maymun" ning bepul tarjimasini kechiring!

Kubernetesdagi Kafka yaxshimi?

kirish

Kubernetes fuqaroligi bo'lmagan ish yuklarini boshqarish uchun mo'ljallangan. Odatda, bunday ish yuklari mikroservis arxitekturasi ko'rinishida taqdim etiladi, ular engil, gorizontal ravishda yaxshi o'lchaydi, 12 faktorli ilovalar tamoyillariga amal qiladi va o'chirgichlar va xaos maymunlari bilan ishlay oladi.

Boshqa tomondan, Kafka asosan taqsimlangan ma'lumotlar bazasi vazifasini bajaradi. Shunday qilib, ishlayotganda siz davlat bilan shug'ullanishingiz kerak va bu mikroservisdan ancha og'irroq. Kubernetes davlat yuklarini qo'llab-quvvatlaydi, ammo Kelsi Xaytauer ikkita tvitda ta'kidlaganidek, ularga ehtiyotkorlik bilan munosabatda bo'lish kerak:

Ba'zi odamlar, agar siz Kubernetes-ni statistik ish yukiga aylantirsangiz, u RDS bilan raqobatlashadigan to'liq boshqariladigan ma'lumotlar bazasiga aylanadi deb o'ylashadi. Bu unday emas. Ehtimol, agar siz etarlicha ishlasangiz, qo'shimcha komponentlar qo'shsangiz va SRE muhandislari jamoasini jalb qilsangiz, siz Kubernetes tepasida RDS qura olasiz.

Men har doim hammaga Kubernetes-da statistik ish yuklarini ishga tushirishda juda ehtiyot bo'lishni tavsiya qilaman. "Kubernetes-da shtat yuklarini ishga tushira olamanmi" deb so'ragan ko'pchilik odamlar Kubernetes bilan va ko'pincha ular so'ragan ish yukida etarli tajribaga ega emaslar.

Xo'sh, siz Kafkani Kubernetesda boshqarishingiz kerakmi? Qarshi savol: Kafka Kubernetessiz yaxshiroq ishlaydimi? Shuning uchun men ushbu maqolada Kafka va Kubernetes qanday qilib bir-birini to'ldirishi va ularni birlashtirishda qanday tuzoqlar paydo bo'lishi mumkinligini ta'kidlamoqchiman.

Tugatish vaqti

Keling, asosiy narsa - ish vaqti muhitining o'zi haqida gapiraylik

jarayon

Kafka brokerlari protsessorga mos keladi. TLS ba'zi bir qo'shimcha xarajatlarni kiritishi mumkin. Biroq, Kafka mijozlari shifrlashdan foydalansalar, ko'proq CPU intensiv bo'lishi mumkin, ammo bu brokerlarga ta'sir qilmaydi.

xotira

Kafka brokerlari xotirani yeyishadi. JVM yig'ish hajmi odatda 4-5 GB bilan cheklangan, ammo Kafka sahifa keshini juda ko'p ishlatganligi uchun sizga juda ko'p tizim xotirasi kerak bo'ladi. Kubernetes-da konteyner manbasini o'rnating va shunga mos ravishda cheklovlarni so'rang.

Ma'lumotlar do'koni

Konteynerlarda ma'lumotlarni saqlash vaqtinchalik - qayta ishga tushirilganda ma'lumotlar yo'qoladi. Kafka ma'lumotlari uchun siz hajmdan foydalanishingiz mumkin emptyDir, va ta'sir shunga o'xshash bo'ladi: sizning broker ma'lumotlaringiz tugagandan so'ng yo'qoladi. Sizning xabarlaringiz hali ham boshqa brokerlarda replika sifatida saqlanishi mumkin. Shuning uchun, qayta ishga tushirilgandan so'ng, muvaffaqiyatsiz broker birinchi navbatda barcha ma'lumotlarni takrorlashi kerak va bu jarayon juda ko'p vaqt talab qilishi mumkin.

Shuning uchun siz uzoq muddatli ma'lumotlarni saqlashdan foydalanishingiz kerak. XFS fayl tizimi yoki aniqrog'i ext4 bilan mahalliy bo'lmagan uzoq muddatli saqlash bo'lsin. NFS dan foydalanmang. Men sizni ogohlantirdim. NFS v3 yoki v4 versiyalari ishlamaydi. Xulosa qilib aytganda, Kafka brokeri NFSdagi "nomini o'zgartirish ahmoqona" muammosi tufayli ma'lumotlar katalogini o'chira olmasa, ishlamay qoladi. Agar sizni hali ishontirmagan bo'lsam, juda ehtiyotkorlik bilan ushbu maqolani o'qing. Ma'lumotlar ombori mahalliy bo'lmagan bo'lishi kerak, shunda Kubernetes qayta ishga tushirilgandan yoki ko'chirilgandan so'ng yangi tugunni yanada moslashuvchan tanlashi mumkin.

Tarmoq

Aksariyat taqsimlangan tizimlarda bo'lgani kabi, Kafkaning ishlashi tarmoqning kechikishini minimal darajada va o'tkazish qobiliyatini maksimal darajada saqlashga bog'liq. Barcha brokerlarni bitta tugunga joylashtirishga urinmang, chunki bu mavjudlikni kamaytiradi. Agar Kubernetes tugunlari ishlamay qolsa, butun Kafka klasteri ishlamay qoladi. Bundan tashqari, Kafka klasterini butun ma'lumotlar markazlari bo'ylab tarqatmang. Xuddi shu narsa Kubernetes klasteriga ham tegishli. Bu holatda yaxshi kelishuv turli xil mavjudlik zonalarini tanlashdir.

Konfiguratsiya

Doimiy manifestlar

Kubernetes veb-saytida mavjud juda yaxshi qo'llanma manifestlar yordamida ZooKeeperni qanday sozlash haqida. ZooKeeper Kafkaning bir qismi bo'lganligi sababli, bu erda Kubernetes tushunchalari qo'llanilishi bilan tanishish uchun yaxshi joy. Buni tushunganingizdan so'ng, Kafka klasteri bilan bir xil tushunchalardan foydalanishingiz mumkin.

  • ostida: Pod - Kubernetesdagi eng kichik joylashtiriladigan birlik. Pod sizning ish yukingizni o'z ichiga oladi va podning o'zi klasteringizdagi jarayonga mos keladi. Podada bir yoki bir nechta konteyner mavjud. Ansambldagi har bir ZooKeeper serveri va Kafka klasteridagi har bir broker alohida podda ishlaydi.
  • Stateful Set: StatefulSet - bu Kubernetes ob'ekti bo'lib, u bir nechta statusli ish yuklarini boshqaradi va bunday ish yuklari muvofiqlashtirishni talab qiladi. StatefulSets podkastlarni tartibga solish va ularning o'ziga xosligi bo'yicha kafolatlar beradi.
  • Boshsiz xizmatlar: Xizmatlar mantiqiy nom yordamida mijozlardan podkastlarni ajratish imkonini beradi. Kubernetes bu holda yukni muvozanatlash uchun javobgardir. Biroq, ZooKeeper va Kafka kabi statistik ish yuklarini ishlatganda, mijozlar ma'lum bir misol bilan bog'lanishlari kerak. Bu erda boshsiz xizmatlar foydali bo'ladi: bu holda, mijoz hali ham mantiqiy ismga ega bo'ladi, lekin siz to'g'ridan-to'g'ri podga murojaat qilishingiz shart emas.
  • Uzoq muddatli saqlash hajmi: Ushbu hajmlar yuqorida aytib o'tilgan mahalliy bo'lmagan blokli doimiy xotirani sozlash uchun kerak.

ning Yolean Kubernetesda Kafka bilan ishlashni boshlashingizga yordam beradigan keng qamrovli manifestlar to'plamini taqdim etadi.

Rulda jadvallari

Helm - yum, apt, Homebrew yoki Chocolatey kabi OS paket menejerlari bilan taqqoslanishi mumkin bo'lgan Kubernetes uchun paket menejeri. Bu Helm diagrammalarida tasvirlangan oldindan belgilangan dasturiy paketlarni o'rnatishni osonlashtiradi. Yaxshi tanlangan Helm diagrammasi Kubernetes-da Kafkadan foydalanish uchun barcha parametrlarni qanday qilib to'g'ri sozlash bo'yicha qiyin vazifani osonlashtiradi. Bir nechta Kafka diagrammasi mavjud: rasmiysi joylashgan inkubator holatidadan bittasi bor ConFluent™, yana bitta - dan Bitnami.

Operatorlar

Helm-ning ma'lum kamchiliklari borligi sababli, yana bir vosita katta mashhurlikka erishmoqda: Kubernetes operatorlari. Operator nafaqat Kubernetes uchun dasturiy ta'minotni paketlaydi, balki bunday dasturiy ta'minotni joylashtirish va uni boshqarish imkonini beradi.

ro'yxat ajoyib operatorlar Kafka uchun ikkita operator qayd etilgan. Ulardan biri - Strimzi. Strimzi yordamida Kafka klasteringizni bir necha daqiqada ishga tushirish oson. Deyarli hech qanday konfiguratsiya talab qilinmaydi, bundan tashqari, operatorning o'zi ba'zi yoqimli xususiyatlarni taqdim etadi, masalan, klaster ichida nuqtadan nuqtaga TLS shifrlash. Confluent ham beradi o'z operatori.

unumdorlik

Kafka misolingizni taqqoslash orqali unumdorlikni sinab ko'rish muhimdir. Bunday testlar muammolar paydo bo'lishidan oldin mumkin bo'lgan to'siqlarni topishga yordam beradi. Yaxshiyamki, Kafka allaqachon ikkita ishlashni tekshirish vositasini taqdim etadi: kafka-producer-perf-test.sh и kafka-consumer-perf-test.sh. Ulardan faol foydalaning. Malumot uchun siz maqolada tasvirlangan natijalarga murojaat qilishingiz mumkin bu post Jey Kreps yoki diqqatni qarating bu ko'rib chiqish Stefan Maarek tomonidan Amazon MSK.

operatsiyalar

Monitoring

Tizimdagi shaffoflik juda muhim - aks holda siz unda nima bo'layotganini tushunolmaysiz. Bugungi kunda bulutli mahalliy uslubda o'lchovlarga asoslangan monitoringni ta'minlaydigan mustahkam vositalar to'plami mavjud. Ushbu maqsadlar uchun ikkita mashhur vosita Prometey va Grafana. Prometey JMX eksportchisi yordamida barcha Java jarayonlaridan (Kafka, Zookeeper, Kafka Connect) ko'rsatkichlarni to'plashi mumkin - eng oddiy usulda. Agar siz cAdvisor ko'rsatkichlarini qo'shsangiz, Kubernetes-da resurslar qanday ishlatilishini to'liqroq tushunishingiz mumkin.

Strimzi Kafka uchun Grafana boshqaruv panelining juda qulay namunasiga ega. U asosiy ko'rsatkichlarni, masalan, kam takrorlangan yoki oflayn bo'lgan tarmoqlar haqida tasavvur beradi. U erda hamma narsa juda aniq. Ushbu ko'rsatkichlar resurslardan foydalanish va samaradorlik haqidagi ma'lumotlar, shuningdek barqarorlik ko'rsatkichlari bilan to'ldiriladi. Shunday qilib, siz asosiy Kafka klaster monitoringini behudaga olasiz!

Kubernetesdagi Kafka yaxshimi?

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

Bularning barchasini mijozlar monitoringi (iste'molchilar va ishlab chiqaruvchilar bo'yicha ko'rsatkichlar), shuningdek kechikish monitoringi (buning uchun mavjud) bilan to'ldirish yaxshi bo'lar edi. Burrow) va oxirigacha monitoring - bu foydalanish uchun Kafka Monitor.

Jurnal yozish

Ro'yxatga olish yana bir muhim vazifadir. Kafka o'rnatishingizdagi barcha konteynerlar tizimga kirganligiga ishonch hosil qiling stdout и stderr, shuningdek, Kubernetes klasteringiz barcha jurnallarni markaziy logging infratuzilmasiga jamlashiga ishonch hosil qiling, masalan. Elasticsearch.

Funktsional test

Kubernetes podkastlaringiz normal ishlayotganligini tekshirish uchun jonlilik va tayyorlik problaridan foydalanadi. Agar jonlilikni tekshirish muvaffaqiyatsiz tugasa, Kubernetes konteynerni to'xtatadi va agar qayta ishga tushirish siyosati mos ravishda o'rnatilgan bo'lsa, uni avtomatik ravishda qayta ishga tushiradi. Agar tayyorlikni tekshirish muvaffaqiyatsiz tugasa, Kubernetes podni xizmat ko'rsatish so'rovlaridan ajratadi. Shunday qilib, bunday hollarda qo'lda aralashuv endi umuman talab qilinmaydi, bu katta ortiqcha.

Yangilanishlarni tarqatish

StatefulSets avtomatik yangilanishlarni qo'llab-quvvatlaydi: agar siz RollingUpdate strategiyasini tanlasangiz, Kafka ostidagi har biri o'z navbatida yangilanadi. Shu tarzda, ishlamay qolish vaqtini nolga kamaytirish mumkin.

Masshtablash

Kafka klasterini masshtablash oson ish emas. Biroq, Kubernetes podkastlarni ma'lum miqdordagi replikalarga o'lchashni juda oson qiladi, ya'ni siz o'zingiz xohlagancha Kafka brokerlarini deklarativ ravishda belgilashingiz mumkin. Bu holatda eng qiyin narsa masshtabni kattalashtirgandan keyin yoki qisqartirishdan oldin sektorlarni qayta tayinlashdir. Shunga qaramay, Kubernetes sizga bu vazifani bajarishda yordam beradi.

Ma'muriyat

Mavzular yaratish va sektorlarni qayta tayinlash kabi Kafka klasteringizni boshqarish bilan bog'liq vazifalar podkastlaringizdagi buyruq qatori interfeysini ochish orqali mavjud qobiq skriptlari yordamida bajarilishi mumkin. Biroq, bu yechim juda chiroyli emas. Strimzi boshqa operator yordamida mavzularni boshqarishni qo'llab-quvvatlaydi. Bu yerda yaxshilanish uchun joy bor.

Zaxiralash va tiklash

Endi Kafkaning mavjudligi Kubernetesning mavjudligiga ham bog'liq bo'ladi. Agar Kubernetes klasteringiz muvaffaqiyatsiz bo'lsa, eng yomon stsenariyda Kafka klasteringiz ham muvaffaqiyatsiz bo'ladi. Merfi qonuniga ko'ra, bu albatta sodir bo'ladi va siz ma'lumotlarni yo'qotasiz. Ushbu turdagi xavfni kamaytirish uchun yaxshi zaxira kontseptsiyasiga ega bo'ling. Siz MirrorMaker dan foydalanishingiz mumkin, boshqa variant esa buning uchun S3 dan foydalanish, bunda tasvirlanganidek post Zalandodan.

xulosa

Kichik va o'rta kattalikdagi Kafka klasterlari bilan ishlashda, albatta, Kubernetes-dan foydalanishga arziydi, chunki u qo'shimcha moslashuvchanlikni ta'minlaydi va operator tajribasini soddalashtiradi. Agar sizda juda muhim ishlamaydigan kechikish va/yoki o'tkazish qobiliyatiga qo'yiladigan talablar bo'lsa, boshqa joylashtirish variantini ko'rib chiqish yaxshiroqdir.

Manba: www.habr.com

a Izoh qo'shish