{"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\/fr\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes","title":{"rendered":"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Note de traduction.<\/b>: Dans cet article, l'entreprise Banzai Cloud partage un exemple d'utilisation de ses outils sp\u00e9ciaux pour faciliter l'exploitation de Kafka au sein de Kubernetes. Les instructions fournies illustrent comment d\u00e9terminer la taille optimale de l'infrastructure et configurer Kafka pour atteindre la bande passante requise.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/8a598ec7db091c2944a6442f9bc124da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nApache Kafka est une plateforme de streaming distribu\u00e9e pour cr\u00e9er des syst\u00e8mes de flux en temps r\u00e9el fiables, \u00e9volutifs et hautes performances. Ses capacit\u00e9s impressionnantes peuvent \u00eatre \u00e9tendues gr\u00e2ce \u00e0 Kubernetes. Pour cela, nous avons d\u00e9velopp\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/kafka-operator\">un op\u00e9rateur Kafka Open Source<\/a><\/noindex> et un outil nomm\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/supertubes\/overview\/\">Supertubes<\/a><\/noindex>. Ils permettent de faire fonctionner Kafka dans Kubernetes et d'utiliser ses diverses fonctionnalit\u00e9s, telles que l'affinage de la configuration des brokers, le redimensionnement bas\u00e9 sur des m\u00e9triques avec r\u00e9\u00e9quilibrage, la sensibilisation aux racks (rack awareness), le d\u00e9ploiement en douceur <i>(graceful)<\/i> des mises \u00e0 jour, etc.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p>Essayez Supertubes dans votre cluster :<\/p>\n<pre><code class=\"bash\">curl https:\/\/getsupertubes.sh | sh et supertubes install -a --no-democluster --kubeconfig<\/code><\/pre>\n<p>\nOu reportez-vous \u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/supertubes\/cli\/reference\/\">documentation<\/a><\/noindex>. Vous pouvez \u00e9galement lire sur certaines fonctionnalit\u00e9s de Kafka, dont l'automatisation est r\u00e9alis\u00e9e gr\u00e2ce \u00e0 Supertubes et \u00e0 l'op\u00e9rateur Kafka. Nous en avons d\u00e9j\u00e0 parl\u00e9 sur le blog :<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-operator\/\">Oh non ! Encore un op\u00e9rateur Kafka pour Kubernetes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-alert\/\">Surveillez et op\u00e9rez Kafka en fonction des m\u00e9triques de Prometheus<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-rack-awareness\/\">Sensibilisation aux racks Kafka sur Kubernetes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-on-istio-performance\/\">Ex\u00e9cution d'Apache Kafka sur Istio \u2014 benchmark<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-topic-user-management\/\">Clusters authentifi\u00e9s par l'utilisateur et contr\u00f4l\u00e9s par l'acc\u00e8s avec l'op\u00e9rateur Kafka<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-rolling-upgrade\/\">Mise \u00e0 niveau progressive de Kafka et configuration dynamique sur Kubernetes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-envoy-protocol-filter\/\">Filtre de protocole Envoy pour Kafka, maill\u00e9<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/blockquote>\n<p>\nEn d\u00e9cidant de d\u00e9ployer un cluster Kafka dans Kubernetes, vous serez s\u00fbrement confront\u00e9 au probl\u00e8me de la d\u00e9termination de la taille optimale de l'infrastructure de base et \u00e0 la n\u00e9cessit\u00e9 d'affiner la configuration de Kafka pour r\u00e9pondre aux exigences en mati\u00e8re de capacit\u00e9 de traitement. La performance maximale de chaque broker est d\u00e9termin\u00e9e par la performance des composants de l'infrastructure sous-jacente, tels que la m\u00e9moire, le processeur, la vitesse du disque, la bande passante r\u00e9seau, etc.<\/p>\n<p>Id\u00e9alement, la configuration du broker devrait permettre \u00e0 tous les \u00e9l\u00e9ments de l'infrastructure d'\u00eatre utilis\u00e9s \u00e0 leur pleine capacit\u00e9. Cependant, dans la r\u00e9alit\u00e9, un tel r\u00e9glage est assez complexe. Il est plus probable que les utilisateurs configureront les brokers de mani\u00e8re \u00e0 maximiser l'utilisation d'un ou deux composants (disque, m\u00e9moire ou processeur). En g\u00e9n\u00e9ral, un broker montre une performance maximale lorsque sa configuration permet d'exploiter pleinement le composant le plus lent. Ainsi, nous pouvons avoir une id\u00e9e approximative de la charge qu'un seul broker peut g\u00e9rer.<\/p>\n<p>Th\u00e9oriquement, nous pouvons \u00e9galement estimer le nombre de brokers n\u00e9cessaires pour traiter une charge donn\u00e9e. Cependant, dans la pratique, les options de configuration \u00e0 diff\u00e9rents niveaux sont si nombreuses qu'il est tr\u00e8s difficile (voire impossible) d'\u00e9valuer la performance potentielle d'une configuration donn\u00e9e. En d'autres termes, il est tr\u00e8s compliqu\u00e9 de planifier une configuration en se basant sur une performance donn\u00e9e.<\/p>\n<p>Pour les utilisateurs de Supertubes, nous appliquons g\u00e9n\u00e9ralement l'approche suivante : nous commen\u00e7ons par une certaine configuration (infrastructure + r\u00e9glages), puis nous mesurons sa performance, ajustons les r\u00e9glages du broker et r\u00e9p\u00e9tons le processus. Cela se d\u00e9roule jusqu'\u00e0 ce que le potentiel du composant le plus lent de l'infrastructure soit compl\u00e8tement exploit\u00e9.<\/p>\n<p>De cette mani\u00e8re, nous obtenons une vision plus claire du nombre de brokers n\u00e9cessaires au cluster pour g\u00e9rer une charge donn\u00e9e (le nombre de brokers d\u00e9pend \u00e9galement d'autres facteurs, tels que le nombre minimum de r\u00e9pliques de messages pour assurer la r\u00e9silience, le nombre de leaders de partition, etc.). De plus, nous avons une id\u00e9e de quel composant infrastructurel devrait id\u00e9alement \u00eatre mis \u00e0 l'\u00e9chelle verticalement.<\/p>\n<p>Dans cet article, nous aborderons les \u00e9tapes que nous entreprenons pour 'tirer le meilleur parti' des composants les plus lents dans les configurations initiales et mesurer la capacit\u00e9 de traitement du cluster Kafka. Une configuration hautement disponible n\u00e9cessite au moins trois brokers op\u00e9rationnels (<code>min.insync.replicas=3<\/code>), r\u00e9partis sur trois zones de disponibilit\u00e9 diff\u00e9rentes. Pour configurer, \u00e9voluer et surveiller l'infrastructure Kubernetes, nous utilisons notre propre plateforme de gestion des conteneurs pour les cloud hybrides \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pipeline\">Pipeline<\/a><\/noindex>. Elle prend en charge on-premise (bare metal, VMware) et cinq types de cloud (Alibaba, AWS, Azure, Google, Oracle), ainsi que toutes leurs combinaisons.<\/p>\n<h2>R\u00e9flexions sur l'infrastructure et la configuration du cluster Kafka<\/h2>\n<p>\nPour les exemples ci-dessous, nous avons choisi AWS comme fournisseur de cloud et EKS comme distribution Kubernetes. Une configuration similaire peut \u00eatre r\u00e9alis\u00e9e avec <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pke\">PKE<\/a><\/noindex> \u2014 la distribution Kubernetes de Banzai Cloud, certifi\u00e9e par la CNCF.<\/p>\n<h3>Disque<\/h3>\n<p>\nAmazon propose diff\u00e9rents <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/UserGuide\/ebs-volume-types.html\">types de volumes EBS<\/a><\/noindex>. \u00c0 la base, <i>gp2<\/i> et <i>io1<\/i> reposent sur des disques SSD, mais pour garantir un d\u00e9bit \u00e9lev\u00e9, <i>gp2<\/i> pointe consomm\u00e9e des cr\u00e9dits I\/O <i>(I\/O credits)<\/i>, c'est pourquoi nous avons pr\u00e9f\u00e9r\u00e9 le type <i>io1<\/i>, qui offre un d\u00e9bit \u00e9lev\u00e9 stable.<\/p>\n<h3>Types d'instances<\/h3>\n<p>\nLa performance de Kafka d\u00e9pend fortement du cache de page du syst\u00e8me d'exploitation, nous avons donc besoin d'instances avec suffisamment de m\u00e9moire pour les courtiers (JVM) et le cache de page. L'instance <i>c5.2xlarge<\/i> est un bon d\u00e9but, car elle dispose de 16 Go de m\u00e9moire et <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/UserGuide\/ebs-optimized.html\">est optimis\u00e9e pour travailler avec EBS<\/a><\/noindex>. Son inconv\u00e9nient est qu'elle peut atteindre des performances maximales pendant pas plus de 30 minutes toutes les 24 heures. Si la charge de travail n\u00e9cessite des performances maximales pendant une p\u00e9riode prolong\u00e9e, il convient d'explorer d'autres types d'instances. C'est exactement ce que nous avons fait en nous arr\u00eatant sur <i>c5.4xlarge<\/i>. Il fournit un d\u00e9bit maximal de <b>593,75 Mo\/s<\/b>. Le d\u00e9bit maximal d'un volume EBS <i>io1<\/i> est sup\u00e9rieur \u00e0 celui de l'instance <i>c5.4xlarge<\/i>, donc le maillon le plus lent de l'infrastructure est probablement le d\u00e9bit I\/O de ce type d'instance (ce que les r\u00e9sultats de nos tests de charge devraient \u00e9galement confirmer).<\/p>\n<h3>R\u00e9seau<\/h3>\n<p>\nLe d\u00e9bit r\u00e9seau doit \u00eatre suffisamment \u00e9lev\u00e9 par rapport \u00e0 la performance de l'instance VM et du disque, sinon le r\u00e9seau devient un goulot d'\u00e9tranglement. Dans notre cas, l'interface r\u00e9seau <i>c5.4xlarge<\/i> prend en charge une vitesse allant jusqu'\u00e0 10 Gb\/s, ce qui est significativement sup\u00e9rieur au d\u00e9bit I\/O de l'instance VM.<\/p>\n<h3>D\u00e9ploiement des courtiers<\/h3>\n<p>\nLes courtiers doivent \u00eatre d\u00e9ploy\u00e9s (planifi\u00e9s dans Kubernetes) sur des n\u0153uds d\u00e9di\u00e9s afin d'\u00e9viter la concurrence avec d'autres processus pour les ressources CPU, m\u00e9moire, r\u00e9seau et disque.<\/p>\n<h3>Version Java<\/h3>\n<p>\nLe choix logique est Java 11, car il est compatible avec Docker dans le sens o\u00f9 la JVM d\u00e9tecte correctement les processeurs et la m\u00e9moire disponibles pour le conteneur dans lequel le courtier fonctionne. Sachant que les limites de processeurs sont importantes, la JVM d\u00e9finit en interne et de mani\u00e8re transparente le nombre de threads GC et de threads JIT compilateurs. Nous avons utilis\u00e9 l'image Kafka <code>banzaicloud\/kafka:2.13-2.4.0<\/code>, comprenant la version Kafka 2.4.0 (Scala 2.13) sur Java 11.<\/p>\n<blockquote><p>Si vous souhaitez en savoir plus sur Java\/JVM sur Kubernetes, consultez nos publications suivantes :<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/java-resource-limits\/\">Pourquoi mon application Java est OOMKilled<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/java10-container-sizing\/\">Comment dimensionner correctement les conteneurs pour les applications Java 10<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/blockquote>\n<p><\/p>\n<h3>Param\u00e8tres de m\u00e9moire du courtier<\/h3>\n<p>\nIl existe deux aspects cl\u00e9s dans la configuration de la m\u00e9moire du courtier : les r\u00e9glages pour la JVM et pour le pod Kubernetes. La limite de m\u00e9moire fix\u00e9e pour le pod doit \u00eatre sup\u00e9rieure \u00e0 la taille maximale du tas, afin que la JVM dispose d'espace pour l'espace de m\u00e9tadonn\u00e9es Java, qui est dans sa propre m\u00e9moire, et pour le cache de pages du syst\u00e8me d'exploitation, que Kafka utilise activement. Dans nos tests, nous avons ex\u00e9cut\u00e9 des courtiers Kafka avec les param\u00e8tres <code>-Xmx4G -Xms2G<\/code>, et la limite de m\u00e9moire pour le pod \u00e9tait de <code>10 Gi<\/code>. Notez que les param\u00e8tres de m\u00e9moire pour la JVM peuvent \u00eatre obtenus automatiquement gr\u00e2ce \u00e0 <code>-XX:MaxRAMPercentage<\/code> et <code>-X:MinRAMPercentage<\/code>, en fonction de la limite de m\u00e9moire pour le pod.<\/p>\n<h3>Param\u00e8tres de processeur du courtier<\/h3>\n<p>\nEn g\u00e9n\u00e9ral, on peut am\u00e9liorer les performances en augmentant le parall\u00e9lisme gr\u00e2ce \u00e0 une augmentation du nombre de threads utilis\u00e9s par Kafka. Plus il y a de processeurs disponibles pour Kafka, mieux c'est. Dans notre test, nous avons commenc\u00e9 avec une limite de 6 processeurs et avons progressivement (par it\u00e9rations) augment\u00e9 ce nombre \u00e0 15. De plus, nous avons d\u00e9fini <code>num.network.threads=12<\/code> dans les param\u00e8tres du courtier pour augmenter le nombre de threads acceptant les donn\u00e9es du r\u00e9seau et les envoyant. D\u00e8s que nous avons d\u00e9couvert que les courtiers suiveurs ne pouvaient pas recevoir les r\u00e9pliques assez rapidement, nous avons augment\u00e9 <code>num.replica.fetchers<\/code> \u00e0 4 pour accro\u00eetre la vitesse \u00e0 laquelle les courtiers suiveurs r\u00e9pliquaient les messages des leaders.<\/p>\n<h3>Outil de g\u00e9n\u00e9ration de charge<\/h3>\n<p>\nIl convient de s'assurer que le potentiel du g\u00e9n\u00e9rateur de charge choisi ne s'\u00e9puise pas avant que le cluster Kafka (dont le benchmark est r\u00e9alis\u00e9) n'atteigne sa charge maximale. En d'autres termes, il est n\u00e9cessaire d'\u00e9valuer \u00e0 l'avance les capacit\u00e9s de l'outil de g\u00e9n\u00e9ration de charge, ainsi que de choisir pour lui des types d'instances avec un nombre suffisant de processeurs et de m\u00e9moire. Dans ce cas, notre outil produira plus de charge que ce que le cluster Kafka peut traiter. Apr\u00e8s de nombreuses exp\u00e9riences, nous avons choisi trois instances <i>c5.4xlarge<\/i>, dont chacune a ex\u00e9cut\u00e9 le g\u00e9n\u00e9rateur.<\/p>\n<h2>Benchmarking<\/h2>\n<p>\nLa mesure de performance est un processus it\u00e9ratif comprenant les \u00e9tapes suivantes :<\/p>\n<ul>\n<li> configuration de l'infrastructure (cluster EKS, cluster Kafka, outil de g\u00e9n\u00e9ration de charge, ainsi que Prometheus et Grafana);<\/li>\n<li> g\u00e9n\u00e9ration de charge pendant une p\u00e9riode d\u00e9termin\u00e9e pour filtrer les \u00e9carts al\u00e9atoires dans les m\u00e9triques de performance collect\u00e9es;<\/li>\n<li> ajustement de l'infrastructure et de la configuration du broker en fonction des performances observ\u00e9es;<\/li>\n<li> r\u00e9p\u00e9tition du processus jusqu'\u00e0 ce que le niveau de bande passante requis pour le cluster Kafka soit atteint. Celui-ci doit \u00eatre constamment reproductible et montrer des variations minimales de bande passante.<\/li>\n<\/ul>\n<p>\nDans la section suivante, les \u00e9tapes suivies lors du benchmark du cluster de test sont d\u00e9crites.<\/p>\n<h3>Outils<\/h3>\n<p>\nPour un d\u00e9ploiement rapide de la configuration de base, la g\u00e9n\u00e9ration de charge et la mesure des performances, les outils suivants ont \u00e9t\u00e9 utilis\u00e9s :<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/pipeline\/overview\/\">Banzai Cloud Pipeline<\/a><\/noindex> pour organiser le cluster EKS d'Amazon avec <noindex><a rel=\"nofollow\" href=\"https:\/\/prometheus.io\/\">Prometheus<\/a><\/noindex> (pour la collecte des m\u00e9triques de Kafka et de l'infrastructure) et <noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/\">Grafana<\/a><\/noindex> (pour la visualisation de ces m\u00e9triques). Nous avons utilis\u00e9 <b>des services int\u00e9gr\u00e9s<\/b> dans <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pipeline\">Pipeline<\/a><\/noindex> qui assurent une surveillance f\u00e9d\u00e9r\u00e9e, une collecte centralis\u00e9e des logs, un scan des vuln\u00e9rabilit\u00e9s, la r\u00e9cup\u00e9ration apr\u00e8s sinistre, une s\u00e9curit\u00e9 de niveau entreprise et bien plus encore.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jamiealquiza\/sangrenel\">Sangrenel<\/a><\/noindex> est un outil de test de charge pour le cluster Kafka.<\/li>\n<li> Panneaux Grafana pour la visualisation des m\u00e9triques de Kafka et de l'infrastructure : <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 pour une configuration simplifi\u00e9e de votre cluster Kafka sur Kubernetes. Zookeeper, Kafka operator, Envoy et de nombreux autres composants sont install\u00e9s et correctement configur\u00e9s pour ex\u00e9cuter un cluster Kafka pr\u00eat pour la production sur Kubernetes.\n<ul>\n<li> Pour l'installation <i>supertubes CLI<\/i> suivez les instructions fournies <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/supertubes\/cli\/install\/\">ici<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/23ecf423b1ea66813406943ae7eabf61.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Cluster EKS<\/h3>\n<p>\nPr\u00e9parer un cluster EKS avec des n\u0153uds de travail d\u00e9di\u00e9s <i>c5.4xlarge<\/i> dans diff\u00e9rentes zones de disponibilit\u00e9 pour les pods avec des courtiers Kafka, ainsi que des n\u0153uds d\u00e9di\u00e9s pour le g\u00e9n\u00e9rateur de charge et l'infrastructure de surveillance.<\/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>\nUne fois le cluster EKS op\u00e9rationnel, activez son int\u00e9gration <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/pipeline\/features\/integrated-services\/\">service de surveillance<\/a><\/noindex> \u2014 cela d\u00e9ploiera Prometheus et Grafana dans le cluster.<\/p>\n<h3>Composants syst\u00e8me Kafka<\/h3>\n<p>\nInstallez les composants syst\u00e8me Kafka (Zookeeper, kafka-operator) dans l'EKS en utilisant supertubes CLI :<\/p>\n<pre><code class=\"bash\">supertubes install -a --no-democluster --kubeconfig<\/code><\/pre>\n<p><\/p>\n<h3>Cluster Kafka<\/h3>\n<p>\nPar d\u00e9faut, dans EKS, des volumes EBS de type <i>gp2<\/i>, il est donc n\u00e9cessaire de cr\u00e9er une classe de stockage distincte bas\u00e9e sur les volumes <i>io1<\/i> pour le cluster Kafka :<\/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>\nConfigurez le param\u00e8tre pour les courtiers <code>min.insync.replicas=3<\/code> et d\u00e9ployez les pods des courtiers sur des n\u0153uds dans trois zones de disponibilit\u00e9 diff\u00e9rentes :<\/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>Sujets<\/h3>\n<p>\nNous avons lanc\u00e9 simultan\u00e9ment trois instances du g\u00e9n\u00e9rateur de charge. Chacune \u00e9crit dans son propre sujet, ce qui signifie que nous avons besoin de trois sujets au total :<\/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>\nPour chaque sujet, le facteur de r\u00e9plication est de 3 \u2014 la valeur minimale recommand\u00e9e pour les syst\u00e8mes de production hautement disponibles.<\/p>\n<h3>Outil de g\u00e9n\u00e9ration de charge<\/h3>\n<p>\nNous avons ex\u00e9cut\u00e9 trois instances de g\u00e9n\u00e9rateur de charge (chacune \u00e9crivant dans un sujet distinct). Pour les pods du g\u00e9n\u00e9rateur de charge, il est n\u00e9cessaire de d\u00e9finir une affinit\u00e9 de n\u0153ud, afin qu'ils ne soient programm\u00e9s que sur les n\u0153uds qui leur sont d\u00e9di\u00e9s :<\/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>\nQuelques points \u00e0 noter :<\/p>\n<ul>\n<li> Le g\u00e9n\u00e9rateur de charge g\u00e9n\u00e8re des messages de 512 octets et les publie dans Kafka par lots de 500 messages.<\/li>\n<li> Avec l'argument <code>-required-acks=all<\/code> la publication est consid\u00e9r\u00e9e comme r\u00e9ussie lorsque tous les r\u00e9plicas synchronis\u00e9s du message ont \u00e9t\u00e9 re\u00e7us et confirm\u00e9s par les brokers Kafka. Cela signifie que lors du benchmark, nous avons mesur\u00e9 non seulement la vitesse des leaders recevant les messages, mais aussi de leurs suiveurs r\u00e9pliquant ces messages. L'objectif de ce test n'est pas d'\u00e9valuer la vitesse de lecture des consommateurs <i>(consumers)<\/i> des messages r\u00e9cemment re\u00e7us, qui restent encore dans le cache de page du syst\u00e8me d'exploitation, et sa comparaison avec la vitesse de lecture des messages stock\u00e9s sur disque.<\/li>\n<li> Le g\u00e9n\u00e9rateur de charge ex\u00e9cute simultan\u00e9ment 20 travailleurs (<code>-workers=20<\/code>). Chaque travailleur contient 5 producteurs, qui partagent la connexion du travailleur au cluster Kafka. Au total, chaque g\u00e9n\u00e9rateur compte 100 producteurs, et tous envoient des messages au cluster Kafka.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Surveillance de l'\u00e9tat du cluster<\/h3>\n<p>\nLors des tests de charge du cluster Kafka, nous avons \u00e9galement surveill\u00e9 sa sant\u00e9, pour nous assurer qu'il n'y avait pas de red\u00e9marrages de pods, de r\u00e9pliques d\u00e9synchronis\u00e9es et de d\u00e9bit maximal avec des fluctuations minimales :<\/p>\n<ul>\n<li> Le g\u00e9n\u00e9rateur de charge \u00e9crit des statistiques standard sur le nombre de messages publi\u00e9s et le niveau d'erreurs. Le pourcentage d'erreurs doit rester \u00e0 <code>0,00%<\/code>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/linkedin\/cruise-control\">Cruise Control<\/a><\/noindex>, d\u00e9ploy\u00e9 avec kafka-operator, offre un tableau de bord o\u00f9 nous pouvons \u00e9galement surveiller l'\u00e9tat du cluster. Pour consulter ce tableau de bord, ex\u00e9cutez :\n<pre><code class=\"bash\">supertubes cluster cruisecontrol show -n kafka --kubeconfig<\/code><\/pre>\n<\/li>\n<li> Le niveau ISR <i>(nombre de r\u00e9pliques \u00ab in-sync \u00bb)<\/i> le shrink et l'expansion sont \u00e9gaux \u00e0 0.<\/li>\n<\/ul>\n<p><\/p>\n<h2>R\u00e9sultats des mesures<\/h2>\n<p><\/p>\n<h3>3 brokers, taille des messages \u2014 512 octets<\/h3>\n<p>\nAvec des partitions r\u00e9parties uniform\u00e9ment sur trois courtiers, nous avons r\u00e9ussi \u00e0 atteindre des performances <i>~500 Mo\/s (environ 990 000 messages par seconde)<\/i>:<\/p>\n<p><img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/df65ff6a1a26e28d5e5a7a5ab1a20d98.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/15c5883c0056c651f0a0bd14e9991967.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/9b708fa5ce809b0d059cba9f5edfbb2f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa consommation de m\u00e9moire de la machine virtuelle JVM n'a pas d\u00e9pass\u00e9 2 Go :<\/p>\n<p><img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/3320e2eea891055cc0935da492d18ee9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/6e3976c310309aa8be45fa3fdf547750.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/94baa1b689ae854693fb7cc4ed6e105e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa capacit\u00e9 de disque a atteint le maximum de capacit\u00e9 I\/O du n\u0153ud sur les trois instances o\u00f9 les brokers op\u00e9raient :<\/p>\n<p><img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/408139ad33cda1294755660df1c128a8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/391d2df0ddfe82f94abdb200370ff775.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/e7e9fd021a2cdc71992ce672363a78ec.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nD'apr\u00e8s les donn\u00e9es sur l'utilisation de la m\u00e9moire par les n\u0153uds, le buffering syst\u00e8me et la mise en cache ont occup\u00e9 environ 10-15 Go :<\/p>\n<p><img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/781887507e01a4903b86871961ff9260.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/63f10177f01342039f04192ea93c8bca.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/48b992cc73a968b3d3b1442f96562c4e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>3 brokers, taille des messages \u2014 100 octets<\/h3>\n<p>\nAvec la diminution de la taille des messages, la capacit\u00e9 de traitement chute d'environ 15-20 % : cela est d\u00fb au temps n\u00e9cessaire \u00e0 chaque message. De plus, la charge processeur a presque doubl\u00e9.<\/p>\n<p><img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/2f7dc5a94da371cfe17c9e0fc0ec1941.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/986160a3a4e099a0dbb8aeefaf6f1c2f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/c08244457bf4dbfadf52838d4ea2969e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c9tant donn\u00e9 qu'il reste des c\u0153urs non utilis\u00e9s sur les n\u0153uds des brokers, la performance peut \u00eatre am\u00e9lior\u00e9e en modifiant la configuration de Kafka. Cela repr\u00e9sente un d\u00e9fi, donc pour augmenter la capacit\u00e9, il est pr\u00e9f\u00e9rable de travailler avec des messages de plus grande taille.<\/p>\n<h3>4 brokers, taille des messages \u2014 512 octets<\/h3>\n<p>\nIl est facile d'augmenter les performances du cluster Kafka en ajoutant simplement de nouveaux courtiers tout en maintenant l'\u00e9quilibre des partitions (ce qui garantit une r\u00e9partition uniforme de la charge entre les courtiers). Dans notre cas, apr\u00e8s l'ajout d'un courtier, la capacit\u00e9 du cluster a augment\u00e9 jusqu'\u00e0 <i>~580 Mo\/s (~1,1 million de messages par seconde)<\/i>. L'augmentation a \u00e9t\u00e9 moins importante que pr\u00e9vu, principalement en raison du d\u00e9s\u00e9quilibre des partitions (tous les courtiers ne fonctionnent pas \u00e0 pleine capacit\u00e9).<\/p>\n<p><img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/8c8d2e70739add3c3f88fe42acf98c46.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/a6e4812270c04487de0ad39b996a13f8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/6162c04cfb87b9d9cd0f3147a4ae1647.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/dae5de3b14be212c679f3627a3b77d7b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa consommation de m\u00e9moire par la machine JVM est rest\u00e9e en dessous de 2 Go :<\/p>\n<p><img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/0bca07a817d7da3104b08de10979f049.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/7e1e64f80ec140f13e171cfe3be930ce.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/5e9700b1e54e45f9cd5fa018ec07dba1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/4ba0c4b59bfe72bcb0d2f22056c47d79.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLe fonctionnement des courtiers avec des accumulateurs a \u00e9t\u00e9 affect\u00e9 par le d\u00e9s\u00e9quilibre des partitions :<\/p>\n<p><img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/2b8ed3c21adf70c751d1daa6d4c41895.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/77b980869b99903d9de5cd7d43d79291.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/f2f9569a3a1ef0ce35e89b2e52e4a8b2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"D\u00e9terminer la taille appropri\u00e9e pour un cluster Kafka dans Kubernetes\" src=\"\/wp-content\/uploads\/2020\/02\/191d6d97b32b2128c5cfd3914171de15.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Conclusions<\/h2>\n<p>\nL'approche it\u00e9rative pr\u00e9sent\u00e9e ci-dessus peut \u00eatre \u00e9tendue pour couvrir des sc\u00e9narios plus complexes impliquant des centaines de consommateurs, le repartitionnement, les mises \u00e0 jour incr\u00e9mentielles, le red\u00e9marrage des pods, etc. Tout cela nous permet d'\u00e9valuer les limites des capacit\u00e9s du cluster Kafka dans diverses conditions, d'identifier les goulots d'\u00e9tranglement dans son fonctionnement et de trouver des moyens de les surmonter.<\/p>\n<p>Nous avons d\u00e9velopp\u00e9 Supertubes pour le d\u00e9ploiement rapide et facile d'un cluster, sa configuration, l'ajout ou la suppression de courtiers et de sujets, la gestion des alertes et l'assurance du bon fonctionnement de Kafka dans Kubernetes en g\u00e9n\u00e9ral. Notre objectif est de permettre de se concentrer sur l'essentiel (\u00ab g\u00e9n\u00e9rer \u00bb et \u00ab consommer \u00bb des messages Kafka), tandis que tout le travail lourd est pris en charge par Supertubes et kafka-operator.<\/p>\n<p>Si vous \u00eates int\u00e9ress\u00e9 par les technologies et les projets Open Source de Banzai Cloud, abonnez-vous \u00e0 l'entreprise sur <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> ou <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/BanzaiCloud\">Twitter<\/a><\/noindex>.<\/p>\n<h2>P.S. de l'auteur<\/h2>\n<p>\nLisez aussi dans notre blog :<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/480722\/\">Une histoire avec l'op\u00e9rateur Redis dans K8s et un mini-aper\u00e7u des outils d'analyse de donn\u00e9es de cette base de donn\u00e9es.<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/450662\/\">Migration sans tracas de RabbitMQ vers Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/329224\/\">zetcd de CoreOS : Rempla\u00e7ant ZooKeeper par\u2026 le stockage etcd<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Source : <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.2 - 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\/fr\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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\udd47D\u00e9terminer la taille appropri\u00e9e pour le cluster Kafka dans Kubernetes | ProHoster","description":"Note du traducteur : Dans cet article, Banzai Cloud partage un exemple d'utilisation de ses outils sp\u00e9cialis\u00e9s pour faciliter l'exploitation de Kafka dans le cadre de Kubernetes.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/71213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=71213"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/71213\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/71214"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=71213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=71213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=71213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}