{"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\/nl\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes","title":{"rendered":"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Opmerking vertaler.<\/b>: In dit artikel deelt Banzai Cloud een voorbeeld van het gebruik van zijn speciale hulpprogramma's om het beheer van Kafka binnen Kubernetes te vergemakkelijken. De gegeven instructies illustreren hoe de optimale grootte van de infrastructuur kan worden bepaald en hoe Kafka zelf kan worden geconfigureerd om de vereiste doorvoersnelheid te bereiken.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/8a598ec7db091c2944a6442f9bc124da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nApache Kafka is een gedistribueerd streamingplatform voor het cre\u00ebren van betrouwbare, schaalbare en hoogperformante streamingsystemen in realtime. De indrukwekkende mogelijkheden ervan kunnen worden uitgebreid met Kubernetes. Hiervoor hebben we ontwikkeld <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/kafka-operator\">de Open Source Kafka-operator<\/a><\/noindex> en een hulpmiddel genaamd <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/supertubes\/overview\/\">Supertubes<\/a><\/noindex>. Deze stellen je in staat om Kafka in Kubernetes te draaien en verschillende functies ervan te gebruiken, zoals fijn afstemmen van de brokerconfiguratie, schaling op basis van metrics met herbalanceerbaarheid, rack awareness, \u2018graceful\u2019 <i>(graceful)<\/i> uitrol van updates, enzovoort.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p>Probeer Supertubes in je cluster:<\/p>\n<pre><code class=\"bash\">curl https:\/\/getsupertubes.sh | sh en supertubes install -a --no-democluster --kubeconfig<\/code><\/pre>\n<p>\nOf neem contact op met <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/supertubes\/cli\/reference\/\">de documentatie<\/a><\/noindex>. Je kunt ook lezen over enkele mogelijkheden van Kafka die zijn geautomatiseerd met behulp van Supertubes en de Kafka-operator. Daarover hebben we al geblogd:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-operator\/\">Oh nee! Weer een andere Kafka-operator voor Kubernetes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-alert\/\">Monitor en beheer Kafka op basis van Prometheus metrics<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-rack-awareness\/\">Kafka rack awareness op Kubernetes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-on-istio-performance\/\">Running Apache Kafka over Istio \u2014 benchmark<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-topic-user-management\/\">Gebruiker geauthenticeerde en toegangs gecontroleerde clusters met de Kafka-operator<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-rolling-upgrade\/\">Kafka rolling upgrade en dynamische configuratie op Kubernetes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-envoy-protocol-filter\/\">Envoy protocolfilter voor Kafka, gemeshd<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/blockquote>\n<p>\nAls je besluit om een Kafka-cluster in Kubernetes op te zetten, kom je ongetwijfeld de uitdaging tegen om de optimale grootte van de onderliggende infrastructuur te bepalen en de configuratie van Kafka fijn af te stemmen om te voldoen aan de vereisten voor de doorvoersnelheid. De maximale prestaties van elke broker hangen af van de prestaties van de infrastructuurcomponenten eronder, zoals geheugen, CPU, schijf snelheid, netwerkdoorvoer, enzovoort.<\/p>\n<p>Idealiter zou de configuratie van de broker zodanig moeten zijn dat alle infrastructuurelementen op hun maximaal vermogen worden benut. In de praktijk is zo'n instelling echter behoorlijk ingewikkeld. Het is waarschijnlijker dat gebruikers de configuratie van brokers zodanig instellen dat ze het gebruik van \u00e9\u00e9n of twee componenten (schijf, geheugen of processor) maximaliseren. Over het algemeen vertoont een broker de beste prestaties wanneer de configuratie het mogelijk maakt om het langzaamste component ten volle te benutten. Zo kunnen we een schatting maken van de belasting waaraan een enkele broker kan voldoen.<\/p>\n<p>Theoretisch kunnen we ook het aantal brokers schatten dat nodig is om met een bepaalde belasting om te gaan. In de praktijk zijn er echter zoveel configuratieopties op verschillende niveaus, dat het moeilijk is om de potenti\u00eble prestaties van een bepaalde configuratie te beoordelen (bijna onmogelijk). Met andere woorden, het is erg moeilijk om een configuratie te plannen op basis van een bepaalde prestatie-eis.<\/p>\n<p>Voor Supertubes-gebruikers passen we doorgaans de volgende aanpak toe: we beginnen met een bepaalde configuratie (infrastructuur + instellingen), meten de prestaties, passen de instellingen van de broker aan en herhalen het proces nogmaals. Dit gaat door totdat het potentieel van het langzaamste component van de infrastructuur volledig is benut.<\/p>\n<p>Op deze manier krijgen we een duidelijker beeld van hoeveel brokers nodig zijn voor een cluster om een bepaalde belasting aan te kunnen (aantal brokers hangt ook af van andere factoren, zoals het minimale aantal berichtenreplica's voor betrouwbaarheid, het aantal partition-leiders, enzovoort). Bovendien krijgen we inzicht in welk infrastructuurelement het meest geschikt is voor verticale schaalvergroting.<\/p>\n<p>In dit artikel bespreken we de stappen die we ondernemen om het maximale uit de langzaamste componenten in de initi\u00eble configuraties te halen en de doorvoercapaciteit van de Kafka-cluster te meten. Een hoog beschikbare configuratie vereist ten minste drie actieve brokers.<code>min.insync.replicas=3<\/code>), verspreid over drie verschillende beschikbaarheidszones. Voor de configuratie, schaalvergroting en monitoring van de Kubernetes-infrastructuur gebruiken we ons eigen containerbeheersplatform voor hybride clouds \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pipeline\">Pipeline<\/a><\/noindex>. Het ondersteunt on-premise (bare metal, VMware) en vijf soorten clouds (Alibaba, AWS, Azure, Google, Oracle), evenals hun willekeurige combinaties.<\/p>\n<h2>Overwegingen met betrekking tot de infrastructuur en configuratie van de Kafka-cluster<\/h2>\n<p>\nVoor de onderstaande voorbeelden hebben we AWS gekozen als cloudprovider en EKS als Kubernetes-distributie. Een soortgelijke configuratie kan worden gerealiseerd met <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pke\">PKE<\/a><\/noindex> \u2014 een Kubernetes-distributie van Banzai Cloud, gecertificeerd door CNCF.<\/p>\n<h3>Schijf<\/h3>\n<p>\nAmazon biedt verschillende <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/UserGuide\/ebs-volume-types.html\">types EBS-volumes<\/a><\/noindex>. De basis van <i>gp2<\/i> en <i>io1<\/i> bestaat uit SSD-schijven, maar om een hoge doorvoer te garanderen, <i>gp2<\/i> consumeert het opgebouwde credits <i>(I\/O credits)<\/i>, daarom geven we de voorkeur aan het type <i>io1<\/i>, dat een stabiele hoge doorvoer biedt.<\/p>\n<h3>Types instanties<\/h3>\n<p>\nDe prestaties van Kafka zijn sterk afhankelijk van de paginacache van het besturingssysteem, daarom hebben we instanties nodig met voldoende geheugen voor de brokers (JVM) en de paginacache. De instantie <i>c5.2xlarge<\/i> is een goede start, aangezien deze 16 GB geheugen heeft en <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/UserGuide\/ebs-optimized.html\">geoptimaliseerd is voor gebruik met EBS<\/a><\/noindex>. Het nadeel is dat het in staat is om maximale prestaties te leveren gedurende niet meer dan 30 minuten per 24 uur. Als de werklast maximale prestaties vereist gedurende een langere periode, moeten we naar andere types instanties kijken. Dat is precies wat we hebben gedaan, waarmee we gekozen hebben voor <i>c5.4xlarge<\/i>. Het biedt een maximale doorvoer van <b>593,75 MB\/s<\/b>. De maximale doorvoer van het EBS-volume <i>io1<\/i> is hoger dan die van de instantie <i>c5.4xlarge<\/i>, daarom lijkt het langzaamste element van de infrastructuur de I\/O-doorvoer van dit soort instantie te zijn (wat ook moet worden bevestigd door de resultaten van onze belastingtests).<\/p>\n<h3>Netwerk<\/h3>\n<p>\nDe netwerksnelheid moet aanzienlijk hoger zijn dan de prestaties van de VM-instantie en de schijf, anders wordt het netwerk de bottleneck. In ons geval ondersteunt de netwerkinterface <i>c5.4xlarge<\/i> een snelheid tot 10 Gbps, wat aanzienlijk hoger is dan de I\/O-doorvoer van de VM-instantie.<\/p>\n<h3>De inzet van brokers<\/h3>\n<p>\nBrokers moeten uitgerold worden (gepland in Kubernetes) op dedicated nodes om concurrentie met andere processen voor CPU-, geheugen-, netwerken- en schijfrmiddelen te vermijden.<\/p>\n<h3>Java-versie<\/h3>\n<p>\nEen logische keuze is Java 11, omdat het compatibel is met Docker in die zin dat de JVM correct de beschikbare processors en het geheugen voor de container bepaalt waarin de broker draait. Wetende dat CPU-limieten belangrijk zijn, stelt de JVM intern en transparant het aantal GC-threads en JIT-compiler-threads in. We hebben het Kafka-image gebruikt <code>banzaicloud\/kafka:2.13-2.4.0<\/code>, inclusief versie Kafka 2.4.0 (Scala 2.13) op Java 11.<\/p>\n<blockquote><p>Als je meer wilt weten over Java\/JVM op Kubernetes, let dan op onze volgende publicaties:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/java-resource-limits\/\">Waarom wordt mijn Java-toepassing OOMKilled<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/java10-container-sizing\/\">Hoe containers correct te dimensioneren voor Java 10-toepassingen<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/blockquote>\n<p><\/p>\n<h3>Geheugeninstellingen voor de broker<\/h3>\n<p>\nEr zijn twee belangrijke aspecten bij het configureren van het geheugen van de broker: instellingen voor de JVM en voor de pod van Kubernetes. De geheugengrens die voor de pod is ingesteld, moet groter zijn dan de maximale heap size, zodat er voor de JVM ruimte overblijft voor de Java metagegevens, die in het eigen geheugen zijn opgeslagen, en voor de paginacache van het besturingssysteem, die Kafka actief gebruikt. In onze tests hebben we Kafka-brokers draaien met de parameters <code>-Xmx4G -Xms2G<\/code>, en de geheugengrens voor de pod was <code>10 Gi<\/code>was. Merk op dat geheugeninstellingen voor de JVM automatisch verkregen kunnen worden met <code>-XX:MaxRAMPercentage<\/code> en <code>-X:MinRAMPercentage<\/code>, op basis van de geheugengrens voor de pod.<\/p>\n<h3>Processorinstellingen voor de broker<\/h3>\n<p>\nOver het algemeen kan de prestaties worden verhoogd door de parallelisme te vergroten door het aantal threads dat door Kafka wordt gebruikt te verhogen. Hoe meer processors beschikbaar zijn voor Kafka, hoe beter. In onze test begonnen we met een limiet van 6 processors en verhoogden we dit geleidelijk (in iteraties) tot 15. Daarnaast stelden we in <code>num.network.threads=12<\/code> in de brokerinstellingen om het aantal threads dat gegevens uit het netwerk ontvangt en verzendt te verhogen. We ontdekten al snel dat follower-brokers de replica's niet snel genoeg konden ontvangen, dus verhoogden we <code>num.replica.fetchers<\/code> tot 4 om de snelheid te verhogen waarmee follower-brokers berichten van leiders repliceren.<\/p>\n<h3>Laadgeneratortool<\/h3>\n<p>\nWe moeten ervoor zorgen dat het potentieel van de gekozen belastinggenerator niet uitgeput raakt voordat het Kafka-cluster (waarvan de benchmark wordt uitgevoerd) zijn maximale belasting bereikt. Met andere woorden, we moeten een voorafgaande evaluatie uitvoeren van de mogelijkheden van de belastinggeneratietool en de juiste typen instances kiezen met voldoende processors en geheugen. In dit geval zal onze tool meer belasting produceren dan het Kafka-cluster kan verwerken. Na verschillende tests hebben we gekozen voor drie instances <i>c5.4xlarge<\/i>, waarbij in elk een generator is gestart.<\/p>\n<h2>Benchmarking<\/h2>\n<p>\nPrestatiemeting is een iteratief proces dat de volgende fasen omvat:<\/p>\n<ul>\n<li> infrastructuur configuratie (EKS-cluster, Kafka-cluster, belastinggeneratietool, evenals Prometheus en Grafana);<\/li>\n<li> belasting genereren gedurende een bepaalde periode om willekeurige afwijkingen in de verzamelde prestatiegegevens te filteren;<\/li>\n<li> afstemming van infrastructuur en configuratie van de broker op basis van de waargenomen prestatiegegevens;<\/li>\n<li> het proces herhalen totdat het vereiste niveau van doorvoer van het Kafka-cluster is bereikt. Dit moet stabiel reproduceerbaar zijn en minimale variaties in doorvoer vertonen.<\/li>\n<\/ul>\n<p>\nIn de volgende sectie worden de stappen beschreven die zijn uitgevoerd tijdens de benchmark van het testcluster.<\/p>\n<h3>Hulpmiddelen<\/h3>\n<p>\nVoor snelle implementatie van de basisconfiguratie, belastinggeneratie en prestatiemeting zijn de volgende tools gebruikt:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/pipeline\/overview\/\">Banzai Cloud Pipeline<\/a><\/noindex> voor de organisatie van het EKS-cluster van Amazon met <noindex><a rel=\"nofollow\" href=\"https:\/\/prometheus.io\/\">Prometheus<\/a><\/noindex> (voor het verzamelen van Kafka- en infrastructuurmetrics) en <noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/\">Grafana<\/a><\/noindex> (voor visualisatie van deze metrics). We hebben gebruikgemaakt van <b>ge\u00efntegreerde<\/b> in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pipeline\">Pipeline<\/a><\/noindex> diensten die federatieve monitoring, gecentraliseerde logverzameling, kwetsbaarhedenscanning, herstel na storingen, bedrijfsniveau beveiliging en meer bieden.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jamiealquiza\/sangrenel\">Sangrenel<\/a><\/noindex> \u2014 een tool voor load testing van het Kafka-cluster.<\/li>\n<li> Grafana-dashboards voor het visualiseren van Kafka- en infrastructuurmetrics: <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 voor de eenvoudigste configuratie van een Kafka-cluster in Kubernetes. Zookeeper, Kafka-operator, Envoy en vele andere componenten zijn ge\u00efnstalleerd en correct geconfigureerd voor het draaien van een productieklare Kafka-cluster in Kubernetes.\n<ul>\n<li> klonen we de overeenkomstige repository van GitHub: <i>supertubes CLI<\/i> maak gebruik van de instructies die hier zijn gegeven <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/supertubes\/cli\/install\/\">hier<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/23ecf423b1ea66813406943ae7eabf61.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>EKS-cluster<\/h3>\n<p>\nBereid het EKS-cluster voor met toegewezen werkknopen <i>c5.4xlarge<\/i> in verschillende beschikbaarheidszones voor de pods met Kafka-brokers, evenals voor de belastinggenerator en monitoringsinfrastructuur aparte nodes.<\/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>\nZodra het EKS-cluster operationeel is, schakel de ge\u00efntegreerde <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/pipeline\/features\/integrated-services\/\">monitoringsdienst<\/a><\/noindex> in \u2014 het zal Prometheus en Grafana in het cluster implementeren.<\/p>\n<h3>Systeemcomponenten van Kafka<\/h3>\n<p>\nInstalleer de systeemcomponenten van Kafka (Zookeeper, kafka-operator) in EKS met behulp van supertubes CLI:<\/p>\n<pre><code class=\"bash\">supertubes install -a --no-democluster --kubeconfig<\/code><\/pre>\n<p><\/p>\n<h3>Kafka-cluster<\/h3>\n<p>\nStandaard worden in EKS EBS-volumes van het type <i>gp2<\/i>, dus moet er een aparte opslageenheid worden aangemaakt op basis van volumes <i>io1<\/i> voor het Kafka-cluster:<\/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>\nStel voor de brokers de parameter <code>min.insync.replicas=3<\/code> en implementeer de pods van brokers op nodes in drie verschillende beschikbaarheidszones:<\/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>Topics<\/h3>\n<p>\nWe hebben tegelijkertijd drie instanties van de belastinggenerator uitgevoerd. Elk van hen schrijft naar zijn eigen topic, dus we hebben in totaal drie topics nodig:<\/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>\nVoor elk topic is de replicatiefactor 3 \u2014 de minimale aanbevolen waarde voor hoogbeschikbare productiesystemen.<\/p>\n<h3>Laadgeneratortool<\/h3>\n<p>\nWe hebben drie instances van de belastinggenerator draaien (elke instantie schrijft naar een apart onderwerp). Voor de pods van de belastinggenerator is het nodig om node affinity te specificeren, zodat ze alleen worden ingepland op voor hen bestemde nodes:<\/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>\nEnkele aandachtspunten zijn:<\/p>\n<ul>\n<li> De load generator genereert berichten van 512 bytes en publiceert deze in Kafka in batches van 500 berichten.<\/li>\n<li> Met het argument <code>-required-acks=all<\/code> wordt een publicatie als succesvol beschouwd wanneer alle gesynchroniseerde replica's van het bericht door de Kafka-brokers zijn ontvangen en bevestigd. Dit betekent dat we in de benchmark niet alleen de snelheid gemeten hebben van de leiders die berichten ontvangen, maar ook van hun volgers die de berichten repliceren. Het doel van deze test is niet om de leessnelheid van net ontvangen berichten te evalueren, <i>(consumers)<\/i> die nog in de pagina-cache van het besturingssysteem blijven en deze te vergelijken met de leessnelheid van berichten die op de schijf zijn opgeslagen.<\/li>\n<li> De belastinggenerator start gelijktijdig 20 workers (<code>-workers=20<\/code>). Elke worker bevat 5 producers, die gezamenlijk verbinding maken met het Kafka-cluster. In totaal heeft elke generator 100 producers, die allemaal berichten naar het Kafka-cluster verzenden.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Monitoring van de status van de cluster<\/h3>\n<p>\nTijdens de load testing van het Kafka-cluster hielden we ook de gezondheid in de gaten om te verzekeren dat er geen pod-herstarts, niet-synchroon replicaties en maximale doorvoersnelheid met minimale fluctuaties waren:<\/p>\n<ul>\n<li> De belastinggenerator schrijft standaardstatistieken over het aantal gepubliceerde berichten en het foutpercentage. Het percentage fouten moet op het niveau blijven van <code>0,00%<\/code>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/linkedin\/cruise-control\">Cruise Control<\/a><\/noindex>, de uitgerolde kafka-operator biedt een dashboard waarop we ook de status van de cluster kunnen volgen. Om dit dashboard te bekijken, voert u uit:\n<pre><code class=\"bash\">supertubes cluster cruisecontrol show -n kafka --kubeconfig<\/code><\/pre>\n<\/li>\n<li> Het niveau ISR <i>(aantal \u2018in-sync\u2019 replica's)<\/i> shrink en expansion is gelijk aan 0.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Meetresultaten<\/h2>\n<p><\/p>\n<h3>3 brokers, berichtgrootte - 512 bytes<\/h3>\n<p>\nMet de partities gelijkmatig verdeeld over drie brokers, zijn we erin geslaagd prestaties te bereiken <i>~500 MB\/s (ongeveer 990.000 berichten per seconde)<\/i>:<\/p>\n<p><img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/df65ff6a1a26e28d5e5a7a5ab1a20d98.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/15c5883c0056c651f0a0bd14e9991967.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/9b708fa5ce809b0d059cba9f5edfbb2f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHet geheugenverbruik van de JVM virtuele machine overschreed niet de 2 GB:<\/p>\n<p><img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/3320e2eea891055cc0935da492d18ee9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/6e3976c310309aa8be45fa3fdf547750.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/94baa1b689ae854693fb7cc4ed6e105e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe schijfdoorvoer bereikte de maximale I\/O-capaciteit van de node op alle drie de instanties waar de brokers draaiden:<\/p>\n<p><img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/408139ad33cda1294755660df1c128a8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/391d2df0ddfe82f94abdb200370ff775.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/e7e9fd021a2cdc71992ce672363a78ec.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUit de gegevens over het geheugengebruik door de nodes blijkt dat systeembuffering en caching ongeveer 10-15 GB in beslag namen:<\/p>\n<p><img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/781887507e01a4903b86871961ff9260.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/63f10177f01342039f04192ea93c8bca.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/48b992cc73a968b3d3b1442f96562c4e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>3 brokers, berichtgrootte - 100 bytes<\/h3>\n<p>\nMet de vermindering van de berichtgrootte daalt de doorvoer met ongeveer 15-20%: dit heeft te maken met de tijd die nodig is voor de verwerking van elk bericht. Bovendien is de belasting op de processor bijna verdubbeld.<\/p>\n<p><img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/2f7dc5a94da371cfe17c9e0fc0ec1941.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/986160a3a4e099a0dbb8aeefaf6f1c2f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/c08244457bf4dbfadf52838d4ea2969e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAangezien er nog ongebruikte cores op de broker-nodes zijn, kan de prestatie worden verbeterd door de Kafka-configuratie aan te passen. Dit is een complexe taak, daarom is het beter om met grotere berichten te werken om de doorvoer te verhogen.<\/p>\n<h3>4 brokers, berichtgrootte - 512 bytes<\/h3>\n<p>\nDe prestaties van de Kafka-cluster kunnen eenvoudig worden verhoogd door nieuwe brokers toe te voegen en de balans van partities te behouden (dit zorgt voor een gelijkmatige verdeling van de belasting tussen de brokers). In ons geval steeg de doorvoer van de cluster na het toevoegen van een broker tot <i>~580 MB\/s (~1,1 miljoen berichten per seconde)<\/i>. De groei was minder dan verwacht: dit wordt voornamelijk verklaard door de onbalans van partities (niet alle brokers functioneren op hun piekcapaciteit).<\/p>\n<p><img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/8c8d2e70739add3c3f88fe42acf98c46.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/a6e4812270c04487de0ad39b996a13f8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/6162c04cfb87b9d9cd0f3147a4ae1647.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/dae5de3b14be212c679f3627a3b77d7b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHet geheugengebruik door de JVM-machine blijft onder de 2 GB:<\/p>\n<p><img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/0bca07a817d7da3104b08de10979f049.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/7e1e64f80ec140f13e171cfe3be930ce.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/5e9700b1e54e45f9cd5fa018ec07dba1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/4ba0c4b59bfe72bcb0d2f22056c47d79.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe werking van de brokers met opslag werd be\u00efnvloed door de onbalans van partities:<\/p>\n<p><img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/2b8ed3c21adf70c751d1daa6d4c41895.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/77b980869b99903d9de5cd7d43d79291.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/f2f9569a3a1ef0ce35e89b2e52e4a8b2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Bepalen van de geschikte grootte voor een Kafka-cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/191d6d97b32b2128c5cfd3914171de15.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Conclusies<\/h2>\n<p>\nDe hierboven gepresenteerde iteratieve aanpak kan worden uitgebreid om complexere scenario's te omvatten, waaronder honderden consumers, repartitioning, rollende updates, herstarten van pods, enz. Dit stelt ons in staat de grenzen van de mogelijkheden van de Kafka-cluster onder verschillende omstandigheden te beoordelen, knelpunten in zijn werking te identificeren en manieren te vinden om deze aan te pakken.<\/p>\n<p>We hebben Supertubes ontwikkeld voor de snelle en gemakkelijke inzet van de cluster, het configureren, toevoegen\/verwijderen van brokers en topics, reageren op meldingen en ervoor zorgen dat Kafka correct functioneert in Kubernetes als geheel. Ons doel is om te helpen focussen op de kernactiviteit (het 'genereren' en 'consumeren' van Kafka-berichten), terwijl al het zware werk wordt overgelaten aan Supertubes en de Kafka-operator.<\/p>\n<p>Als je ge\u00efnteresseerd bent in de technologie\u00ebn en Open Source-projecten van Banzai Cloud, volg het bedrijf dan op <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> of <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/BanzaiCloud\">Twitter<\/a><\/noindex>.<\/p>\n<h2>P.S. van de vertaler<\/h2>\n<p>\nLees ook op onze blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/480722\/\">Een verhaal over de Redis-operator in K8s en een mini-overzicht van tools voor gegevensanalyse van deze DB.<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/450662\/\">Moeizame migratie van RabbitMQ naar Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/329224\/\">zetcd van CoreOS: Vervangt ZooKeeper door... een etcd-opslagplaats<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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\udd47Bepalen van de geschikte grootte voor de Kafka-cluster in Kubernetes | ProHoster","description":"Opmerking vert.: In dit artikel deelt Banzai Cloud een voorbeeld van het gebruik van zijn speciale tools om het beheer van Kafka binnen Kubernetes te vergemakkelijken.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/71213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=71213"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/71213\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/71214"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=71213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=71213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=71213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}