{"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\/de\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes","title":{"rendered":"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein Kafka-Cluster in Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Anmerkung des \u00dcbersetzers.<\/b>: In diesem Artikel teilt die Firma Banzai Cloud ein Beispiel f\u00fcr die Nutzung ihrer speziellen Tools zur Erleichterung des Betriebs von Kafka innerhalb von Kubernetes. Die angef\u00fchrten Anleitungen veranschaulichen, wie man die optimale Gr\u00f6\u00dfe der Infrastruktur bestimmen und Kafka selbst konfigurieren kann, um die erforderliche Durchsatzkapazit\u00e4t zu erreichen.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein Kafka-Cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/8a598ec7db091c2944a6442f9bc124da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nApache Kafka ist eine verteilte Streaming-Plattform zur Erstellung zuverl\u00e4ssiger, skalierbarer und hochleistungsf\u00e4higer Echtzeitsysteme. Ihre beeindruckenden M\u00f6glichkeiten lassen sich durch Kubernetes erweitern. Zu diesem Zweck haben wir entwickelt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/kafka-operator\">den Open Source-Kafka-Operator<\/a><\/noindex> und ein Tool namens <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/supertubes\/overview\/\">Supertubes<\/a><\/noindex>. Diese erm\u00f6glichen es, Kafka in Kubernetes zu betreiben und ihre verschiedenen Funktionen zu nutzen, wie z.B. die feine Abstimmung der Broker-Konfiguration, das Scaling basierend auf Metriken mit Rebalancing, Rack-Awareness, \u201esanftes\u201c <i>(graceful)<\/i> Rollout von Updates usw.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p>Testen Sie Supertubes in Ihrem Cluster:<\/p>\n<pre><code class=\"bash\">curl https:\/\/getsupertubes.sh | sh und supertubes install -a --no-democluster --kubeconfig<\/code><\/pre>\n<p>\nOder wenden Sie sich an <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/supertubes\/cli\/reference\/\">Dokumentation<\/a><\/noindex>. Sie k\u00f6nnen auch mehr \u00fcber einige Funktionen von Kafka lesen, deren Nutzung durch Supertubes und den Kafka-Operator automatisiert ist. Dar\u00fcber haben wir bereits in unserem Blog geschrieben:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-operator\/\">Oh nein! Schon wieder ein Kafka-Operator f\u00fcr Kubernetes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-alert\/\">\u00dcberwachen und Betreiben von Kafka basierend auf Prometheus-Metriken<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-rack-awareness\/\">Kafka-Rack-Awareness in Kubernetes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-on-istio-performance\/\">Apache Kafka \u00fcber Istio - Benchmark<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-topic-user-management\/\">Benutzerauthentifizierte und zugriffskontrollierte Cluster mit dem Kafka-Operator<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-rolling-upgrade\/\">Rolling Upgrade von Kafka und dynamische Konfiguration in Kubernetes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-envoy-protocol-filter\/\">Envoy-Protokollfilter f\u00fcr Kafka, gemeshte<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/blockquote>\n<p>\nWenn Sie sich entscheiden, einen Kafka-Cluster in Kubernetes bereitzustellen, werden Sie wahrscheinlich auf das Problem sto\u00dfen, die optimale Gr\u00f6\u00dfe der zugrunde liegenden Infrastruktur zu bestimmen und die Kafka-Konfiguration fein abzustimmen, um die Anforderungen an die Durchsatzkapazit\u00e4t zu erf\u00fcllen. Die maximale Leistung jedes Brokers wird durch die Leistungsf\u00e4higkeit der Komponenten der zugrunde liegenden Infrastruktur bestimmt, wie z.B. RAM, CPU, Datentransferrate, Netzwerkbandbreite usw.<\/p>\n<p>Idealerweise sollte die Broker-Konfiguration so beschaffen sein, dass alle Infrastrukturkomponenten ihre maximalen M\u00f6glichkeiten voll aussch\u00f6pfen. In der Realit\u00e4t gestaltet sich eine solche Einrichtung jedoch als ziemlich komplex. Wahrscheinlicher ist es, dass die Benutzer die Broker-Konfiguration so anpassen, dass die Nutzung eines oder zweier Komponenten (Festplatte, Speicher oder Prozessor) maximiert wird. Im Allgemeinen zeigt ein Broker die maximale Leistung, wenn seine Konfiguration es erlaubt, die langsamste Komponente \"voll auszureizen\". So k\u00f6nnen wir einen groben \u00dcberblick \u00fcber die Last bekommen, die ein Broker bew\u00e4ltigen kann.<\/p>\n<p>Theoretisch k\u00f6nnen wir auch die Anzahl der Broker absch\u00e4tzen, die erforderlich sind, um mit einer bestimmten Last zu arbeiten. In der Praxis gibt es jedoch so viele Konfigurationsm\u00f6glichkeiten auf den verschiedenen Ebenen, dass es ziemlich schwierig (wenn nicht sogar unm\u00f6glich) ist, die potenzielle Leistung einer bestimmten Konfiguration zu bewerten. Mit anderen Worten, es ist sehr schwierig, eine Konfiguration basierend auf einer bestimmten Leistung zu planen.<\/p>\n<p>F\u00fcr Benutzer von Supertubes verwenden wir normalerweise folgenden Ansatz: Wir beginnen mit einer bestimmten Konfiguration (Infrastruktur + Einstellungen), messen deren Leistung, passen die Broker-Einstellungen an und wiederholen den Prozess erneut. Dies geschieht, bis das Potenzial der langsamsten Infrastrukturkomponente vollst\u00e4ndig ausgesch\u00f6pft ist.<\/p>\n<p>Auf diese Weise erhalten wir eine klarere Vorstellung davon, wie viele Broker der Cluster ben\u00f6tigt, um mit einer bestimmten Last umzugehen (die Anzahl der Broker h\u00e4ngt auch von anderen Faktoren ab, wie der minimalen Anzahl an Nachrichten-Replikaten zur Gew\u00e4hrleistung der Ausfallsicherheit, der Anzahl der Partition-Leiter usw.). Dar\u00fcber hinaus erhalten wir einen \u00dcberblick \u00fcber den Infrastrukturkomponenten, f\u00fcr den eine vertikale Skalierung w\u00fcnschenswert ist.<\/p>\n<p>In diesem Artikel werden die Schritte behandelt, die wir unternehmen, um die langsamsten Komponenten in den Anfangskonfigurationen \"voll auszureizen\" und die Durchsatzrate des Kafka-Clusters zu messen. Eine hochverf\u00fcgbare Konfiguration erfordert mindestens drei laufende Broker (<code>min.insync.replicas=3<\/code>), verteilt auf drei verschiedene Verf\u00fcgbarkeitszonen. F\u00fcr die Konfiguration, Skalierung und \u00dcberwachung der Kubernetes-Infrastruktur nutzen wir unsere eigene Container-Management-Plattform f\u00fcr hybride Clouds \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pipeline\">Pipeline<\/a><\/noindex>. Sie unterst\u00fctzt On-Premise (Bare Metal, VMware) und f\u00fcnf Arten von Clouds (Alibaba, AWS, Azure, Google, Oracle) sowie ihre beliebigen Kombinationen.<\/p>\n<h2>Gedanken zur Infrastruktur und Konfiguration des Kafka-Clusters<\/h2>\n<p>\nF\u00fcr die nachstehenden Beispiele haben wir AWS als Cloud-Anbieter und EKS als Kubernetes-Distribution gew\u00e4hlt. Eine \u00e4hnliche Konfiguration kann mit <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pke\">PKE<\/a><\/noindex> \u2014 der Kubernetes-Distribution von Banzai Cloud, die CNCF-zertifiziert ist.<\/p>\n<h3>Festplatte<\/h3>\n<p>\nAmazon bietet verschiedene <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/UserGuide\/ebs-volume-types.html\">EBS-Volumentypen<\/a><\/noindex>. Grundlage <i>gp2<\/i> und <i>io1<\/i> sind SSDs, aber um eine hohe Durchsatzrate zu gew\u00e4hrleisten, <i>gp2<\/i> verbraucht es angesammelte Kredite <i>(I\/O-Credits)<\/i>, weshalb wir den Typ bevorzugten, <i>io1<\/i>, der eine stabile hohe Durchsatzrate bietet.<\/p>\n<h3>Instanztypen<\/h3>\n<p>\nDie Leistung von Kafka h\u00e4ngt stark vom Seiten-Cache des Betriebssystems ab, weshalb wir Instanzen mit ausreichend RAM f\u00fcr Broker (JVM) und Seiten-Cache ben\u00f6tigen. Die Instanz <i>c5.2xlarge<\/i> ist ein guter Start, da sie \u00fcber 16 GB RAM verf\u00fcgt und <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/UserGuide\/ebs-optimized.html\">f\u00fcr die Arbeit mit EBS optimiert ist.<\/a><\/noindex>Ein Nachteil besteht darin, dass sie ihre maximale Leistung nicht l\u00e4nger als 30 Minuten in einem Zeitraum von 24 Stunden aufrechterhalten kann. Wenn die Arbeitslast eine maximale Leistung \u00fcber einen l\u00e4ngeren Zeitraum erfordert, sollten andere Instanztypen in Betracht gezogen werden. Genau das haben wir getan und uns f\u00fcr <i>c5.4xlarge<\/i>entschieden. Sie bietet eine maximale Durchsatzrate von <b>593,75 MB\/s<\/b>. Die maximale Durchsatzrate des EBS-Volumes <i>io1<\/i> liegt \u00fcber der der Instanz <i>c5.4xlarge<\/i>, weshalb das langsamste Element der Infrastruktur offenbar die I\/O-Durchsatzrate dieses Instanztyps ist (was auch durch die Ergebnisse unserer Lasttests best\u00e4tigt werden sollte).<\/p>\n<h3>Netzwerk<\/h3>\n<p>\nDie Netzwerkbandbreite sollte im Vergleich zur Leistung der VM-Instanz und der Festplatte ausreichend gro\u00df sein, andernfalls wird das Netzwerk zum Engpass. In unserem Fall unterst\u00fctzt die Netzwerkschnittstelle <i>c5.4xlarge<\/i> Geschwindigkeiten von bis zu 10 Gbit\/s, was deutlich \u00fcber der I\/O-Durchsatzrate der VM-Instanz liegt.<\/p>\n<h3>Bereitstellung von Brokern<\/h3>\n<p>\nBroker sollten auf dedizierte Knoten in Kubernetes bereitgestellt werden, um Konkurrenz um CPU-, Speicher-, Netzwerk- und Festplattressourcen mit anderen Prozessen zu vermeiden.<\/p>\n<h3>Java-Version<\/h3>\n<p>\nEine logische Wahl ist Java 11, da es mit Docker kompatibel ist, sodass die JVM die verf\u00fcgbaren Prozessoren und den Speicher im Container, in dem der Broker l\u00e4uft, korrekt erkennt. Da die CPU-Grenzen wichtig sind, legt die JVM intern und transparent die Anzahl der GC-Threads und JIT-Compiler-Threads fest. Wir haben das Kafka-Image verwendet <code>banzaicloud\/kafka:2.13-2.4.0<\/code>, das die Version Kafka 2.4.0 (Scala 2.13) auf Java 11 umfasst.<\/p>\n<blockquote><p>Wenn Sie mehr \u00fcber Java\/JVM auf Kubernetes erfahren m\u00f6chten, werfen Sie einen Blick auf unsere folgenden Ver\u00f6ffentlichungen:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/java-resource-limits\/\">Warum meine Java-Anwendung OOMKilled ist<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/java10-container-sizing\/\">Wie man Container f\u00fcr Java 10-Anwendungen richtig dimensioniert<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/blockquote>\n<p><\/p>\n<h3>Broker-Speichereinstellungen<\/h3>\n<p>\nEs gibt zwei Schl\u00fcsselaspekte bei der Konfiguration des Brokerspeichers: Einstellungen f\u00fcr die JVM und f\u00fcr den Kubernetes-Pod. Das Speicherkontingent, das f\u00fcr den Pod festgelegt wurde, sollte gr\u00f6\u00dfer sein als die maximale Heap-Gr\u00f6\u00dfe, damit die JVM gen\u00fcgend Platz f\u00fcr den Java-Metaspeicher hat, der im eigenen Speicher liegt, sowie f\u00fcr den Page-Cache des Betriebssystems, den Kafka aktiv nutzt. In unseren Tests haben wir Kafka-Broker mit den Parametern gestartet <code>-Xmx4G -Xms2G<\/code>, und das Speicherkontingent f\u00fcr den Pod betrug <code>10 Gi<\/code>. Beachten Sie, dass die Speichereinstellungen f\u00fcr die JVM automatisch mit Hilfe von <code>-XX:MaxRAMPercentage<\/code> und <code>-X:MinRAMPercentage<\/code>, basierend auf dem Speicherkontingent f\u00fcr den Pod.<\/p>\n<h3>CPU-Einstellungen des Brokers<\/h3>\n<p>\nIm Allgemeinen kann die Leistung gesteigert werden, indem der Parallelismus durch die Erh\u00f6hung der Anzahl der von Kafka verwendeten Threads maximiert wird. Je mehr Prozessoren f\u00fcr Kafka verf\u00fcgbar sind, desto besser. In unserem Test begannen wir mit einem Limit von 6 Prozessoren und erh\u00f6hten die Anzahl schrittweise (iterativ) auf 15. Au\u00dferdem haben wir <code>num.network.threads=12<\/code> in den Broker-Einstellungen festgelegt, um die Anzahl der Threads zu erh\u00f6hen, die Daten aus dem Netzwerk empfangen und versenden. Als wir feststellten, dass die Follower-Broker die Replikate nicht schnell genug erhalten konnten, erh\u00f6hten wir <code>num.replica.fetchers<\/code> auf 4, um die Geschwindigkeit zu erh\u00f6hen, mit der die Follower-Broker Nachrichten von den Leadern replizierten.<\/p>\n<h3>Lastgenerator<\/h3>\n<p>\nEs sollte sichergestellt werden, dass das Potenzial des gew\u00e4hlten Lastgenerators nicht ersch\u00f6pft ist, bevor der Kafka-Cluster (dessen Benchmark durchgef\u00fchrt wird) die maximale Last erreicht. Mit anderen Worten, eine Vorabbewertung der F\u00e4higkeiten des Lastgenerierungstools ist erforderlich, und es sollten Instanztypen mit ausreichender Anzahl an Prozessoren und Speicher ausgew\u00e4hlt werden. In diesem Fall wird unser Tool mehr Last erzeugen, als der Kafka-Cluster verarbeiten kann. Nach vielen Experimenten haben wir uns f\u00fcr drei Instanzen entschieden <i>c5.4xlarge<\/i>in denen jeweils ein Generator gestartet wurde.<\/p>\n<h2>Benchmarking<\/h2>\n<p>\nDie Leistungsmessung ist ein iterativer Prozess, der folgende Phasen umfasst:<\/p>\n<ul>\n<li> Einrichtung der Infrastruktur (EKS-Cluster, Kafka-Cluster, Lastgenerierungstool sowie Prometheus und Grafana);<\/li>\n<li> Lastgenerierung \u00fcber einen bestimmten Zeitraum, um zuf\u00e4llige Abweichungen in den gesammelten Leistungskennzahlen herauszufiltern;<\/li>\n<li> Anpassung der Infrastruktur und der Broker-Konfiguration basierend auf den beobachteten Leistungskennzahlen;<\/li>\n<li> Wiederholung des Prozesses, bis das erforderliche Durchsatzlevel des Kafka-Clusters erreicht ist. Dabei sollte es stabil reproduzierbar sein und minimale Variationen im Durchsatz zeigen.<\/li>\n<\/ul>\n<p>\nIm folgenden Abschnitt werden die Schritte beschrieben, die im Verlauf des Benchmarks des Testclusters ausgef\u00fchrt wurden.<\/p>\n<h3>Werkzeuge<\/h3>\n<p>\nF\u00fcr das schnelle Deployment der Grundkonfiguration, die Lastgenerierung und die Leistungsmessung wurden folgende Tools verwendet:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/pipeline\/overview\/\">Banzai Cloud Pipeline<\/a><\/noindex> zur Organisation des EKS-Clusters von Amazon mit <noindex><a rel=\"nofollow\" href=\"https:\/\/prometheus.io\/\">Prometheus<\/a><\/noindex> (zur Erfassung der Kafka- und Infrastrukturmetriken) und <noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/\">Grafana<\/a><\/noindex> (zur Visualisierung dieser Metriken). Wir haben <b>integrierte<\/b> in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pipeline\">Pipeline<\/a><\/noindex> Dienste genutzt, die f\u00f6derales Monitoring, zentrale Protokollsammlung, Schwachstellenscans, Wiederherstellung nach Ausf\u00e4llen, Unternehmenssicherheit und vieles mehr bieten.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jamiealquiza\/sangrenel\">Sangrenel<\/a><\/noindex> ist ein Tool f\u00fcr Lasttests des Kafka-Clusters.<\/li>\n<li> Grafana-Dashboards zur Visualisierung der Kafka- und Infrastrukturmetriken: <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\u00fcr die einfachste Konfiguration eines Kafka-Clusters in Kubernetes. Zookeeper, Kafka-Operator, Envoy und viele andere Komponenten sind installiert und ordnungsgem\u00e4\u00df konfiguriert, um ein produktionsbereites Kafka-Cluster in Kubernetes zu betreiben.\n<ul>\n<li> Zur Installation <i>supertubes CLI<\/i> nutzen Sie die angegebenen Anweisungen <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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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>\nBereiten Sie das EKS-Cluster mit dedizierten Arbeitsknoten <i>c5.4xlarge<\/i> in verschiedenen Verf\u00fcgbarkeitszonen f\u00fcr die Pods mit Kafka-Brokern sowie f\u00fcr dedizierte Knoten f\u00fcr den Lastgenerator und die \u00dcberwachungsinfrastruktur.<\/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>\nSobald das EKS-Cluster l\u00e4uft, aktivieren Sie seinen integrierten <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/pipeline\/features\/integrated-services\/\">\u00dcberwachungsdienst<\/a><\/noindex> \u2014 es wird Prometheus und Grafana im Cluster bereitstellen.<\/p>\n<h3>Systemkomponenten von Kafka<\/h3>\n<p>\nInstallieren Sie die Systemkomponenten von Kafka (Zookeeper, kafka-operator) in EKS mit 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>\nStandardm\u00e4\u00dfig verwendet EKS EBS-Typvolumes <i>gp2<\/i>, daher muss eine separate Speicherklasse auf Basis der Volumes <i>io1<\/i> f\u00fcr das Kafka-Cluster erstellt werden:<\/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>\nSetzen Sie den Parameter f\u00fcr Broker <code>min.insync.replicas=3<\/code> und setzen Sie die Pods des Brokers auf Knoten in drei verschiedenen Verf\u00fcgbarkeitszonen ein:<\/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>Themen<\/h3>\n<p>\nWir haben gleichzeitig drei Instanzen des Lastgenerators gestartet. Jede davon schreibt in ihr eigenes Thema, das hei\u00dft, insgesamt ben\u00f6tigen wir drei Themen:<\/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\u00fcr jedes Thema betr\u00e4gt der Replikationsfaktor 3 \u2014 der minimal empfohlene Wert f\u00fcr hochverf\u00fcgbare Produktionssysteme.<\/p>\n<h3>Lastgenerator<\/h3>\n<p>\nWir haben drei Instanzen des Lastgenerators gestartet (jeder schrieb in ein separates Topic). F\u00fcr die Pods des Lastgenerators ist es notwendig, eine Node Affinity zu definieren, damit sie nur auf den daf\u00fcr vorgesehenen Knoten geplant werden:<\/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>\nEinige Punkte, die beachtet werden sollten:<\/p>\n<ul>\n<li> Der Lasttestgenerator erzeugt Nachrichten mit einer Gr\u00f6\u00dfe von 512 Byte und ver\u00f6ffentlicht diese in Kafka in Paketen von 500 Nachrichten.<\/li>\n<li> Durch das Argument <code>-required-acks=all<\/code> wird die Ver\u00f6ffentlichung als erfolgreich angesehen, wenn alle synchronisierten Replikate der Nachricht von den Kafka-Brokern empfangen und best\u00e4tigt wurden. Das bedeutet, dass wir im Benchmark nicht nur die Geschwindigkeit der Leader, die die Nachrichten empfangen, sondern auch die ihrer Nachfolger, die die Nachrichten replizieren, gemessen haben. Ziel dieses Tests ist es nicht, die Geschwindigkeit der Verbraucher <i>(consumers)<\/i> sofort nach dem Empfang der Nachrichten zu bewerten, die sich noch im Seiten-Cache des Betriebssystems befinden, und diese mit der Geschwindigkeit des Lesens von Nachrichten auf der Festplatte zu vergleichen.<\/li>\n<li> Der Lastgenerator startet parallel 20 Worker (<code>-workers=20<\/code>). Jeder Worker enth\u00e4lt 5 Producer, die sich die Verbindung des Workers zum Kafka-Cluster teilen. Insgesamt gibt es also 100 Producer, die alle Nachrichten an den Kafka-Cluster senden.<\/li>\n<\/ul>\n<p><\/p>\n<h3>\u00dcberwachung des Zustands des Clusters<\/h3>\n<p>\nW\u00e4hrend der Lasttests des Kafka-Clusters haben wir auch dessen Gesundheit \u00fcberwacht, um sicherzustellen, dass es keine Neustarts von Pods, unsynchronisierte Replikate und maximale Durchsatzraten mit minimalen Schwankungen gab:<\/p>\n<ul>\n<li> Der Lastgenerator protokolliert Standardstatistiken \u00fcber die Anzahl der ver\u00f6ffentlichten Nachrichten und den Fehlerraten. Der Fehleranteil sollte bei <code>0,00%<\/code>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/linkedin\/cruise-control\">Cruise Control<\/a><\/noindex>, der von einem kafka-operator bereitgestellt wird, bietet ein \u00dcberwachungsdashboard, auf dem wir auch den Zustand des Clusters beobachten k\u00f6nnen. Um dieses Dashboard anzuzeigen, f\u00fchren Sie aus:\n<pre><code class=\"bash\">supertubes cluster cruisecontrol show -n kafka --kubeconfig<\/code><\/pre>\n<\/li>\n<li> Der ISR-Wert <i>(Anzahl der \u201ein-sync\u201c Replikate)<\/i> ist gleich 0.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Die Messergebnisse<\/h2>\n<p><\/p>\n<h3>3 Broker, Nachrichtengr\u00f6\u00dfe \u2013 512 Byte<\/h3>\n<p>\nMit Partitionen, die gleichm\u00e4\u00dfig auf drei Broker verteilt sind, konnten wir eine Leistung erzielen <i>~500 MB\/s (ungef\u00e4hr 990.000 Nachrichten pro Sekunde) erreichen.<\/i>:<\/p>\n<p><img decoding=\"async\" alt=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein Kafka-Cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/9b708fa5ce809b0d059cba9f5edfbb2f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer Speicherverbrauch der JVM \u00fcberstieg nicht 2 GB:<\/p>\n<p><img decoding=\"async\" alt=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein Kafka-Cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/94baa1b689ae854693fb7cc4ed6e105e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer Festplattendurchsatz erreichte die maximale I\/O-Durchsatzrate des Knotens auf allen drei Instanzen, auf denen die Broker betrieben wurden:<\/p>\n<p><img decoding=\"async\" alt=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein Kafka-Cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/e7e9fd021a2cdc71992ce672363a78ec.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAus den Speicherverbrauchsdaten der Knoten geht hervor, dass das Systempuffern und Caching etwa ~10-15 GB beansprucht haben:<\/p>\n<p><img decoding=\"async\" alt=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein Kafka-Cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/48b992cc73a968b3d3b1442f96562c4e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>3 Broker, Nachrichtengr\u00f6\u00dfe \u2013 100 Byte<\/h3>\n<p>\nMit der Verringerung der Nachrichtengr\u00f6\u00dfe f\u00e4llt der Durchsatz um etwa 15-20 %: Das ist die Folge der Zeit, die f\u00fcr die Verarbeitung jeder Nachricht aufgewendet wird. Au\u00dferdem hat sich die CPU-Auslastung fast verdoppelt.<\/p>\n<p><img decoding=\"async\" alt=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein Kafka-Cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/c08244457bf4dbfadf52838d4ea2969e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDa die Broker-Knoten weiterhin ungenutzte Kerne haben, kann die Leistung durch eine Anpassung der Kafka-Konfiguration verbessert werden. Dies ist eine anspruchsvolle Aufgabe, daher ist es besser, die Durchsatzrate durch die Verarbeitung gr\u00f6\u00dferer Nachrichten zu steigern.<\/p>\n<h3>4 Broker, Nachrichtengr\u00f6\u00dfe \u2013 512 Byte<\/h3>\n<p>\nDie Leistung des Kafka-Clusters kann leicht gesteigert werden, indem neue Broker hinzugef\u00fcgt und die Partitionen im Gleichgewicht gehalten werden (dies sorgt f\u00fcr eine gleichm\u00e4\u00dfige Lastverteilung zwischen den Brokern). In unserem Fall stieg die Clusterbandbreite nach der Hinzuf\u00fcgung eines Brokers auf <i>~580 MB\/s (~1,1 Millionen Nachrichten pro Sekunde)<\/i>. Das Wachstum war geringer als erwartet: Dies erkl\u00e4rt sich haupts\u00e4chlich durch das Ungleichgewicht der Partitionen (nicht alle Broker arbeiten am Limit ihrer M\u00f6glichkeiten).<\/p>\n<p><img decoding=\"async\" alt=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein Kafka-Cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/dae5de3b14be212c679f3627a3b77d7b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer Speicherverbrauch der JVM-Maschine liegt weiterhin unter 2 GB:<\/p>\n<p><img decoding=\"async\" alt=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein Kafka-Cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/4ba0c4b59bfe72bcb0d2f22056c47d79.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDie Arbeit der Broker wurde durch das Ungleichgewicht der Partitionen beeintr\u00e4chtigt:<\/p>\n<p><img decoding=\"async\" alt=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein 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=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr ein Kafka-Cluster in Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/191d6d97b32b2128c5cfd3914171de15.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Das DBMS Tarantool ist ein attraktives, zukunftstr\u00e4chtiges Produkt zur Erstellung von hochbelasteten Anwendungen.<\/h2>\n<p>\nDer oben dargelegte iterative Ansatz kann erweitert werden, um komplexere Szenarien abzudecken, die Hunderte von Consumern, Repartitionierung, Rollouts, Pod-Neustarts usw. umfassen. All dies erm\u00f6glicht es uns, die Grenzen der Leistungsf\u00e4higkeit des Kafka-Clusters unter verschiedenen Bedingungen zu bewerten, Engp\u00e4sse in seinem Betrieb zu identifizieren und Wege zu finden, diese zu umgehen.<\/p>\n<p>Wir haben Supertubes entwickelt, um das schnelle und einfache Bereitstellen des Clusters, dessen Konfiguration, das Hinzuf\u00fcgen\/Entfernen von Brokern und Themen, das Reagieren auf Alarme und die Gew\u00e4hrleistung des reibungslosen Betriebs von Kafka in Kubernetes insgesamt zu erm\u00f6glichen. Unser Ziel ist es, Ihnen zu helfen, sich auf die Hauptaufgabe (das \u201eErzeugen\u201c und \u201eVerbrauchen\u201c von Kafka-Nachrichten) zu konzentrieren, w\u00e4hrend Supertubes und der Kafka-Operator die gesamte schwere Arbeit \u00fcbernehmen.<\/p>\n<p>Wenn Sie an den Technologien und Open Source-Projekten von Banzai Cloud interessiert sind, abonnieren Sie das Unternehmen auf <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> oder <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/BanzaiCloud\">Twitter<\/a><\/noindex>.<\/p>\n<h2>P.S. vom \u00dcbersetzer<\/h2>\n<p>\nLesen Sie auch in unserem Blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/480722\/\">Eine Geschichte mit dem Redis-Operator in K8s und ein kurzer \u00dcberblick \u00fcber Tools zur Datenanalyse dieser Datenbank.<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/450662\/\">Komplexe Migration von RabbitMQ in Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/329224\/\">zetcd von CoreOS: ZooKeeper ersetzen durch\u2026 etcd-Speicher<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Quelle: <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.1.1 - 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\/de\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/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\udd47Bestimmen Sie die geeignete Clustergr\u00f6\u00dfe f\u00fcr Kafka in Kubernetes | ProHoster","description":"Anm. d. \u00dcbers.: In diesem Artikel teilt Banzai Cloud ein Beispiel f\u00fcr die Nutzung ihrer speziellen Werkzeuge, um die Betriebsf\u00fchrung von Kafka im Rahmen von Kubernetes zu erleichtern.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/71213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=71213"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/71213\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/71214"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=71213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=71213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=71213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}