{"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\/da\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes","title":{"rendered":"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Bem. overs.<\/b>: I denne artikel deler Banzai Cloud et eksempel p\u00e5 brugen af deres specialv\u00e6rkt\u00f8jer til at lette driften af Kafka i Kubernetes. De angivne instruktioner illustrerer, hvordan man kan bestemme den optimale st\u00f8rrelse p\u00e5 infrastrukturen og konfigurere Kafka for at opn\u00e5 den \u00f8nskede gennemstr\u00f8mning.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/8a598ec7db091c2944a6442f9bc124da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nApache Kafka er en distribueret streamingplatform til oprettelse af p\u00e5lidelige, skalerbare og h\u00f8jtydende realtids-streamingsystemer. Dets imponerende funktioner kan udvides med Kubernetes. Til dette har vi udviklet <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/kafka-operator\">Open Source Kafka-operator<\/a><\/noindex> og et v\u00e6rkt\u00f8j kaldet <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/supertubes\/overview\/\">Supertubes<\/a><\/noindex>. De muligg\u00f8r k\u00f8rsel af Kafka i Kubernetes og brug af dens forskellige funktioner, s\u00e5som finjustering af broker-konfiguration, skalering baseret p\u00e5 metrics med rebalance, rack awareness, 'bl\u00f8de' <i>(graceful)<\/i> opdateringer osv.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p>Pr\u00f8v Supertubes i din klynge:<\/p>\n<pre><code class=\"bash\">curl https:\/\/getsupertubes.sh | sh og supertubes install -a --no-democluster --kubeconfig<\/code><\/pre>\n<p>\nEller kontakt <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/supertubes\/cli\/reference\/\">dokumentationen<\/a><\/noindex>. Du kan ogs\u00e5 l\u00e6se om nogle af de funktioner i Kafka, som er automatiseret ved hj\u00e6lp af Supertubes og Kafka-operatoren. Det har vi allerede skrevet i bloggen:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-operator\/\">Oh no! Endnu en Kafka-operator til Kubernetes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-alert\/\">Overv\u00e5g og drift Kafka baseret p\u00e5 Prometheus-metrics<\/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\u00f8rsel af Apache Kafka over Istio \u2014 benchmark<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-topic-user-management\/\">Brugerautentificerede og adgangskontrollerede klynger med Kafka-operatoren<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-rolling-upgrade\/\">Kafka rolleringsopgradering og dynamisk konfiguration i Kubernetes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-envoy-protocol-filter\/\">Envoy protokolfilter til Kafka, meshed<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/blockquote>\n<p>\nN\u00e5r du beslutter at implementere en Kafka-klynge i Kubernetes, vil du sandsynligvis st\u00f8de p\u00e5 udfordringen ved at bestemme den optimale st\u00f8rrelse af den underliggende infrastruktur og behovet for finjustering af Kafka-konfigurationen for at im\u00f8dekomme kravene til gennemstr\u00f8mningskapacitet. Den maksimale ydeevne af hver broker bestemmes af ydeevnen af de infrastrukturelle komponenter, den er baseret p\u00e5, s\u00e5som hukommelse, processor, diskhastighed, netv\u00e6rksb\u00e5ndbredde osv.<\/p>\n<p>Ideelt set b\u00f8r brokerkonfigurationen v\u00e6re s\u00e5dan, at alle infrastrukturkomponenter udnyttes maksimalt. Men i virkeligheden er en s\u00e5dan ops\u00e6tning ganske kompleks. Det er mere sandsynligt, at brugere vil konfigurere brokerne for at maksimere brugen af \u00e9n eller to komponenter (disk, hukommelse eller processor). Generelt viser en broker maksimal ydeevne, n\u00e5r dens konfiguration g\u00f8r det muligt at udnytte den langsomste komponent \"fuldt ud\". S\u00e5ledes kan vi f\u00e5 et omtrentligt indtryk af den belastning, en enkelt broker kan h\u00e5ndtere.<\/p>\n<p>Teoretisk set kan vi ogs\u00e5 estimere antallet af brokere, der er n\u00f8dvendige for at h\u00e5ndtere en given belastning. Men i praksis er der s\u00e5 mange konfigurationsmuligheder p\u00e5 forskellige niveauer, at det er sv\u00e6rt (om ikke umuligt) at vurdere den potentielle ydeevne af en given konfiguration. Med andre ord er det meget udfordrende at planl\u00e6gge en konfiguration baseret p\u00e5 en bestemt ydeevne.<\/p>\n<p>For brugere af Supertubes anvender vi typisk f\u00f8lgende tilgang: vi starter med en vis konfiguration (infrastruktur + indstillinger), m\u00e5ler dens ydeevne, justerer brokerindstillingerne og gentager processen. Dette sker, indtil potentialet i den langsomste infrastrukturkomponent er fuldt udnyttet.<\/p>\n<p>P\u00e5 denne m\u00e5de f\u00e5r vi et klarere billede af, hvor mange brokerne der er n\u00f8dvendige for klyngen til at h\u00e5ndtere en bestemt belastning (antallet af brokerne afh\u00e6nger ogs\u00e5 af andre faktorer, s\u00e5som minimum antal meddelelse-replikker for at sikre robusthed, antal partition-ledere osv.). Derudover f\u00e5r vi indsigt i, hvilken infrastrukturkomponent der kr\u00e6ver vertikal skalering.<\/p>\n<p>I denne artikel vil vi tale om de skridt, vi tager for at \"tr\u00e6kke det maksimale\" ud af de langsomste komponenter i de indledende konfigurationer og m\u00e5le gennemstr\u00f8mningen i Kafka-klyngen. En h\u00f8jtilg\u00e6ngelig konfiguration kr\u00e6ver, at der er mindst tre fungerende brokere.<code>min.insync.replicas=3<\/code>), som er fordelt over tre forskellige tilg\u00e6ngelighedszoner. Til ops\u00e6tning, skalering og overv\u00e5gning af Kubernetes-infrastrukturen bruger vi vores egen containerstyringsplatform til hybride cloudl\u00f8sninger \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pipeline\">Pipeline<\/a><\/noindex>. Den underst\u00f8tter on-premise (bare metal, VMware) og fem cloudtyper (Alibaba, AWS, Azure, Google, Oracle), samt alle deres kombinationer.<\/p>\n<h2>Overvejelser vedr\u00f8rende infrastruktur og konfiguration af Kafka-klyngen<\/h2>\n<p>\nFor eksemplerne nedenfor har vi valgt AWS som cloudtjenesteudbyder og EKS som Kubernetes-distribution. En lignende konfiguration kan implementeres ved hj\u00e6lp af <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pke\">PKE<\/a><\/noindex> \u2014 en Kubernetes-distribution fra Banzai Cloud, der er CNCF-certificeret.<\/p>\n<h3>Disk<\/h3>\n<p>\nAmazon tilbyder forskellige <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/UserGuide\/ebs-volume-types.html\">typer EBS-volumener<\/a><\/noindex>. I bunden af <i>gp2<\/i> og <i>io1<\/i> ligger SSD-diske, men for at sikre h\u00f8j gennemstr\u00f8mning <i>gp2<\/i> forbruger opsparede kreditter <i>(I\/O credits)<\/i>, s\u00e5 vi foretrak den type <i>io1<\/i>, der tilbyder stabil h\u00f8j gennemstr\u00f8mning.<\/p>\n<h3>Instance-typer<\/h3>\n<p>\nYdelsen fra Kafka afh\u00e6nger i h\u00f8j grad af operativsystemets sidecache, s\u00e5 vi har brug for instanser med tilstr\u00e6kkelig hukommelse til m\u00e6glere (JVM) og sidecache. Instansen <i>c5.2xlarge<\/i> \u2014 er et godt udgangspunkt, da den har 16 GB hukommelse og <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/UserGuide\/ebs-optimized.html\">er optimeret til EBS-drift<\/a><\/noindex>. Dens ulempe er, at den kan levere maksimal ydelse i h\u00f8jst 30 minutter hver 24. time. Hvis arbejdsbyrden kr\u00e6ver maksimal ydelse over en l\u00e6ngere periode, b\u00f8r man overveje andre instanstyper. Det er netop, hvad vi gjorde, ved at v\u00e6lge <i>c5.4xlarge<\/i>. Den sikrer maksimal gennemstr\u00f8mning p\u00e5 <b>593,75 MB\/s<\/b>. Den maksimale gennemstr\u00f8mning af EBS-volumenet <i>io1<\/i> er h\u00f8jere end for instansen <i>c5.4xlarge<\/i>, s\u00e5 det langsomste element i infrastrukturen ser ud til at v\u00e6re I\/O-gennemstr\u00f8mningen for denne instans type (hvilket ogs\u00e5 b\u00f8r bekr\u00e6ftes af resultaterne fra vores belastningstests).<\/p>\n<h3>Netv\u00e6rk<\/h3>\n<p>\nNetv\u00e6rkets gennemstr\u00f8mning skal v\u00e6re stor nok sammenlignet med ydelsen af VM-instansen og disken, ellers bliver netv\u00e6rket en flaskehals. I vores tilf\u00e6lde underst\u00f8tter netv\u00e6rksgr\u00e6nsefladen <i>c5.4xlarge<\/i> hastigheder op til 10 Gbps, hvilket er betydeligt h\u00f8jere end I\/O-gennemstr\u00f8mningen for VM-instansen.<\/p>\n<h3>Implementering af m\u00e6glere<\/h3>\n<p>\nBrokere skal implementeres (planl\u00e6gges i Kubernetes) p\u00e5 dedikerede noder for at undg\u00e5 konkurrence med andre processer om ressourcer som CPU, hukommelse, netv\u00e6rk og disk.<\/p>\n<h3>Java-version<\/h3>\n<p>\nEt logisk valg er Java 11, da den er kompatibel med Docker p\u00e5 den m\u00e5de, at JVM korrekt identificerer de processorer og den hukommelse, der er tilg\u00e6ngelig for den container, hvori brokeren k\u00f8rer. Da processorbegr\u00e6nsninger er vigtige, indstiller JVM internt og transparent antallet af GC-tr\u00e5de og JIT-kompilatortr\u00e5de. Vi har brugt billedet Kafka <code>banzaicloud\/kafka:2.13-2.4.0<\/code>, som inkluderer version Kafka 2.4.0 (Scala 2.13) p\u00e5 Java 11.<\/p>\n<blockquote><p>Hvis du \u00f8nsker at l\u00e6re mere om Java\/JVM p\u00e5 Kubernetes, se venligst f\u00f8lgende vores 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>Brokers hukommelseskonfiguration<\/h3>\n<p>\nDer er to n\u00f8gleaspekter i konfigurationen af brokerens hukommelse: indstillinger for JVM og for pod'en i Kubernetes. Den hukommelsesgr\u00e6nse, der er indstillet for pod'en, skal v\u00e6re st\u00f8rre end den maksimale heap size for at give JVM plads til Java's metaraum, som ligger i sin egen hukommelse, og til operativsystemets sidecache, som Kafka aktivt bruger. I vores test k\u00f8rte vi Kafka-brokere med parametre <code>-Xmx4G -Xms2G<\/code>, og hukommelsesgr\u00e6nsen for pod'en var <code>10 Gi<\/code>. V\u00e6r opm\u00e6rksom p\u00e5, at hukommelsesindstillinger for JVM automatisk kan opn\u00e5s via <code>-XX:MaxRAMPercentage<\/code> og <code>-X:MinRAMPercentage<\/code>, baseret p\u00e5 hukommelsesgr\u00e6nsen for pod'en.<\/p>\n<h3>Brokers processorindstillinger<\/h3>\n<p>\nGenerelt kan produktiviteten \u00f8ges ved at \u00f8ge parallelismen ved at \u00f8ge antallet af tr\u00e5de, der bruges af Kafka. Jo flere processorer der er tilg\u00e6ngelige for Kafka, jo bedre. I vores test startede vi med en gr\u00e6nse p\u00e5 6 processorer og steg gradvist (iterativt) op til 15. Derudover satte vi <code>num.network.threads=12<\/code> i brokerens indstillinger for at \u00f8ge antallet af tr\u00e5de, der modtager data fra netv\u00e6rket og sender dem. Da vi straks opdagede, at sekventielle brokere ikke kunne modtage replikaer hurtigt nok, h\u00e6vede vi <code>num.replica.fetchers<\/code> til 4 for at \u00f8ge hastigheden, hvormed sekventielle brokere replikerede meddelelser fra ledere.<\/p>\n<h3>Belastningsgenereringsv\u00e6rkt\u00f8j<\/h3>\n<p>\nDet b\u00f8r sikres, at potentialet for den valgte belastningsgenerator ikke opbruges, f\u00f8r Kafka-klusteret (hvis benchmark foretages) n\u00e5r sin maksimale belastning. Med andre ord er det n\u00f8dvendigt at foretage en forudg\u00e5ende vurdering af mulighederne for belastningsgenereringsv\u00e6rkt\u00f8jet samt v\u00e6lge instans-typer med tilstr\u00e6kkeligt antal processorer og hukommelse. P\u00e5 denne m\u00e5de vil vores v\u00e6rkt\u00f8j producere mere belastning, end Kafka-klusteret kan h\u00e5ndtere. Efter mange fors\u00f8g valgte vi tre instanser <i>c5.4xlarge<\/i>, hvor hver har haft generatoren k\u00f8rende.<\/p>\n<h2>Benchmarking<\/h2>\n<p>\nYdelsesm\u00e5ling er en iterativ proces, der inkluderer f\u00f8lgende faser:<\/p>\n<ul>\n<li> ops\u00e6tning af infrastrukturen (EKS kluster, Kafka kluster, belastningsgenereringsv\u00e6rkt\u00f8jet, samt Prometheus og Grafana);<\/li>\n<li> generering af belastning i en bestemt periode for at filtrere tilf\u00e6ldige udsving i de indsamlede pr\u00e6stationsdata;<\/li>\n<li> justering af infrastrukturen og konfigurationen af broker baseret p\u00e5 de observerede pr\u00e6stationsdata;<\/li>\n<li> gentagelse af processen, indtil det kr\u00e6vede niveau af b\u00e5ndbredde i Kafka-klusteret er n\u00e5et. Det skal v\u00e6re stabilt reproduc\u00e9rbart og vise minimale variationer i b\u00e5ndbredden.<\/li>\n<\/ul>\n<p>\nI f\u00f8lgende sektion beskrives de trin, der blev udf\u00f8rt i benchmarking-processen for testklusteret.<\/p>\n<h3>V\u00e6rkt\u00f8jer<\/h3>\n<p>\nFor hurtig implementering af basisops\u00e6tning, generering af belastning og m\u00e5ling af ydeevne blev f\u00f8lgende v\u00e6rkt\u00f8jer brugt:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/pipeline\/overview\/\">Banzai Cloud Pipeline<\/a><\/noindex> til oprettelse af EKS klusteret fra Amazon med <noindex><a rel=\"nofollow\" href=\"https:\/\/prometheus.io\/\">Prometheus<\/a><\/noindex> (til indsamling af Kafka og infrastruktur metrics) og <noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/\">Grafana<\/a><\/noindex> (til visualisering af disse metrics). Vi benyttede os af <b>integrerede<\/b> i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pipeline\">Pipeline<\/a><\/noindex> tjenester, der tilbyder f\u00f8dereret overv\u00e5gning, centraliseret logindsamling, s\u00e5rbarhedsscanning, genopretning efter fejl, sikkerhed i virksomhedsklasse og meget mere.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jamiealquiza\/sangrenel\">Sangrenel<\/a><\/noindex> \u2014 v\u00e6rkt\u00f8j til belastningstest af Kafka-klusteret.<\/li>\n<li> Grafana paneler til visualisering af Kafka- og infrastrukturmetrics: <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 til maks simpel konfiguration af et Kafka-kluster i Kubernetes. Zookeeper, Kafka-operator, Envoy og mange andre komponenter er installeret og korrekt konfigureret til at k\u00f8re et produktionsklar Kafka-kluster i Kubernetes.\n<ul>\n<li> For installation <i>supertubes CLI<\/i> f\u00f8lg vejledningen i <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/supertubes\/cli\/install\/\">her<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret 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>\nForbered EKS-klusteret med dedikerede arbejdstagere <i>c5.4xlarge<\/i> i forskellige tilg\u00e6ngelighedszoner for pod'ene med Kafka-brokere samt dedikerede noder til belastningsgeneratoren og overv\u00e5gningsinfrastrukturen.<\/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\u00e5r EKS-klusteret er oppe at k\u00f8re, skal du aktivere den integrerede <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/pipeline\/features\/integrated-services\/\">overv\u00e5gningstjeneste<\/a><\/noindex> \u2014 den vil implementere Prometheus og Grafana i klusteret.<\/p>\n<h3>Kafka-systemkomponenter<\/h3>\n<p>\nInstaller Kafka-systemkomponenterne (Zookeeper, kafka-operator) i EKS ved hj\u00e6lp af 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 anvendes EBS-volumener af typen <i>gp2<\/i>, s\u00e5 det er n\u00f8dvendigt at oprette en s\u00e6rskilt lagerklasse baseret p\u00e5 volumener <i>io1<\/i> til Kafka-klusteret:<\/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>\nS\u00e6t en parameter for brokeren <code>min.insync.replicas=3<\/code> og deployer pod'ene med brokere p\u00e5 noder i tre forskellige tilg\u00e6ngelighedszoner:<\/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>Emner<\/h3>\n<p>\nVi k\u00f8rte samtidig tre instanser af belastningstesteren. Hver af dem skriver til sit eget emne, dvs. vi har i alt brug for tre emner:<\/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>\nFor hvert emne er replikeringsfaktoren 3 \u2014 den minimum anbefalede v\u00e6rdi for h\u00f8jt tilg\u00e6ngelige produktionssystemer.<\/p>\n<h3>Belastningsgenereringsv\u00e6rkt\u00f8j<\/h3>\n<p>\nVi k\u00f8rte tre instanser af belastningsgeneratoren (hver skrev til et separat emne). For pod'ene med belastningsgeneratoren skal node affinity angives, s\u00e5 de kun planl\u00e6gges p\u00e5 de tildelte noder:<\/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>\nNogle punkter, der er v\u00e6rd at bem\u00e6rke:<\/p>\n<ul>\n<li> Belastningsgeneratoren genererer meddelelser af 512 byte og publicerer dem i Kafka i partier p\u00e5 500 meddelelser.<\/li>\n<li> Ved hj\u00e6lp af argumentet <code>-required-acks=all<\/code> anses publiceringen for at v\u00e6re vellykket, n\u00e5r alle synkroniserede replikaer af meddelelsen er blevet modtaget og bekr\u00e6ftet af Kafka-brokere. Det betyder, at vi i benchmarket m\u00e5lte ikke kun hastigheden p\u00e5 lederne, der modtog meddelelser, men ogs\u00e5 deres efterf\u00f8lgere, der replikerede meddelelser. Form\u00e5let med denne test er ikke at vurdere forbrugerens hastighed <i>(consumers)<\/i> af nyligt modtagne meddelelser, der stadig er i OS's sidecache, og sammenligne det med hastigheden for at l\u00e6se meddelelser, der er gemt p\u00e5 disken.<\/li>\n<li> Belastningsgeneratoren k\u00f8rer samtidig 20 arbejdstagere (<code>-workers=20<\/code>). Hver arbejdstager indeholder 5 producenter, der deler forbindelsen fra arbejdstageren til Kafka-klusteret. I alt har hver generator 100 producenter, og de sender alle meddelelser til Kafka-klusteret.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Overv\u00e5gning af klusterets tilstand<\/h3>\n<p>\nUnder belastningstestningen af Kafka-klusteret overv\u00e5gede vi ogs\u00e5 dets sundhed for at sikre, at der ikke var nogen genstart af pod'ene, desynkroniserede replikaer og maksimal kapacitet med minimale fluktuationer:<\/p>\n<ul>\n<li> The load generator reports standard statistics on the number of published messages and error rates. 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>, den udrullen kafka-operator giver et dashboard, hvor vi ogs\u00e5 kan overv\u00e5ge tilstanden af klyngen. For at se dette dashboard skal du udf\u00f8re:\n<pre><code class=\"bash\">supertubes cluster cruisecontrol show -n kafka --kubeconfig<\/code><\/pre>\n<\/li>\n<li> ISR level <i>(the number of 'in-sync' replicas)<\/i> shrink and expansion equals 0.<\/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, der er j\u00e6vnt fordelt over tre brokere, har vi opn\u00e5et en ydeevne <i>~500 MB\/s (approximately 990 thousand messages per second)<\/i>:<\/p>\n<p><img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/df65ff6a1a26e28d5e5a7a5ab1a20d98.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/15c5883c0056c651f0a0bd14e9991967.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/9b708fa5ce809b0d059cba9f5edfbb2f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe JVM virtual machine's memory consumption did not exceed 2 GB:<\/p>\n<p><img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/3320e2eea891055cc0935da492d18ee9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/6e3976c310309aa8be45fa3fdf547750.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/94baa1b689ae854693fb7cc4ed6e105e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe disk throughput reached the maximum I\/O capacity of the node on all three instances where the brokers were running:<\/p>\n<p><img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/408139ad33cda1294755660df1c128a8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/391d2df0ddfe82f94abdb200370ff775.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/e7e9fd021a2cdc71992ce672363a78ec.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFrom the memory usage data on the nodes, it appears that system buffering and caching took up ~10-15 GB:<\/p>\n<p><img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/781887507e01a4903b86871961ff9260.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/63f10177f01342039f04192ea93c8bca.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret 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 decrease in message size, the throughput drops by approximately 15-20% due to the time spent processing each message. Additionally, CPU load nearly doubled.<\/p>\n<p><img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/2f7dc5a94da371cfe17c9e0fc0ec1941.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/986160a3a4e099a0dbb8aeefaf6f1c2f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/c08244457bf4dbfadf52838d4ea2969e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSince the broker nodes still have unused cores, performance can be improved by adjusting the Kafka configuration. This is a challenging task, so for increased throughput, it is better to work with larger messages.<\/p>\n<h3>4 brokers, message size \u2014 512 bytes<\/h3>\n<p>\nYdeevnen for Kafka-klyngen kan nemt \u00f8ges ved blot at tilf\u00f8je nye brokere og opretholde balancen af partitioner (det sikrer en j\u00e6vn fordeling af belastningen mellem brokere). I vores tilf\u00e6lde steg klyngekapaciteten efter tilf\u00f8jelsen af en broker til <i>~580 MB\/s (~1.1 million messages per second)<\/i>. Stigningen viste sig at v\u00e6re mindre end forventet: dette skyldes hovedsageligt ubalancen i partitionerne (ikke alle brokere arbejder p\u00e5 deres maksimale kapacitet).<\/p>\n<p><img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/8c8d2e70739add3c3f88fe42acf98c46.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/a6e4812270c04487de0ad39b996a13f8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/6162c04cfb87b9d9cd0f3147a4ae1647.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/dae5de3b14be212c679f3627a3b77d7b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJVM-maskinens hukommelsesforbrug forbliver under 2 GB:<\/p>\n<p><img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/0bca07a817d7da3104b08de10979f049.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/7e1e64f80ec140f13e171cfe3be930ce.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/5e9700b1e54e45f9cd5fa018ec07dba1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/4ba0c4b59bfe72bcb0d2f22056c47d79.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBrokernes arbejde med datalagring blev p\u00e5virket af ubalancen i partitionerne:<\/p>\n<p><img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/2b8ed3c21adf70c751d1daa6d4c41895.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/77b980869b99903d9de5cd7d43d79291.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/f2f9569a3a1ef0ce35e89b2e52e4a8b2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bestemmer den passende st\u00f8rrelse for Kafka-clusteret i Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/191d6d97b32b2128c5cfd3914171de15.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Konklusioner<\/h2>\n<p>\nDen iterative tilgang, der pr\u00e6senteres ovenfor, kan udvides til at omfatte mere komplekse scenarier, herunder hundreder af forbrugere, repartitionering, bake-oppdateringer, genstart af pods osv. Alt dette giver os mulighed for at vurdere gr\u00e6nserne for Kafka-klyngens kapacitet under forskellige forhold, identificere flaskehalse i dens drift og finde m\u00e5der at tackle dem p\u00e5.<\/p>\n<p>Vi har udviklet Supertubes til hurtig og nem distribution af klyngen, dens konfiguration, tilf\u00f8jelse\/fjernelse af brokere og emner, respons p\u00e5 alarmer og sikring af en korrekt drift af Kafka i Kubernetes generelt. Vores m\u00e5l er at hj\u00e6lpe med at fokusere p\u00e5 den prim\u00e6re opgave (at 'generere' og 'forbruge' Kafka-beskeder) og overlade alt det h\u00e5rde arbejde til Supertubes og Kafka-operat\u00f8ren.<\/p>\n<p>Hvis du er interesseret i teknologi og Open Source-projekter fra Banzai Cloud, s\u00e5 f\u00f8lg virksomheden 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. fra overs\u00e6tteren<\/h2>\n<p>\nL\u00e6s ogs\u00e5 p\u00e5 vores blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/480722\/\">En historie om Redis-operat\u00f8ren i K8s og en kort oversigt over v\u00e6rkt\u00f8jer til dataanalyse for denne DB<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/450662\/\">Udenproblematisk migration af RabbitMQ til Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/329224\/\">zetcd fra CoreOS: Udskifter ZooKeeper med\u2026 et etcd-lager<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Kilde: <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.3 - 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\/da\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47Definerer den passende st\u00f8rrelse for Kafka-klusteret i Kubernetes | ProHoster","description":"Obs. overs: I denne artikel deler Banzai Cloud et eksempel p\u00e5 brugen af sine specialv\u00e6rkt\u00f8jer til at lette driften af Kafka inden for Kubernetes.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/71213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=71213"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/71213\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/71214"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=71213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=71213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=71213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}