{"id":71213,"date":"2020-02-24T16:09:17","date_gmt":"2020-02-24T13:09:17","guid":{"rendered":"https:\/\/prohoster.info\/blog\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes"},"modified":"2020-03-03T16:14:29","modified_gmt":"2020-03-03T13:14:29","slug":"opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes","title":{"rendered":"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Obs. \u00f6vers.<\/b>: I denna artikel delar Banzai Cloud med sig av ett exempel p\u00e5 hur deras specialverktyg kan underl\u00e4tta driften av Kafka inom Kubernetes. Instruktionerna visar hur man kan best\u00e4mma den optimala storleken p\u00e5 infrastrukturen och konfigurera Kafka f\u00f6r att uppn\u00e5 \u00f6nskad kapacitet.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/8a598ec7db091c2944a6442f9bc124da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nApache Kafka \u00e4r en distribuerad str\u00f6mmande plattform f\u00f6r skapande av p\u00e5litliga, skalbara och h\u00f6gpresterande realtids-system. Dess imponerande funktioner kan f\u00f6rst\u00e4rkas med hj\u00e4lp av Kubernetes. F\u00f6r detta har vi utvecklat <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/kafka-operator\">Open Source Kafka-operatorn<\/a><\/noindex> och ett verktyg som kallas <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/supertubes\/overview\/\">Supertubes<\/a><\/noindex>. De m\u00f6jligg\u00f6r drifts\u00e4ttning av Kafka i Kubernetes och utnyttja dess olika funktioner, s\u00e5som finjustering av broker-konfiguration, skalning baserad p\u00e5 metrics med ombalansering, rack awareness, \"mjuk\" <i>(graceful)<\/i> uppgradering av versioner m.m.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p>Testa Supertubes i din kluster:<\/p>\n<pre><code class=\"bash\">curl https:\/\/getsupertubes.sh | sh och supertubes install -a --no-democluster --kubeconfig<\/code><\/pre>\n<p>\nEller kontakta <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/supertubes\/cli\/reference\/\">dokumentationen<\/a><\/noindex>. Det g\u00e5r ocks\u00e5 att l\u00e4sa om vissa funktioner av Kafka, vars hantering \u00e4r automatiserad med hj\u00e4lp av Supertubes och Kafka-operatorn. Vi har redan skrivit om dem i bloggen:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-operator\/\">Oh no! \u00c4nnu en Kafka-operator f\u00f6r Kubernetes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-alert\/\">\u00d6vervaka och driva Kafka baserat p\u00e5 Prometheus-metrik<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-rack-awareness\/\">Kafka rack awareness i Kubernetes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-on-istio-performance\/\">K\u00f6ra Apache Kafka \u00f6ver Istio \u2014 benchmark<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-topic-user-management\/\">Anv\u00e4ndarautentiserade och \u00e5tkomstkontrollerade kluster med Kafka-operatorn<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-rolling-upgrade\/\">Kafka rullande uppgradering och dynamisk konfiguration p\u00e5 Kubernetes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-envoy-protocol-filter\/\">Envoy protokollfilter f\u00f6r Kafka, meshad<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/blockquote>\n<p>\nN\u00e4r du beslutar att s\u00e4tta upp en Kafka-kluster i Kubernetes kommer du s\u00e4kert att st\u00f6ta p\u00e5 problemet att best\u00e4mma den optimala storleken p\u00e5 den grundl\u00e4ggande infrastrukturen och behovet av att finjustera Kafka-konfigurationen f\u00f6r att m\u00f6ta kapacitetskraven. Den maximala prestandan f\u00f6r varje broker best\u00e4ms av prestandan hos infrastrukturens komponenter, s\u00e5som minne, processor, diskens hastighet, n\u00e4tverkskapacitet osv.<\/p>\n<p>I idealfallet b\u00f6r brokerkonfigurationen vara s\u00e5dan att alla infrastrukturella element anv\u00e4nds maximalt. Men i verkliga livet \u00e4r en s\u00e5dan inst\u00e4llning ganska sv\u00e5r. Det \u00e4r mer sannolikt att anv\u00e4ndare konfigurerar brokerinst\u00e4llningar f\u00f6r att maximera anv\u00e4ndningen av en eller tv\u00e5 komponenter (disk, minne eller processor). Generellt visar en broker maximal prestanda n\u00e4r dess konfiguration till\u00e5ter den l\u00e5ngsammaste komponenten att utnyttjas fullt ut. P\u00e5 s\u00e5 s\u00e4tt kan vi f\u00e5 en ungef\u00e4rlig uppfattning om den belastning som en broker kan hantera.<\/p>\n<p>Teoretiskt kan vi \u00e4ven uppskatta antalet brokers som beh\u00f6vs f\u00f6r att hantera en viss belastning. Men i praktiken \u00e4r det s\u00e5 m\u00e5nga konfigurationsalternativ p\u00e5 olika niv\u00e5er att det \u00e4r ganska sv\u00e5rt (om inte om\u00f6jligt) att bed\u00f6ma den potentiella prestandan hos en viss konfiguration. Med andra ord \u00e4r det mycket utmanande att planera en konfiguration med utg\u00e5ngspunkt fr\u00e5n en viss f\u00f6rv\u00e4ntad prestanda.<\/p>\n<p>F\u00f6r anv\u00e4ndare av Supertubes till\u00e4mpar vi vanligtvis f\u00f6ljande metod: vi b\u00f6rjar med en viss konfiguration (infrastruktur + inst\u00e4llningar), m\u00e4ter dess prestanda, justerar brokerinst\u00e4llningarna och upprepar processen. Detta p\u00e5g\u00e5r tills potentialen hos den l\u00e5ngsammaste infrastrukturella komponenten \u00e4r helt utnyttjad.<\/p>\n<p>Genom denna metod f\u00e5r vi en klarare uppfattning om hur m\u00e5nga brokers som kr\u00e4vs f\u00f6r klustret f\u00f6r att hantera en viss belastning (antalet brokers beror ocks\u00e5 p\u00e5 andra faktorer, s\u00e5som minimalt antal meddelandekopior f\u00f6r att s\u00e4kerst\u00e4lla redundans, antalet partitionledare osv.). Dessutom f\u00e5r vi en uppfattning om vilken infrastrukturell komponent som b\u00f6r skalas vertikalt.<\/p>\n<p>I den h\u00e4r artikeln kommer vi att diskutera de steg vi tar f\u00f6r att \"f\u00e5 ut allt\" fr\u00e5n de l\u00e5ngsammaste komponenterna i initiala konfigurationer och m\u00e4ta klustrets genomstr\u00f6mning i Kafka. En h\u00f6gt tillf\u00f6rlitlig konfiguration kr\u00e4ver minst tre aktiva brokers (<code>min.insync.replicas=3<\/code>), spridda \u00f6ver tre olika tillg\u00e4nglighetszoner. F\u00f6r att konfigurera, skala och \u00f6vervaka Kubernetes-infrastrukturen anv\u00e4nder vi v\u00e5r egen containerhanteringsplattform f\u00f6r hybridmoln \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pipeline\">Pipeline<\/a><\/noindex>. Den st\u00f6der on-premise (bare metal, VMware) och fem typer av moln (Alibaba, AWS, Azure, Google, Oracle), samt alla t\u00e4nkbara kombinationer av dem.<\/p>\n<h2>Tankar kring infrastruktur och konfiguration av Kafka-klustret<\/h2>\n<p>\nF\u00f6r exemplen nedan har vi valt AWS som molnleverant\u00f6r och EKS som Kubernetes-distribution. En liknande konfiguration kan realiseras med <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pke\">PKE<\/a><\/noindex> \u2014 en Kubernetes-distribution fr\u00e5n Banzai Cloud, certifierad av CNCF.<\/p>\n<h3>Enhet<\/h3>\n<p>\nAmazon erbjuder olika <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/UserGuide\/ebs-volume-types.html\">typer av EBS-volymer<\/a><\/noindex>. I grunden <i>gp2<\/i> och <i>io1<\/i> baseras p\u00e5 SSD-enheter, men f\u00f6r att s\u00e4kerst\u00e4lla h\u00f6g genomstr\u00f6mning <i>gp2<\/i> f\u00f6rbrukar ackumulerade krediter <i>(I\/O credits)<\/i>, d\u00e4rf\u00f6r f\u00f6redrog vi en typ <i>io1<\/i>, som erbjuder stabil h\u00f6g genomstr\u00f6mning.<\/p>\n<h3>Typer av instanser<\/h3>\n<p>\nKafkas prestanda beror starkt p\u00e5 operativsystemets sid-cache, s\u00e5 vi beh\u00f6ver instanser med tillr\u00e4ckligt med minne f\u00f6r m\u00e4klare (JVM) och sid-cache. Instansen <i>c5.2xlarge<\/i> \u00e4r en bra b\u00f6rjan, eftersom den har 16 GB minne och <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/UserGuide\/ebs-optimized.html\">\u00e4r optimerad f\u00f6r arbete med EBS<\/a><\/noindex>. Nackdelen \u00e4r att den kan leverera maximal prestanda under h\u00f6gst 30 minuter om dygnet. Om arbetsbelastningen kr\u00e4ver maximal prestanda under l\u00e4ngre perioder b\u00f6r vi \u00f6verv\u00e4ga andra typer av instanser. Och s\u00e5 gjorde vi, n\u00e4r vi stannade vid <i>c5.4xlarge<\/i>. Den erbjuder maximal genomstr\u00f6mning p\u00e5 <b>593,75 MB\/s<\/b>. Den maximala genomstr\u00f6mningen f\u00f6r EBS-volymen <i>io1<\/i> \u00e4r h\u00f6gre \u00e4n f\u00f6r instansen <i>c5.4xlarge<\/i>, s\u00e5 den l\u00e5ngsammaste delen av infrastrukturen \u00e4r uppenbarligen I\/O-genomstr\u00f6mningen f\u00f6r den h\u00e4r instansen (vilket ocks\u00e5 b\u00f6r bekr\u00e4ftas av resultaten av v\u00e5ra belastningstester).<\/p>\n<h3>N\u00e4tverk<\/h3>\n<p>\nN\u00e4tverksbandbredden m\u00e5ste vara tillr\u00e4ckligt stor j\u00e4mf\u00f6rt med instansens VM-prestanda och disken, annars blir n\u00e4tverk den svaga l\u00e4nken. I v\u00e5rt fall st\u00f6der n\u00e4tverksgr\u00e4nssnittet <i>c5.4xlarge<\/i> hastigheter upp till 10 Gb\/s, vilket \u00e4r betydligt mer \u00e4n I\/O-genomstr\u00f6mningen f\u00f6r VM-instansen.<\/p>\n<h3>Distribuering av m\u00e4klare<\/h3>\n<p>\nM\u00e4klarna b\u00f6r distribueras (planeras i Kubernetes) p\u00e5 dedikerade noder f\u00f6r att undvika konkurrens med andra processer om CPU-, minnes-, n\u00e4tverks- och diskresurser.<\/p>\n<h3>Java-version<\/h3>\n<p>\nEtt rimligt val \u00e4r Java 11, eftersom det \u00e4r kompatibelt med Docker p\u00e5 s\u00e5 s\u00e4tt att JVM korrekt identifierar de processorer och det minne som \u00e4r tillg\u00e4ngligt f\u00f6r den container d\u00e4r m\u00e4klaren k\u00f6rs. Med vetskap om att CPU-gr\u00e4nser \u00e4r viktiga, st\u00e4ller JVM internt och transparent in antalet GC-tr\u00e5dar och JIT-kompilatortr\u00e5dar. Vi anv\u00e4nde bilden Kafka <code>banzaicloud\/kafka:2.13-2.4.0<\/code>, som inkluderar version 2.4.0 av Kafka (Scala 2.13) p\u00e5 Java 11.<\/p>\n<blockquote><p>Om du vill veta mer om Java\/JVM p\u00e5 Kubernetes, kolla g\u00e4rna p\u00e5 v\u00e5ra f\u00f6ljande publikationer:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/java-resource-limits\/\">Why my Java application is OOMKilled<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/java10-container-sizing\/\">How to correctly size containers for Java 10 applications<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/blockquote>\n<p><\/p>\n<h3>M\u00e4klarnas minnesinst\u00e4llningar<\/h3>\n<p>\nDet finns tv\u00e5 nyckelaspekter i konfigurationen av minnet f\u00f6r brokeren: inst\u00e4llningar f\u00f6r JVM och f\u00f6r Kubernetes poddar. Minnesgr\u00e4nsen som st\u00e4lls in f\u00f6r podden m\u00e5ste vara st\u00f6rre \u00e4n den maximala heap-storleken f\u00f6r att JVM ska ha utrymme f\u00f6r Java-metautrymme som ligger i egen minne, samt f\u00f6r sidcacheminnet som operativsystemet aktivt anv\u00e4nder. I v\u00e5ra tester har vi k\u00f6rt Kafka-brokers med parametrar <code>-Xmx4G -Xms2G<\/code>, och minnesgr\u00e4nsen f\u00f6r podden var <code>10 Gi<\/code>. Observera att minnesinst\u00e4llningar f\u00f6r JVM automatiskt kan f\u00e5s med <code>-XX:MaxRAMPercentage<\/code> och <code>-X:MinRAMPercentage<\/code>, baserat p\u00e5 minneslimiten f\u00f6r podden.<\/p>\n<h3>M\u00e4klarnas processorinst\u00e4llningar<\/h3>\n<p>\nGenerellt sett kan prestandan \u00f6kas genom att \u00f6ka parallellismen genom att \u00f6ka antalet tr\u00e5dar som Kafka anv\u00e4nder. Ju fler processorer som \u00e4r tillg\u00e4ngliga f\u00f6r Kafka, desto b\u00e4ttre. I v\u00e5rt test b\u00f6rjade vi med en begr\u00e4nsning p\u00e5 6 processorer och \u00f6kade successivt (i iterationer) antalet till 15. Dessutom st\u00e4llde vi in <code>num.network.threads=12<\/code> i m\u00e4klarens inst\u00e4llningar f\u00f6r att \u00f6ka antalet tr\u00e5dar som tar emot data fr\u00e5n n\u00e4tverket och skickar dem. Vi uppt\u00e4ckte omedelbart att f\u00f6ljarna inte kunde ta emot repliker tillr\u00e4ckligt snabbt, s\u00e5 vi \u00f6kade <code>num.replica.fetchers<\/code> till 4 f\u00f6r att \u00f6ka hastigheten med vilken f\u00f6ljarna replikerade meddelanden fr\u00e5n ledarna.<\/p>\n<h3>Belastningstestverktyg<\/h3>\n<p>\nDet \u00e4r viktigt att s\u00e4kerst\u00e4lla att kapaciteten hos den valda belastningsgeneratorn inte tar slut innan Kafka-klustret (som benchmarkas) n\u00e5r sin maximala belastning. Med andra ord m\u00e5ste en prelimin\u00e4r bed\u00f6mning av m\u00f6jligheterna hos belastningsgenereringsverktyget g\u00f6ras, och typer av instanser med tillr\u00e4ckligt antal processorer och minne m\u00e5ste v\u00e4ljas. P\u00e5 s\u00e5 s\u00e4tt kommer v\u00e5rt verktyg att producera mer belastning \u00e4n klustret Kafka kan hantera. Efter m\u00e5nga experiment har vi valt tre instanser <i>c5.4xlarge<\/i>, d\u00e4r varje instans k\u00f6rde en generator.<\/p>\n<h2>Benchmarking<\/h2>\n<p>\nPrestandam\u00e4tning \u00e4r en iterativ process som involverar f\u00f6ljande steg:<\/p>\n<ul>\n<li> konfigurering av infrastrukturen (EKS-kluster, Kafka-kluster, belastningsgenerator och \u00e4ven Prometheus och Grafana);<\/li>\n<li> generering av belastning under en viss tidsperiod f\u00f6r att filtrera bort slumpm\u00e4ssiga avvikelser i de insamlade prestandam\u00e5tten;<\/li>\n<li> justering av infrastrukturen och brokerkonfigurationen baserat p\u00e5 observerade prestandaindikatorer;<\/li>\n<li> upprepning av processen tills den \u00f6nskade genomstr\u00f6mningen i Kafka-klustret uppn\u00e5s. Det ska ocks\u00e5 vara stabilt reproducerbart och visa minimala variationer i genomstr\u00f6mning.<\/li>\n<\/ul>\n<p>\nI n\u00e4sta avsnitt beskrivs stegen som utf\u00f6rdes under benchmarking-processen av testklustret.<\/p>\n<h3>Verktyg<\/h3>\n<p>\nF\u00f6r snabb distribution av en grundkonfiguration, belastningsgenerering och prestandam\u00e4tning anv\u00e4ndes f\u00f6ljande verktyg:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/pipeline\/overview\/\">Banzai Cloud Pipeline<\/a><\/noindex> f\u00f6r att organisera EKS-klustret fr\u00e5n Amazon med <noindex><a rel=\"nofollow\" href=\"https:\/\/prometheus.io\/\">Prometheus<\/a><\/noindex> (f\u00f6r insamling av Kafka och infrastrukturmetrik) och <noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/\">Grafana<\/a><\/noindex> (f\u00f6r visualisering av dessa metrik). Vi anv\u00e4nde <b>integrerade<\/b> p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pipeline\">Pipeline<\/a><\/noindex> tj\u00e4nster som erbjuder federativ \u00f6vervakning, centraliserad logginsamlning, s\u00e5rbarhetsskanning, \u00e5terst\u00e4llning efter driftstopp, f\u00f6retagsklassens s\u00e4kerhet och mycket mer.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jamiealquiza\/sangrenel\">Sangrenel<\/a><\/noindex> \u2014 ett verktyg f\u00f6r belastningstestning av Kafka-klustret.<\/li>\n<li> Grafana-paneler f\u00f6r visualisering av Kafka- och infrastrukturmetrik: <noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/grafana\/dashboards\/10123\">Kubernetes Kafka<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/grafana\/dashboards\/1860\">Node Exporter<\/a><\/noindex>.<\/li>\n<li> Supertubes CLI f\u00f6r den enklaste konfigurationen av ett Kafka-kluster i Kubernetes. Zookeeper, Kafka-operator, Envoy och m\u00e5nga andra komponenter installeras och konfigureras korrekt f\u00f6r att k\u00f6ra ett produktionsklart Kafka-kluster i Kubernetes.\n<ul>\n<li> F\u00f6r installation <i>supertubes CLI<\/i> anv\u00e4nd instruktionerna som anges <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/supertubes\/cli\/install\/\">h\u00e4r<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/23ecf423b1ea66813406943ae7eabf61.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>EKS-kluster<\/h3>\n<p>\nF\u00f6rbered EKS-klustret med dedikerade noder <i>c5.4xlarge<\/i> i olika tillg\u00e4nglighetszoner f\u00f6r poddar med Kafka-brokers, samt dedikerade noder f\u00f6r belastningsgeneratorn och \u00f6vervakningsinfrastruktur.<\/p>\n<pre><code class=\"bash\">banzai cluster create -f https:\/\/raw.githubusercontent.com\/banzaicloud\/kafka-operator\/master\/docs\/benchmarks\/infrastructure\/cluster_eks_202001.json<\/code><\/pre>\n<p>\nN\u00e4r EKS-klustret \u00e4r ig\u00e5ng, aktivera dess integrerade <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/pipeline\/features\/integrated-services\/\">\u00f6vervakningstj\u00e4nst<\/a><\/noindex> \u2014 den kommer att installera Prometheus och Grafana i klustret.<\/p>\n<h3>Systemkomponenter f\u00f6r Kafka<\/h3>\n<p>\nInstallera systemkomponenter f\u00f6r Kafka (Zookeeper, kafka-operator) i EKS med hj\u00e4lp av supertubes CLI:<\/p>\n<pre><code class=\"bash\">supertubes install -a --no-democluster --kubeconfig<\/code><\/pre>\n<p><\/p>\n<h3>Kafka-kluster<\/h3>\n<p>\nSom standard anv\u00e4nds EBS-volymer av typen <i>gp2<\/i>, s\u00e5 det \u00e4r n\u00f6dv\u00e4ndigt att skapa en s\u00e4rskild lagringsklass baserad p\u00e5 volymer <i>io1<\/i> f\u00f6r Kafka-klustret:<\/p>\n<pre><code class=\"plaintext\">kubectl create -f - &lt;&lt;EOF\napiVersion: storage.k8s.io\/v1\nkind: StorageClass\nmetadata:\n  name: fast-ssd\nprovisioner: kubernetes.io\/aws-ebs\nparameters:\n  type: io1\n  iopsPerGB: &quot;50&quot;\n  fsType: ext4\nvolumeBindingMode: WaitForFirstConsumer\nEOF<\/code><\/pre>\n<p>\nSt\u00e4ll in parametern f\u00f6r brokerns <code>min.insync.replicas=3<\/code> och distribuera poddar f\u00f6r brokeren p\u00e5 noder i tre olika tillg\u00e4nglighetszoner:<\/p>\n<pre><code class=\"bash\">supertubes cluster create -n kafka --kubeconfig  -f https:\/\/raw.githubusercontent.com\/banzaicloud\/kafka-operator\/master\/docs\/benchmarks\/infrastructure\/kafka_202001_3brokers.yaml --wait --timeout 600<\/code><\/pre>\n<p><\/p>\n<h3>\u00c4mnen<\/h3>\n<p>\nVi k\u00f6rde samtidigt tre instanser av lastgeneratorn. Var och en skriver till sitt eget \u00e4mne, totalt beh\u00f6ver vi allts\u00e5 tre \u00e4mnen:<\/p>\n<pre><code class=\"bash\">supertubes cluster topic create -n kafka --kubeconfig  -f -&lt;&lt;EOF\napiVersion: kafka.banzaicloud.io\/v1alpha1\nkind: KafkaTopic\nmetadata:\n  name: perftest1\nspec:\n  name: perftest1\n  partitions: 12\n  replicationFactor: 3\n  retention.ms: &#039;28800000&#039;\n  cleanup.policy: delete\nEOF\n\nsupertubes cluster topic create -n kafka --kubeconfig  -f -&lt;&lt;EOF\napiVersion: kafka.banzaicloud.io\/v1alpha1\nkind: KafkaTopic\nmetadata:\n    name: perftest2\nspec:\n  name: perftest2\n  partitions: 12\n  replicationFactor: 3\n  retention.ms: &#039;28800000&#039;\n  cleanup.policy: delete\nEOF\n\nsupertubes cluster topic create -n kafka --kubeconfig  -f -&lt;&lt;EOF\napiVersion: kafka.banzaicloud.io\/v1alpha1\nkind: KafkaTopic\nmetadata:\n  name: perftest3\nspec:\n  name: perftest3\n  partitions: 12\n  replicationFactor: 3\n  retention.ms: &#039;28800000&#039;\n  cleanup.policy: delete\nEOF<\/code><\/pre>\n<p>\nF\u00f6r varje \u00e4mne \u00e4r faktorn f\u00f6r replikering 3 \u2014 det minimi rekommenderade v\u00e4rdet f\u00f6r h\u00f6g tillg\u00e4nglighet i produktionssystem.<\/p>\n<h3>Belastningstestverktyg<\/h3>\n<p>\nVi k\u00f6rde tre instanser av belastningsgeneratorn (varje skrev till ett eget \u00e4mne). F\u00f6r poddar av belastningsgeneratorn m\u00e5ste node affinity anges f\u00f6r att de ska schemal\u00e4ggas endast p\u00e5 de avsedda noderna:<\/p>\n<pre><code class=\"plaintext\">apiVersion: extensions\/v1beta1\nkind: Deployment\nmetadata:\n  labels:\n    app: loadtest\n  name: perf-load1\n  namespace: kafka\nspec:\n  progressDeadlineSeconds: 600\n  replicas: 1\n  revisionHistoryLimit: 10\n  selector:\n    matchLabels:\n      app: loadtest\n  strategy:\n    rollingUpdate:\n      maxSurge: 25%\n      maxUnavailable: 25%\n    type: RollingUpdate\n  template:\n    metadata:\n      creationTimestamp: null\n      labels:\n        app: loadtest\n    spec:\n      affinity:\n        nodeAffinity:\n          requiredDuringSchedulingIgnoredDuringExecution:\n            nodeSelectorTerms:\n            - matchExpressions:\n              - key: nodepool.banzaicloud.io\/name\n                operator: In\n                values:\n                - loadgen\n      containers:\n      - args:\n        - -brokers=kafka-0:29092,kafka-1:29092,kafka-2:29092,kafka-3:29092\n        - -topic=perftest1\n        - -required-acks=all\n        - -message-size=512\n        - -workers=20\n        image: banzaicloud\/perfload:0.1.0-blog\n        imagePullPolicy: Always\n        name: sangrenel\n        resources:\n          limits:\n            cpu: 2\n            memory: 1Gi\n          requests:\n            cpu: 2\n            memory: 1Gi\n        terminationMessagePath: \/dev\/termination-log\n        terminationMessagePolicy: File\n      dnsPolicy: ClusterFirst\n      restartPolicy: Always\n      schedulerName: default-scheduler\n      securityContext: {}\n      terminationGracePeriodSeconds: 30<\/code><\/pre>\n<p>\nN\u00e5gra punkter att t\u00e4nka p\u00e5:<\/p>\n<ul>\n<li> Belastningstestgeneratorn genererar meddelanden p\u00e5 512 byte och publicerar dem i Kafka i batcher om 500 meddelanden.<\/li>\n<li> Med hj\u00e4lp av argumentet <code>-required-acks=all<\/code> anses publiceringen vara lyckad n\u00e4r alla synkroniserade repliker av meddelandet har mottagits och bekr\u00e4ftats av Kafka-brokers. Det inneb\u00e4r att vi i benchmarket m\u00e4tte inte bara hastigheten hos ledarna som tar emot meddelanden, utan ocks\u00e5 deras efterf\u00f6ljare som replikerar meddelanden. M\u00e5let med detta test \u00e4r inte att utv\u00e4rdera hastigheten hos konsumenterna <i>(consumers)<\/i> f\u00f6r nyligen mottagna meddelanden, som fortfarande ligger i operativsystemets sidcache, och dess j\u00e4mf\u00f6relse med hastigheten f\u00f6r att l\u00e4sa meddelanden som lagras p\u00e5 disk.<\/li>\n<li> Belastningsgeneratorn k\u00f6r 20 arbetare parallellt (<code>-workers=20<\/code>). Varje arbetare inneh\u00e5ller 5 producenter som gemensamt anv\u00e4nder arbetarnas anslutning till Kafka-klustret. Totalt har varje generator 100 producenter, som skickar meddelanden till Kafka-klustret.<\/li>\n<\/ul>\n<p><\/p>\n<h3>\u00d6vervakning av klustrets tillst\u00e5nd<\/h3>\n<p>\nUnder belastningstestningen av Kafka-klustret \u00f6vervakade vi \u00e4ven dess h\u00e4lsa f\u00f6r att s\u00e4kerst\u00e4lla att det inte fanns n\u00e5gra omstartade poddar, desynkroniserade repliker och maximal genomstr\u00f6mning med minimala variationer:<\/p>\n<ul>\n<li> The load generator writes standard statistics on the number of published messages and the error rate. The error percentage should remain at <code>0,00%<\/code>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/linkedin\/cruise-control\">Cruise Control<\/a><\/noindex>, en ut\u00f6kad kafka-operator, tillhandah\u00e5ller en \u00f6vervakningspanel d\u00e4r vi ocks\u00e5 kan f\u00f6lja klustrets tillst\u00e5nd. F\u00f6r att visa denna panel, v\u00e4nligen utf\u00f6r:\n<pre><code class=\"bash\">supertubes cluster cruisecontrol show -n kafka --kubeconfig<\/code><\/pre>\n<\/li>\n<li> The ISR level <i>(number of 'in-sync' replicas)<\/i> is equal to 0 for shrink and expansion.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Measurement results<\/h2>\n<p><\/p>\n<h3>3 brokers, message size \u2014 512 bytes<\/h3>\n<p>\nMed partitioner j\u00e4mnt f\u00f6rdelade \u00f6ver tre m\u00e4klare lyckades vi uppn\u00e5 prestanda <i>~500 MB\/s (approximately 990 thousand messages per second)<\/i>:<\/p>\n<p><img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/df65ff6a1a26e28d5e5a7a5ab1a20d98.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/15c5883c0056c651f0a0bd14e9991967.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/9b708fa5ce809b0d059cba9f5edfbb2f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe memory consumption by the JVM virtual machine did not exceed 2 GB:<\/p>\n<p><img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/3320e2eea891055cc0935da492d18ee9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/6e3976c310309aa8be45fa3fdf547750.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/94baa1b689ae854693fb7cc4ed6e105e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDisk throughput reached the maximum I\/O throughput of the node across all three instances where the brokers were running:<\/p>\n<p><img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/408139ad33cda1294755660df1c128a8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/391d2df0ddfe82f94abdb200370ff775.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/e7e9fd021a2cdc71992ce672363a78ec.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFrom the data on memory usage by the nodes, it can be seen that system buffering and caching took ~10-15 GB:<\/p>\n<p><img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/781887507e01a4903b86871961ff9260.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/63f10177f01342039f04192ea93c8bca.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/48b992cc73a968b3d3b1442f96562c4e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>3 brokers, message size \u2014 100 bytes<\/h3>\n<p>\nWith the reduction in message size, the throughput decreases by approximately 15-20%: this is affected by the time spent processing each message. Additionally, the CPU load nearly doubled.<\/p>\n<p><img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/2f7dc5a94da371cfe17c9e0fc0ec1941.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/986160a3a4e099a0dbb8aeefaf6f1c2f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/c08244457bf4dbfadf52838d4ea2969e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSince there are still unused cores on the broker nodes, performance can be improved by modifying the Kafka configuration. This is a complex task, so to increase throughput, it is better to work with larger messages.<\/p>\n<h3>4 brokers, message size \u2014 512 bytes<\/h3>\n<p>\nDet \u00e4r enkelt att \u00f6ka prestandan i Kafka-klustret genom att helt enkelt l\u00e4gga till nya m\u00e4klare och uppr\u00e4tth\u00e5lla balansen av partitioner (detta s\u00e4kerst\u00e4ller en j\u00e4mn belastningsf\u00f6rdelning mellan m\u00e4klarna). I v\u00e5rt fall, efter att ha lagt till en m\u00e4klare, \u00f6kade klustrets kapacitet till <i>~580 MB\/s (~1.1 million messages per second)<\/i>. Tillv\u00e4xten var mindre \u00e4n v\u00e4ntat: detta f\u00f6rklaras fr\u00e4mst av obalansen i partitionerna (inte alla m\u00e4klare arbetar p\u00e5 sina maximala kapacitetsniv\u00e5er).<\/p>\n<p><img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/8c8d2e70739add3c3f88fe42acf98c46.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/a6e4812270c04487de0ad39b996a13f8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/6162c04cfb87b9d9cd0f3147a4ae1647.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/dae5de3b14be212c679f3627a3b77d7b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJVM-maskinens minnesanv\u00e4ndning har h\u00e5llits under 2 GB:<\/p>\n<p><img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/0bca07a817d7da3104b08de10979f049.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/7e1e64f80ec140f13e171cfe3be930ce.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/5e9700b1e54e45f9cd5fa018ec07dba1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/4ba0c4b59bfe72bcb0d2f22056c47d79.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBalansen i partitionerna p\u00e5 m\u00e4klarnas arbete p\u00e5verkades av obalansen:<\/p>\n<p><img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/2b8ed3c21adf70c751d1daa6d4c41895.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/77b980869b99903d9de5cd7d43d79291.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/f2f9569a3a1ef0ce35e89b2e52e4a8b2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Best\u00e4m r\u00e4tt storlek f\u00f6r en Kafka-kluster i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/191d6d97b32b2128c5cfd3914171de15.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Slutsatser<\/h2>\n<p>\nDen iterativa metod som presenterades ovan kan utvidgas f\u00f6r att omfatta mer komplexa scenarier, inklusive hundratals konsumenter, ompartitionering, uppgraderingar som rullas ut, omstart av poddar, etc. Allt detta g\u00f6r att vi kan bed\u00f6ma gr\u00e4nserna f\u00f6r klustrets kapacitet i olika f\u00f6rh\u00e5llanden, identifiera flaskhalsar i dess drift och hitta s\u00e4tt att hantera dem.<\/p>\n<p>Vi har utvecklat Supertubes f\u00f6r snabb och enkel distribution av klustret, dess konfiguration, till\u00e4gg\/ borttagning av m\u00e4klare och \u00e4mnen, reagera p\u00e5 aviseringar och s\u00e4kerst\u00e4lla att Kafka fungerar korrekt i Kubernetes som helhet. V\u00e5rt m\u00e5l \u00e4r att hj\u00e4lpa till att koncentrera sig p\u00e5 huvuduppgiften (att 'generera' och 'konsumera' Kafka-meddelanden), medan allt det tunga arbetet \u00f6verl\u00e5ts till Supertubes och Kafka-operatorn.<\/p>\n<p>Om du \u00e4r intresserad av Banzai Clouds teknik och Open Source-projekt, f\u00f6lj f\u00f6retaget p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\">GitHub<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.linkedin.com\/company\/banzaicloud\">LinkedIn<\/a><\/noindex> eller <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/BanzaiCloud\">Twitter<\/a><\/noindex>.<\/p>\n<h2>P.S. fr\u00e5n \u00f6vers\u00e4ttaren<\/h2>\n<p>\nL\u00e4s \u00e4ven i v\u00e5r blogg:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/480722\/\">En ber\u00e4ttelse om Redis-operat\u00f6ren i K8s och en liten \u00f6versikt av verktyg f\u00f6r att analysera data fr\u00e5n denna databas<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/450662\/\">En utmanande migrering av RabbitMQ till Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/329224\/\">zetcd fr\u00e5n CoreOS: Ers\u00e4tter ZooKeeper med\u2026 ett etcd-lager<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/488920\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Banzai Cloud \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0451 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 Kafka \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 Kubernetes. \u041f\u0440\u0438\u0432\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0430\u043c\u0443 Kafka \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0439 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438. Apache Kafka \u2014 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\u043e\u0432\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u0445, \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":71214,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-71213","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Banzai Cloud \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0451 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 Kafka \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 Kubernetes.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kafka \u0432 Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Banzai Cloud \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0451 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 Kafka \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 Kubernetes.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-24T13:09:17+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:14:29+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Best\u00e4mmer passande storlek f\u00f6r Kafka-klustret i Kubernetes | ProHoster","description":"Obs. \u00f6vers.: I denna artikel delar Banzai Cloud med sig av ett exempel p\u00e5 hur man anv\u00e4nder sina specialverktyg f\u00f6r att underl\u00e4tta driften av Kafka inom Kubernetes.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kafka \u0432 Kubernetes | ProHoster","og:description":"\u041f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432.: \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Banzai Cloud \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0451 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 Kafka \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 Kubernetes.","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-24T13:09:17+00:00","article:modified_time":"2020-03-03T13:14:29+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"71213","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:06:22","updated":"2022-10-04 20:58:00","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/71213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=71213"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/71213\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/71214"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=71213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=71213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=71213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}