{"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 das Kafka-Cluster in Kubernetes.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Hinweis.<\/b>: In diesem Artikel teilt das Unternehmen Banzai Cloud ein Beispiel f\u00fcr die Verwendung seiner speziellen Tools zur Vereinfachung des Betriebs von Kafka innerhalb von Kubernetes. Die enthaltenen Anleitungen zeigen, wie man die optimale Gr\u00f6\u00dfe der Infrastruktur ermitteln und Kafka selbst konfigurieren kann, um die erforderliche Durchsatzrate zu erreichen.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr das 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 leistungsstarker Echtzeitsysteme. Ihre beeindruckenden F\u00e4higkeiten k\u00f6nnen durch Kubernetes erweitert werden. Daf\u00fcr haben wir <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 die Ausf\u00fchrung von Kafka in Kubernetes und die Nutzung ihrer verschiedenen Funktionen, wie die feine Konfiguration der Broker-Einstellungen, die skalierbare Anpassung basierend auf Metriken mit Rebalancing, Rack Awareness, sanfte <i>(graceful)<\/i> Rollouts von Updates usw.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p>Probieren Sie Supertubes in Ihrem Cluster aus:<\/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>. Au\u00dferdem k\u00f6nnen Sie mehr \u00fcber einige M\u00f6glichkeiten von Kafka lesen, die durch Supertubes und den Kafka-Operator automatisiert sind. 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-Bewusstsein auf Kubernetes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-on-istio-performance\/\">Apache Kafka \u00fcber Istio ausf\u00fchren \u2014 Benchmark<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-topic-user-management\/\">Benutzer-authentifizierte 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 auf Kubernetes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-envoy-protocol-filter\/\">Envoy-Protokollfilter f\u00fcr Kafka, vernetzt<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/blockquote>\n<p>\nWenn Sie einen Kafka-Cluster in Kubernetes bereitstellen m\u00f6chten, werden Sie sicherlich auf das Problem sto\u00dfen, die optimale Gr\u00f6\u00dfe der zugrunde liegenden Infrastruktur zu bestimmen und die Konfiguration von Kafka fein abzustimmen, um den Leistungsanforderungen gerecht zu werden. Die maximale Leistung jedes Brokers wird durch die Leistung der zugrunde liegenden Infrastrukturkomponenten wie Speicher, Prozessor, Festplattengeschwindigkeit, Netzwerkbandbreite usw. bestimmt.<\/p>\n<p>Idealerweise sollte die Konfiguration des Brokers so gestaltet sein, dass alle Infrastrukturelemente ihre maximale Leistungsf\u00e4higkeit entfalten. In der Praxis gestaltet sich eine solche Einstellung jedoch als recht komplex. Wahrscheinlicher ist, dass Benutzer die Broker-Konfiguration so anpassen, dass sie die Leistung eines oder zweier Komponenten (Festplatte, Speicher oder Prozessor) maximiert. Generell zeigt der Broker die beste Leistung, wenn seine Konfiguration es erm\u00f6glicht, das langsamste Element vollst\u00e4ndig auszureizen. So erhalten wir eine ungef\u00e4hre Vorstellung von der Last, die ein Broker bew\u00e4ltigen kann.<\/p>\n<p>Theoretisch k\u00f6nnen wir auch die Anzahl der Broker absch\u00e4tzen, die erforderlich ist, um eine bestimmte Last zu bew\u00e4ltigen. In der Praxis gibt es jedoch so viele Anpassungsm\u00f6glichkeiten auf verschiedenen Ebenen, dass es \u00e4u\u00dferst schwierig (wenn nicht gar unm\u00f6glich) ist, die potenzielle Leistung einer bestimmten Konfiguration abzusch\u00e4tzen. Mit anderen Worten, es ist sehr schwierig, eine Konfiguration zu planen, die von einer bestimmten Leistungsanforderung ausgeht.<\/p>\n<p>F\u00fcr Supertubes-Nutzer verfolgen wir in der Regel den folgenden Ansatz: Wir beginnen mit einer bestimmten Konfiguration (Infrastruktur + Einstellungen), messen dann die Leistung, passen die Broker-Einstellungen an und wiederholen den Prozess erneut. Dies geschieht, bis das Potenzial des langsamsten Komponenten der Infrastruktur vollst\u00e4ndig aussch\u00f6pft ist.<\/p>\n<p>Auf diese Weise erhalten wir ein klareres Bild 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 von Nachrichtenreplikaten zur Gew\u00e4hrleistung der Stabilit\u00e4t, der Anzahl der Partition-Leiter usw.). Dar\u00fcber hinaus erhalten wir Hinweise darauf, welches infrastrukturelle Komponent vorzugsweise vertikal skaliert werden sollte.<\/p>\n<p>In diesem Artikel geht es um die Schritte, die wir unternehmen, um das Maximum aus den langsamsten Komponenten in den Anfangskonfigurationen herauszuholen und die Durchsatzkapazit\u00e4t des Kafka-Clusters zu messen. Eine hochverf\u00fcgbare Konfiguration erfordert mindestens drei funktionierende Broker.<code>min.insync.replicas=3<\/code>), verteilt auf drei verschiedene Verf\u00fcgbarkeitszonen. F\u00fcr die Einrichtung, Skalierung und \u00dcberwachung der Kubernetes-Infrastruktur verwenden 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 Cloud-Typen (Alibaba, AWS, Azure, Google, Oracle) sowie deren beliebige Kombinationen.<\/p>\n<h2>\u00dcberlegungen zur Infrastruktur und Konfiguration des Kafka-Clusters<\/h2>\n<p>\nF\u00fcr die nachfolgenden Beispiele haben wir AWS als Cloud-Dienstanbieter und EKS als Kubernetes-Distribution gew\u00e4hlt. Eine \u00e4hnliche Konfiguration kann auch mit <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pke\">PKE<\/a><\/noindex> \u2014 der Kubernetes-Distribution von Banzai Cloud, die von der 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-Volumen<\/a><\/noindex>. Die Grundlage der <i>gp2<\/i> und <i>io1<\/i> sind SSD-Laufwerke, jedoch ben\u00f6tigt f\u00fcr hohe Durchsatzraten <i>gp2<\/i> verbraucht angesammelte Credits <i>(I\/O-Credits)<\/i>, weshalb wir den Typ bevorzugt haben, der eine stabile hohe Durchsatzrate bietet. <i>io1<\/i>Instanztypen<\/p>\n<h3>Die Leistung von Kafka h\u00e4ngt stark vom Seiten-Cache des Betriebssystems ab, daher ben\u00f6tigen wir Instanzen mit ausreichendem Arbeitsspeicher f\u00fcr die Broker (JVM) und den Seiten-Cache. Die Instanz<\/h3>\n<p>\nc5.2xlarge <i>c5.2xlarge<\/i> \u2014 ein guter Anfang, da er \u00fcber 16 GB Arbeitsspeicher 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 ist, dass er maximale Leistung f\u00fcr nicht l\u00e4nger als 30 Minuten alle 24 Stunden bereitstellen kann. Wenn die Arbeitslast eine maximale Leistung \u00fcber einen l\u00e4ngeren Zeitraum erfordert, sollte man sich andere Instanztypen ansehen. Genau das haben wir getan und uns f\u00fcr <i>c5.4xlarge<\/i>entschieden. Er bietet eine maximale Durchsatzrate von <b>593,75 MB\/s<\/b>. Der maximale Durchsatz der EBS-Volumes <i>io1<\/i> ist h\u00f6her als der der Instanz <i>c5.4xlarge<\/i>, weshalb das langsamste Element der Infrastruktur anscheinend 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 hoch sein, da sonst das Netzwerk zum Engpass wird. In unserem Fall unterst\u00fctzt das Netzwerkinterface <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 Broker<\/h3>\n<p>\nBroker m\u00fcssen auf dedizierte Knoten (in Kubernetes geplant) bereitgestellt werden, um Konkurrenz mit anderen Prozessen um CPU-, Speicher-, Netzwerk- und Festplattressourcen zu vermeiden.<\/p>\n<h3>Java-Version<\/h3>\n<p>\nDie logische Wahl ist Java 11, da sie mit Docker kompatibel ist und die JVM die Prozessoren und den Speicher, die dem Container zur Verf\u00fcgung stehen, korrekt erkennt, in dem der Broker ausgef\u00fchrt wird. Da bekannt ist, dass die CPU-Grenzen wichtig sind, stellt die JVM intern und transparent die Anzahl der GC-Threads und der JIT-Compiler-Threads ein. Wir haben das Kafka-Image verwendet <code>banzaicloud\/kafka:2.13-2.4.0<\/code>, das die Kafka-Version 2.4.0 (Scala 2.13) auf Java 11 enth\u00e4lt.<\/p>\n<blockquote><p>Wenn Sie mehr \u00fcber Java\/JVM auf Kubernetes erfahren m\u00f6chten, beachten Sie bitte unsere folgenden Publikationen:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/java-resource-limits\/\">Why my Java application is OOMKilled<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/java10-container-sizing\/\">How to correctly size containers for Java 10 applications<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/blockquote>\n<p><\/p>\n<h3>Broker-Speichereinstellungen<\/h3>\n<p>\nEs gibt zwei Schl\u00fcsselaspekte bei der Konfiguration des Brokerspeichers: die Einstellungen f\u00fcr die JVM und f\u00fcr den Kubernetes-Pod. Das f\u00fcr den Pod festgelegte Speichervolumen muss gr\u00f6\u00dfer sein als die maximale Heap-Gr\u00f6\u00dfe, damit die JVM Platz f\u00fcr den Java-Metaspeicher hat, der im eigenen Speicher liegt, und f\u00fcr den Seiten-Cache des Betriebssystems, den Kafka aktiv nutzt. In unseren Tests haben wir Kafka-Broker mit den Parametern <code>-Xmx4G -Xms2G<\/code>, w\u00e4hrend das Speicherv limit f\u00fcr den Pod bei <code>10 Gi<\/code>. Beachten Sie, dass die JVM-Speichereinstellungen automatisch mit Hilfe von <code>-XX:MaxRAMPercentage<\/code> und <code>-X:MinRAMPercentage<\/code>, basierend auf dem Speicherkontingent f\u00fcr den Pod.<\/p>\n<h3>Prozessor-Einstellungen des Brokers<\/h3>\n<p>\nAllgemein kann die Leistung durch Erh\u00f6hung des Parallelismus verbessert werden, indem die Anzahl der von Kafka verwendeten Threads erh\u00f6ht wird. Je mehr Prozessoren Kafka zur Verf\u00fcgung stehen, desto besser. In unserem Test begannen wir mit einem Limit von 6 Prozessoren und erh\u00f6hten die Anzahl schrittweise (in Iterationen) auf 15. Dar\u00fcber hinaus haben wir <code>num.network.threads=12<\/code> in den Broker-Einstellungen, um die Anzahl der Streams zu erh\u00f6hen, die Daten aus dem Netzwerk empfangen und diese weitergeben. Nachdem festgestellt wurde, dass die follower-Broker die Replikate nicht schnell genug erhalten k\u00f6nnen, haben wir <code>num.replica.fetchers<\/code> auf 4 erh\u00f6ht, um die Geschwindigkeit zu steigern, mit der die follower-Broker Nachrichten von den Leadern replizieren.<\/p>\n<h3>Lastgenerierungstool<\/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) seine maximale Last erreicht. Mit anderen Worten, eine Vorabanalyse der M\u00f6glichkeiten des Lastgenerierungstools ist erforderlich, ebenso wie die Auswahl geeigneter Instanztypen mit ausreichender Anzahl an Prozessoren und Speicher. In diesem Fall wird unser Tool mehr Last erzeugen, als der Kafka-Cluster verarbeiten kann. Nach mehreren Experimenten haben wir uns f\u00fcr drei Instanzen entschieden <i>c5.4xlarge<\/i>auf denen jeweils der Generator l\u00e4uft.<\/p>\n<h2>Benchmarking<\/h2>\n<p>\nDie Leistungsbewertung ist ein iterativer Prozess, der die folgenden Phasen umfasst:<\/p>\n<ul>\n<li> Infrastruktur (EKS-Cluster, Kafka-Cluster, Lastgenerierungstool sowie Prometheus und Grafana) einrichten;<\/li>\n<li> Lastgenerierung \u00fcber einen bestimmten Zeitraum, um zuf\u00e4llige Abweichungen in den gesammelten Leistungskennzahlen herauszufiltern;<\/li>\n<li> Anpassung der Infrastruktur und Broker-Konfiguration basierend auf den beobachteten Leistungskennzahlen;<\/li>\n<li> Wiederholung des Prozesses, bis das erforderliche Durchsatzniveau des Kafka-Clusters erreicht ist. Dieser sollte dabei stabil reproduzierbar sein und minimale Durchsatzvariationen aufweisen.<\/li>\n<\/ul>\n<p>\nIm folgenden Abschnitt werden die Schritte beschrieben, die w\u00e4hrend des Benchmarkings des Testclusters durchgef\u00fchrt wurden.<\/p>\n<h3>Werkzeuge<\/h3>\n<p>\nF\u00fcr die schnelle Bereitstellung der Basis Konfiguration, Lastgenerierung und 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 von Kafka- und Infrastrukturmetriken) sowie <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, die f\u00f6derierte \u00dcberwachung, zentrale Protokollsammlung, Schwachstellenscanning, 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> \u2014 ein Tool zum Lasttest von Kafka-Clustern.<\/li>\n<li> Grafana-Dashboards zur Visualisierung von Kafka-Metriken und Infrastruktur: <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 maximal einfache Einrichtung 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> befolgen 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 das 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 ein EKS-Cluster mit dedizierten Arbeitsknoten <i>c5.4xlarge<\/i> in verschiedenen Verf\u00fcgbarkeitszonen f\u00fcr Pods mit Kafka-Brokern sowie 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 dessen integrierten <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/pipeline\/features\/integrated-services\/\">\u00dcberwachungsdienst<\/a><\/noindex> \u2014 dieser 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 werden in EKS EBS-Volumes vom Typ verwendet <i>gp2<\/i>, daher ist es notwendig, eine separate Speicherklasse auf Basis von Volumes zu erstellen <i>io1<\/i> f\u00fcr das 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>\nSetzen Sie den Parameter f\u00fcr Broker <code>min.insync.replicas=3<\/code> und rollen Sie die Broker-Pods auf Knoten in drei verschiedenen Verf\u00fcgbarkeitszonen aus:<\/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 parallel drei Instanzen des Lastgenerators gestartet. Jede von ihnen schreibt in ihr eigenes Thema, das bedeutet, 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 Topic betr\u00e4gt der Replikationsfaktor 3 \u2013 der minimal empfohlene Wert f\u00fcr hochverf\u00fcgbare Produktionseinrichtungen.<\/p>\n<h3>Lastgenerierungstool<\/h3>\n<p>\nWir haben drei Instanzen des Lastgenerators gestartet (jede schrieb in ein separates Thema). F\u00fcr die Pods des Lastgenerators ist es notwendig, eine Node-Affinit\u00e4t festzulegen, damit sie nur auf f\u00fcr sie 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, auf die Sie achten sollten:<\/p>\n<ul>\n<li> Der Lastgenerator erzeugt Nachrichten mit einer L\u00e4nge von 512 Byte und ver\u00f6ffentlicht diese in Kafka in Stapeln von 500 Nachrichten.<\/li>\n<li> Mit dem Argument <code>-required-acks=all<\/code> Eine Ver\u00f6ffentlichung wird 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 f\u00fchrenden Broker bei der Empfang von Nachrichten gemessen haben, sondern auch die ihrer Nachfolger, die die Nachrichten replizieren. Dieser Test bewertet nicht die Lesegeschwindigkeit durch die Verbraucher. <i>(Verbraucher)<\/i> von neu angenommenen Nachrichten, die sich derzeit noch im Seiten-Cache des Betriebssystems befinden, und vergleicht diese mit der Lesegeschwindigkeit von Nachrichten, die auf der Festplatte gespeichert sind.<\/li>\n<li> Der Lastgenerator startet gleichzeitig 20 Worker (<code>-workers=20<\/code>). Jeder Worker enth\u00e4lt 5 Producer, die sich die Verbindung des Workers zum Kafka-Cluster teilen. Insgesamt z\u00e4hlt jeder Generator 100 Producer, die alle Nachrichten an den Kafka-Cluster senden.<\/li>\n<\/ul>\n<p><\/p>\n<h3>\u00dcberwachung des Clusterzustands<\/h3>\n<p>\nW\u00e4hrend des Lasttests des Kafka-Clusters haben wir auch dessen Gesundheit \u00fcberwacht, um sicherzustellen, dass keine Pods neu gestartet werden, keine replizierten Instanzen desynchronisiert sind und die maximale Durchsatzkapazit\u00e4t mit minimalen Schwankungen \u00fcberwacht wurde:<\/p>\n<ul>\n<li> Der Lastgenerator gibt eine Standardstatistik \u00fcber die Anzahl der ver\u00f6ffentlichten Nachrichten und den Fehlerstatus aus. 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>, bereitgestellt durch den kafka-operator, bietet ein \u00dcberwachungs-Dashboard, 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> ISR-Level <i>(Anzahl der \"in-sync\" Replikate)<\/i> Shrink und Expansion sind gleich 0.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Messresultate<\/h2>\n<p><\/p>\n<h3>3 Broker, Nachrichtenformat \u2014 512 Byte<\/h3>\n<p>\nMit Partitionen, die gleichm\u00e4\u00dfig auf drei Broker verteilt sind, konnten wir eine Leistung von <i>~500 MB\/s (ca. 990.000 Nachrichten pro Sekunde) erreichen.<\/i>:<\/p>\n<p><img decoding=\"async\" alt=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr das 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 das 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 das 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-Virtual-Machine \u00fcberschritt nicht 2 GB:<\/p>\n<p><img decoding=\"async\" alt=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr das 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 das 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 das Kafka-Cluster in Kubernetes.\" src=\"\/wp-content\/uploads\/2020\/02\/94baa1b689ae854693fb7cc4ed6e105e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDie Festplattendurchsatzrate erreichte die maximale I\/O-Durchsatzrate des Knotens auf allen drei Instanzen, auf denen die Broker liefen:<\/p>\n<p><img decoding=\"async\" alt=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr das 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 das 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 das Kafka-Cluster in Kubernetes.\" src=\"\/wp-content\/uploads\/2020\/02\/e7e9fd021a2cdc71992ce672363a78ec.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAus den Speicherbenutzungsdaten der Knoten geht hervor, dass die Systempufferung und das Caching etwa 10-15 GB einnahmen:<\/p>\n<p><img decoding=\"async\" alt=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr das 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 das 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 das 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, Nachrichtenformat \u2014 100 Byte<\/h3>\n<p>\nMit der Verringerung der Nachrichtengr\u00f6\u00dfe sinkt die Durchsatzleistung um etwa 15-20 %: Dies wird durch die Zeit beeinflusst, die f\u00fcr die Verarbeitung jeder Nachricht ben\u00f6tigt wird. Dar\u00fcber hinaus ist die CPU-Auslastung fast doppelt so hoch.<\/p>\n<p><img decoding=\"async\" alt=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr das 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 das 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 das Kafka-Cluster in Kubernetes.\" src=\"\/wp-content\/uploads\/2020\/02\/c08244457bf4dbfadf52838d4ea2969e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDa an den Broker-Knoten weiterhin ungenutzte Kerne vorhanden sind, kann die Leistung durch eine Anpassung der Kafka-Konfiguration verbessert werden. Dies ist eine komplexe Aufgabe, daher ist es besser, mit gr\u00f6\u00dferen Nachrichten zu arbeiten, um die Durchsatzleistung zu steigern.<\/p>\n<h3>4 Broker, Nachrichtenformat \u2013 512 Byte<\/h3>\n<p>\nDie Leistung des Kafka-Clusters kann leicht erh\u00f6ht werden, indem einfach 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 Durchsatzkapazit\u00e4t des Clusters nach der Hinzuf\u00fcgung eines Brokers auf <i>~580 MB\/s (~1,1 Millionen Nachrichten pro Sekunde)<\/i>. Das Wachstum war weniger als erwartet: Dies erkl\u00e4rt sich haupts\u00e4chlich aus dem Ungleichgewicht der Partitionen (nicht alle Broker arbeiten an der Grenze ihrer M\u00f6glichkeiten).<\/p>\n<p><img decoding=\"async\" alt=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr das 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 das 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 das 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 das Kafka-Cluster in Kubernetes.\" src=\"\/wp-content\/uploads\/2020\/02\/dae5de3b14be212c679f3627a3b77d7b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer RAM-Verbrauch der JVM blieb unter 2 GB:<\/p>\n<p><img decoding=\"async\" alt=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr das 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 das 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 das 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 das Kafka-Cluster in Kubernetes.\" src=\"\/wp-content\/uploads\/2020\/02\/4ba0c4b59bfe72bcb0d2f22056c47d79.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer Betrieb der Broker mit Datenspeichern wurde durch das Ungleichgewicht der Partitionen beeintr\u00e4chtigt:<\/p>\n<p><img decoding=\"async\" alt=\"Wir bestimmen die passende Gr\u00f6\u00dfe f\u00fcr das 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 das 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 das 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 das Kafka-Cluster in Kubernetes.\" src=\"\/wp-content\/uploads\/2020\/02\/191d6d97b32b2128c5cfd3914171de15.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Fazit<\/h2>\n<p>\nDer oben dargestellte iterative Ansatz kann erweitert werden, um komplexere Szenarien mit Hunderten von Consumer, Repartitionierung, Rollups, Neustarts von Pods usw. abzudecken. All dies erm\u00f6glicht es uns, die Grenzen der Leistung des Kafka-Clusters unter verschiedenen Bedingungen zu bewerten, Engp\u00e4sse zu identifizieren und L\u00f6sungen zu finden.<\/p>\n<p>Wir haben Supertubes entwickelt, um die Bereitstellung des Clusters zu beschleunigen und zu erleichtern, es zu konfigurieren, Broker und Themen hinzuzuf\u00fcgen\/zu entfernen, auf Warnungen zu reagieren und das ordnungsgem\u00e4\u00dfe Funktionieren von Kafka in Kubernetes insgesamt zu gew\u00e4hrleisten. Unser Ziel ist es, Ihnen zu helfen, sich auf die Hauptaufgabe (Nachrichten von Kafka zu \u201eerzeugen\u201c und \u201ezu konsumieren\u201c) zu konzentrieren, w\u00e4hrend wir die ganze harte Arbeit Supertubes und dem Kafka-Operator \u00fcberlassen.<\/p>\n<p>Wenn Sie sich f\u00fcr Technologien und Open Source-Projekte von Banzai Cloud interessieren, 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 \u00fcber den Redis-Operator in K8s und einen kurzen \u00dcberblick \u00fcber Werkzeuge zur Datenanalyse dieser Datenbank<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/450662\/\">Herausfordernde 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 das 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 4.9.10 - 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. \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.\" \/>\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) 4.9.10\" \/>\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. \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.\" \/>\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 Gr\u00f6\u00dfe f\u00fcr das Kafka-Cluster in Kubernetes | ProHoster","description":"Hinweis: In diesem Artikel teilt Banzai Cloud ein Beispiel f\u00fcr die Verwendung seiner speziellen Tools zur Vereinfachung des Betriebs von Kafka innerhalb von Kubernetes. Die bereitgestellten Anleitungen zeigen, wie man die optimale Gr\u00f6\u00dfe der Infrastruktur ermitteln und Kafka selbst f\u00fcr die erforderliche Durchsatzrate konfigurieren kann. Apache Kafka ist eine verteilte Streaming-Plattform zur Erstellung zuverl\u00e4ssiger, skalierbarer und leistungsf\u00e4higer Echtzeitsysteme.","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. \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.","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"},"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}]}}