{"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\/hr\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes","title":{"rendered":"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>Napomena za prijevod.<\/b>: U ovom \u010dlanku, Banzai Cloud dijeli primjer kori\u0161tenja svojih specijalnih alata za olak\u0161avanje eksploatacije Kafke unutar Kubernetes-a. Uklju\u010dene upute ilustriraju kako odrediti optimalnu veli\u010dinu infrastrukture i konfigurirati samu Kafku za postizanje potrebne propusnosti.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/8a598ec7db091c2944a6442f9bc124da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nApache Kafka je distribuirana platforma za streaming koja omogu\u0107uje izradu pouzdanih, skalabilnih i visokou\u010dinkovitih sustava protoka u stvarnom vremenu. Njezine impresivne mogu\u0107nosti mogu se pro\u0161iriti pomo\u0107u Kubernetes-a. Za to smo razvili <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/kafka-operator\">open-source operator Kafke<\/a><\/noindex> i alat pod nazivom <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/supertubes\/overview\/\">Supertubes<\/a><\/noindex>. Oni omogu\u0107uju pokretanje Kafke unutar Kubernetes-a i kori\u0161tenje njenih razli\u010ditih funkcija, kao \u0161to su fino pode\u0161avanje konfiguracije brokera, skaliranje na temelju metrika s ponovnim balansiranjem, rack awareness (svijest o hardverskim resursima), 'meko' <i>(graceful)<\/i> izdavanje a\u017euriranja i drugo.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p>Isprobajte Supertubes u svom klasteru:<\/p>\n<pre><code class=\"bash\">curl https:\/\/getsupertubes.sh | sh i supertubes install -a --no-democluster --kubeconfig<\/code><\/pre>\n<p>\nIli se obratite <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/supertubes\/cli\/reference\/\">dokumentaciju<\/a><\/noindex>. Osim toga, mo\u017eete pro\u010ditati o nekim mogu\u0107nostima Kafke, \u010dije je kori\u0161tenje automatizirano pomo\u0107i Supertubes i Kafka operatora. O tome smo ve\u0107 pisali na blogu:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-operator\/\">Oh ne! Jo\u0161 jedan Kafka operator za Kubernetes<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-alert\/\">Pratite i upravljajte Kafkom na temelju Prometheus metrika<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-rack-awareness\/\">Kafka rack awareness na Kubernetes-u<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-on-istio-performance\/\">Pokretanje Apache Kafke preko Istio \u2014 benchmark<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-topic-user-management\/\">Klasteri s korisni\u010dkom autentifikacijom i kontrolom pristupa uz Kafka operator<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-rolling-upgrade\/\">Kafka rolling upgrade i dinami\u010dka konfiguracija na Kubernetes-u<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/kafka-envoy-protocol-filter\/\">Envoy protokol filter za Kafka, umre\u017een<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/blockquote>\n<p>\nKada odlu\u010dite implementirati klaster Kafke unutar Kubernetes-a, zasigurno \u0107ete se suo\u010diti s problemom odre\u0111ivanja optimalne veli\u010dine osnovne infrastrukture i potrebom za finim pode\u0161avanjem konfiguracije Kafke kako bi se zadovoljili zahtjevi za propusnost. Maksimalna u\u010dinkovitost svakog brokera odre\u0111ena je u\u010dinkovito\u0161\u0107u infrastrukturnih komponenti koje ga \u010dine, kao \u0161to su memorija, procesor, brzina diska, propusnost mre\u017ee itd.<\/p>\n<p>Idealan konfiguracija posrednika trebala bi biti takva da se svi elementi infrastrukture koriste na maksimumu svojih mogu\u0107nosti. Me\u0111utim, u stvarnom \u017eivotu takva postavka je prili\u010dno slo\u017eena. Vjerojatnije je da \u0107e korisnici konfigurirati posredni\u010dke postavke na na\u010din da maksimiziraju kori\u0161tenje jednog ili dva sastavna dijela (disk, memorija ili procesor). Op\u0107enito, posrednik pokazuje maksimalnu izvedbu kada njegova konfiguracija omogu\u0107ava puni rad najsporijeg komponente. Tako mo\u017eemo dobiti grubu procjenu optere\u0107enja s kojim se jedan posrednik mo\u017ee nositi.<\/p>\n<p>Teoretski, tako\u0111er mo\u017eemo procijeniti broj posrednika potrebnih za rad s odre\u0111enim optere\u0107enjem. Me\u0111utim, u praksi postoji toliko mnogo opcija postavljanja na razli\u010ditim razinama da je procjena potencijalne izvedbe odre\u0111ene konfiguracije prili\u010dno te\u0161ka (ako ne i nemogu\u0107a). Drugim rije\u010dima, jako je te\u0161ko planirati konfiguraciju oslanjaju\u0107i se na neku zadanu izvedbu.<\/p>\n<p>Za korisnike Supertubes obi\u010dno primjenjujemo sljede\u0107i pristup: po\u010dinjemo s nekom postavkom (infrastruktura + pode\u0161avanja), zatim mjerimo njezinu izvedbu, prilago\u0111avamo postavke posrednika i ponovno ponavljamo proces. To se odvija sve dok potencijal najsporijeg komponente infrastrukture nije potpuno iskori\u0161ten.<\/p>\n<p>Na ovaj na\u010din dobivamo jasniju predstavu o tome koliko je posrednika potrebno klasteru da se nosi s odre\u0111enim optere\u0107enjem (broj posrednika tako\u0111er ovisi o drugim faktorima, poput minimalnog broja replika poruka za osiguranje otpornosti, broja vo\u0111a particija itd.). Uz to, dobivamo predstavu o tome kojeg infrastrukturnog komponenta je po\u017eeljno vertikalno skalirati.<\/p>\n<p>U ovom \u010dlanku govorit \u0107emo o koracima koje poduzimamo kako bismo \"izvukli maksimum\" iz najsporijih komponenti u po\u010detnim konfiguracijama i izmjerili propusnost Kafka klastera. Visokostabilna konfiguracija zahtijeva najmanje tri radna posrednika (<code>min.insync.replicas=3<\/code>), raspore\u0111enih u tri razli\u010dite dostupne zone. Za postavljanje, skaliranje i pra\u0107enje Kubernetes infrastrukture koristimo na\u0161u vlastitu platformu za upravljanje kontejnerima za hibridne oblake \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pipeline\">Cjevovod<\/a><\/noindex>. Podr\u017eava on-premise (bare metal, VMware) i pet tipova oblaka (Alibaba, AWS, Azure, Google, Oracle), kao i bilo koje njihove kombinacije.<\/p>\n<h2>Misli o infrastrukturi i konfiguraciji Kafka klastera<\/h2>\n<p>\nZa primjere navedene u nastavku, odabrali smo AWS kao dobavlja\u010da oblaka i EKS kao distribuciju Kubernetes. Sli\u010dnu konfiguraciju mogu\u0107e je ostvariti pomo\u0107u <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pke\">PKE<\/a><\/noindex> \u2014 distribucija Kubernetes od Banzai Clouda, certificirana od strane CNCF.<\/p>\n<h3>Disk<\/h3>\n<p>\nAmazon nudi razli\u010dite <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/UserGuide\/ebs-volume-types.html\">tipove EBS volumena<\/a><\/noindex>. U osnovi <i>gp2<\/i> i <i>io1<\/i> su temeljeni na SSD diskovima, me\u0111utim, za osiguranje visoke propusnosti <i>gp2<\/i> tro\u0161i ste\u010dene kredite <i>(I\/O krediti)<\/i>, stoga smo odabrali tip <i>io1<\/i>, koji nudi stabilnu visoku propusnost.<\/p>\n<h3>Tipovi instanci<\/h3>\n<p>\nPerformanse Kafke uvelike ovise o vremenskom predmemoriranju operativnog sustava, stoga su nam potrebne instance s dovoljnom koli\u010dinom memorije za brokere (JVM) i vremenskim predmemoriranjem. Instanca <i>c5.2xlarge<\/i> je dobar po\u010detak, jer ima 16 GB memorije i <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/UserGuide\/ebs-optimized.html\">optimizirana je za rad s EBS.<\/a><\/noindex>Nedostatak je to \u0161to mo\u017ee osigurati maksimalne performanse samo do 30 minuta svakih 24 sata. Ako radno optere\u0107enje zahtijeva maksimalne performanse tijekom du\u017eeg vremenskog perioda, treba razmotriti druge tipove instanci. Mi smo to tako i u\u010dinili, odlu\u010div\u0161i se za <i>c5.4xlarge.<\/i>Osigurava maksimalnu propusnost od <b>593,75 MB\/s.<\/b>Maksimalna propusnost EBS volumena <i>io1<\/i> je vi\u0161a od one instanci <i>c5.4xlarge.<\/i>, stoga je najsporiji element infrastrukture, o\u010digledno, propusnost I\/O ovog tipa instance (\u0161to tako\u0111er trebaju potvrditi rezultati na\u0161ih optere\u0107enih testova).<\/p>\n<h3>Mre\u017ea<\/h3>\n<p>\nPropusnost mre\u017ee trebala bi biti dovoljno velika u usporedbi s performansama VM instance i diska, ina\u010de mre\u017ea postaje usko grlo. U na\u0161em slu\u010daju, mre\u017eni su\u010delje <i>c5.4xlarge.<\/i> podr\u017eava brzinu do 10 Gb\/s, \u0161to je zna\u010dajno iznad propusnosti I\/O VM instance.<\/p>\n<h3>Postavljanje brokera<\/h3>\n<p>\nBrokeri se trebaju deployati (planirati u Kubernetesu) na namjenske \u010dvorove kako bi se izbjegla konkurencija s drugim procesima za resurse procesora, memorije, mre\u017ee i diska.<\/p>\n<h3>Verzija Jave<\/h3>\n<p>\nLogi\u010dan izbor je Java 11, budu\u0107i da je kompatibilna s Dockerom u smislu da JVM ispravno odre\u0111uje procesore i memoriju dostupnu kontejneru u kojem broker radi. Imaju\u0107i na umu da su ograni\u010denja procesora va\u017ena, JVM interno i transparentno postavlja broj GC i JIT-kompilatorskih niti. Koristili smo sliku Kafka <code>banzaicloud\/kafka:2.13-2.4.0<\/code>, koja uklju\u010duje verziju Kafka 2.4.0 (Scala 2.13) na Javi 11.<\/p>\n<blockquote><p>Ako \u017eelite saznati vi\u0161e o Javi\/JVM-u na Kubernetesu, obratite pa\u017enju na na\u0161e sljede\u0107e objave:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/java-resource-limits\/\">Za\u0161to je moja Java aplikacija OOMKilled<\/a><\/noindex>;<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/blog\/java10-container-sizing\/\">Kako ispravno odabrati veli\u010dinu kontejnera za Java 10 aplikacije<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/blockquote>\n<p><\/p>\n<h3>Postavke memorije brokera<\/h3>\n<p>\nPostoje dva klju\u010dna aspekta u pode\u0161avanju memorije brokera: postavke za JVM i za Kubernetes pod. Ograni\u010denje memorije postavljeno za pod mora biti ve\u0107e od maksimalne hrpe, kako bi se JVM-u ostavilo prostora za Java metaspace, koji se nalazi u vlastitoj memoriji, i za stranicu ke\u0161a operativnog sustava, koju Kafka aktivno koristi. U na\u0161im testovima pokretali smo Kafka brokere s parametrima <code>-Xmx4G -Xms2G<\/code>, a ograni\u010denje memorije za pod iznosilo je <code>10 Gi<\/code>. Imajte na umu da se postavke memorije za JVM mogu automatski dobiti putem <code>-XX:MaxRAMPercentage<\/code> i <code>-X:MinRAMPercentage<\/code>, na temelju ograni\u010denja memorije za pod.<\/p>\n<h3>Postavke procesora brokera<\/h3>\n<p>\nOp\u0107enito govore\u0107i, mo\u017ee se pobolj\u0161ati performanse pove\u0107anjem paralelizma pove\u0107avanjem broja niti koje Kafka koristi. \u0160to je vi\u0161e procesora dostupno Kafki, to je bolje. U na\u0161em testu po\u010deli smo s ograni\u010denjem od 6 procesora i postupno (iterativno) pove\u0107avali njihov broj na 15. Osim toga, postavili smo <code>num.network.threads=12<\/code> u postavkama brokera kako bismo pove\u0107ali broj niti koje primaju podatke iz mre\u017ee i \u0161alju ih. Odmah smo primijetili da replikant brokera ne mo\u017ee dovoljno brzo primati replike, pa smo pove\u0107ali <code>num.replica.fetchers<\/code> na 4 kako bismo pove\u0107ali brzinu s kojom replikant brokera replicira poruke od vo\u0111a.<\/p>\n<h3>Alat za generiranje optere\u0107enja<\/h3>\n<p>\nTrebate osigurati da potencijal odabranog generatora optere\u0107enja ne iscrpi prije nego \u0161to klaster Kafka (\u010diji se benchmark provodi) dostigne svoje maksimalno optere\u0107enje. Drugim rije\u010dima, potrebno je unaprijed procijeniti mogu\u0107nosti alata za generiranje optere\u0107enja i odabrati instance s dovoljnum brojem procesora i memorije. U tom slu\u010daju na\u0161 alat \u0107e proizvoditi vi\u0161e optere\u0107enja nego \u0161to klaster Kafka mo\u017ee obraditi. Nakon mnogo eksperimenata, odlu\u010dili smo se na tri instance <i>c5.4xlarge.<\/i>, od kojih je svaka pokrenula generator.<\/p>\n<h2>Benchmarking<\/h2>\n<p>\nMjerenje performansi je iterativni proces koji uklju\u010duje sljede\u0107e faze:<\/p>\n<ul>\n<li> postavljanje infrastrukture (EKS klastera, Kafka klastera, alata za generiranje optere\u0107enja, te Prometheusa i Grafane);<\/li>\n<li> generiranje optere\u0107enja tokom odre\u0111enog razdoblja za filtriranje slu\u010dajnih odstupanja u prikupljenim mjerenjima performansi;<\/li>\n<li> fino pode\u0161avanje infrastrukture i konfiguracije brokera na osnovu zabilje\u017eenih mjerenja performansi;<\/li>\n<li> ponavljanje procesa sve dok se ne postigne \u017eeljena razina propusnosti klastera Kafka. Pri tome bi trebala biti stabilno reproducirana i pokazivati minimalne varijacije u propusnosti.<\/li>\n<\/ul>\n<p>\nU sljede\u0107em poglavlju opisana su koraci koji su izvr\u0161eni tokom benchmark testiranja testnog klastera.<\/p>\n<h3>Alati<\/h3>\n<p>\nZa brzo postavljanje osnovne konfiguracije, generiranje optere\u0107enja i mjerenje performansi kori\u0161teni su sljede\u0107i alati:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/pipeline\/overview\/\">Banzai Cloud Pipeline<\/a><\/noindex> za organizaciju EKS klastera od Amazona s <noindex><a rel=\"nofollow\" href=\"https:\/\/prometheus.io\/\">Prometheus<\/a><\/noindex> (za prikupljanje metrika Kafka i infrastrukture) i <noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/\">Grafana<\/a><\/noindex> (za vizualizaciju tih metrika). Iskoristili smo <b>integrirane<\/b> u <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/banzaicloud\/pipeline\">Cjevovod<\/a><\/noindex> usluge koje omogu\u0107avaju federalno pra\u0107enje, centralizirano prikupljanje logova, skeniranje ranjivosti, oporavak od kvarova, sigurnost na korporativnoj razini i jo\u0161 mnogo toga.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jamiealquiza\/sangrenel\">Sangrenel<\/a><\/noindex> je alat za testiranje optere\u0107enja Kafka klastera.<\/li>\n<li> Grafana plo\u010de za vizualizaciju metrika Kafka i infrastrukture: <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 za maksimalno jednostavno postavljanje Kafka klastera u Kubernetesu. Zookeeper, Kafka operator, Envoy i mnogi drugi sastavni dijelovi su instalirani i pravilno konfigurirani za pokretanje klastera Kafka spremnog za proizvodnju u Kubernetesu.\n<ul>\n<li> Za instalaciju <i>supertubes CLI<\/i> iskoristite upute navedene <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/supertubes\/cli\/install\/\">ovdje<\/a><\/noindex>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/23ecf423b1ea66813406943ae7eabf61.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>EKS klaster<\/h3>\n<p>\nPripremite EKS klaster s odvojenim radnim \u010dvorovima <i>c5.4xlarge.<\/i> u razli\u010ditim dostupnim zonama za podove s Kafka brokerima, kao i na posve\u0107ene \u010dvorove za generator optere\u0107enja i infrastrukturno pra\u0107enje.<\/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>\nKada EKS klaster bude aktivan, uklju\u010dite njegovu integriranu <noindex><a rel=\"nofollow\" href=\"https:\/\/banzaicloud.com\/docs\/pipeline\/features\/integrated-services\/\">servis za monitoring<\/a><\/noindex> \u2014 on \u0107e postaviti Prometheus i Grafanu u klaster.<\/p>\n<h3>Sastavni dijelovi Kafka<\/h3>\n<p>\nInstalirajte sastavne dijelove Kafka (Zookeeper, kafka-operator) u EKS koriste\u0107i supertubes CLI:<\/p>\n<pre><code class=\"bash\">supertubes install -a --no-democluster --kubeconfig<\/code><\/pre>\n<p><\/p>\n<h3>Kafka klaster<\/h3>\n<p>\nZadano se u EKS koriste EBS volumeni tipa <i>gp2<\/i>, stoga je potrebno stvoriti posebnu klasu pohrane temeljenu na volumenu <i>io1<\/i> za Kafka klaster:<\/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>\nPostavite za posrednike parametar <code>min.insync.replicas=3<\/code> i rasporedite podove brokera na \u010dvorovima u tri razli\u010dite dostupne zone:<\/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>Teme<\/h3>\n<p>\nIstovremeno smo pokretali tri instance generatora optere\u0107enja. Svaka od njih pi\u0161e u svoju temu, dakle ukupno nam trebaju tri teme:<\/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>\nZa svaku temu faktor replikacije je 3 \u2014 minimalna preporu\u010dena vrijednost za visoko dostupne proizvodne sustave.<\/p>\n<h3>Alat za generiranje optere\u0107enja<\/h3>\n<p>\nPokretali smo tri instance generatora optere\u0107enja (svaka je pisala u poseban topic). Za podove generatora optere\u0107enja potrebno je postaviti node affinity, kako bi se planirali samo na posve\u0107ene \u010dvorove:<\/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>\nNekoliko stvari na koje treba obratiti pa\u017enju:<\/p>\n<ul>\n<li> Generator optere\u0107enja generira poruke du\u017eine 512 bajtova i objavljuje ih u Kafka serijama od 500 poruka.<\/li>\n<li> Pomo\u0107u argumenta <code>-required-acks=all<\/code> objavljivanje se smatra uspje\u0161nim kada su sve sinkronizirane replike poruka primljene i potvr\u0111ene brokersima Kafka. To zna\u010di da smo u benchmarku mjerili ne samo brzinu rada lidera koji primaju poruke, ve\u0107 i njihovi sljedbenika koji repliciraju poruke. Cilj ovog testa nije ocjenjivanje brzine \u010ditanja od strane potro\u0161a\u010da <i>(consumers)<\/i> nedavno prihva\u0107enih poruka, koje su trenutno u stranici predmemorije OS-a, i usporedbu s brzinom \u010ditanja poruka koje se nalaze na disku.<\/li>\n<li> Generator optere\u0107enja paralelno pokre\u0107e 20 radnika (<code>-workers=20<\/code>). Svaki radnik sadr\u017ei 5 producenata, koji zajedni\u010dki koriste vezu radnika s klasterom Kafka. Na kraju, svaki generator ima 100 producenata, a svi oni \u0161alju poruke u klaster Kafka.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Pra\u0107enje stanja klastera<\/h3>\n<p>\nTijekom testiranja optere\u0107enja klastera Kafka tako\u0111er smo pratili njegovo zdravlje, kako bismo se uvjerili u odsustvo ponovnog pokretanja podova, nesinhroniziranih replika i maksimalne propusnosti s minimalnim fluktuacijama:<\/p>\n<ul>\n<li> Generator optere\u0107enja bilje\u017ei standardnu statistiku o broju objavljenih poruka i razini gre\u0161aka. Postotak gre\u0161aka trebao bi ostati na <code>0,00%<\/code>.<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/linkedin\/cruise-control\">Cruise Control<\/a><\/noindex>, razra\u0111eni kafka-operator, nudi nadzornu plo\u010du na kojoj tako\u0111er mo\u017eemo pratiti stanje klastera. Za prikaz ove plo\u010de izvr\u0161ite:\n<pre><code class=\"bash\">supertubes cluster cruisecontrol show -n kafka --kubeconfig<\/code><\/pre>\n<\/li>\n<li> Razina ISR <i>(broj replikacija \u201ein-sync\u201c)<\/i> smanjenje i pove\u0107anje jednako je 0.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Rezultati mjerenja<\/h2>\n<p><\/p>\n<h3>3 brokera, veli\u010dina poruka \u2014 512 bajtova<\/h3>\n<p>\nS partitionima ravnomjerno raspore\u0111enima na tri brokera, uspjeli smo posti\u0107i performanse <i>~500 MB\/s (otprilike 990 tisu\u0107a poruka u sekundi)<\/i>:<\/p>\n<p><img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/df65ff6a1a26e28d5e5a7a5ab1a20d98.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/15c5883c0056c651f0a0bd14e9991967.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/9b708fa5ce809b0d059cba9f5edfbb2f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPotro\u0161nja memorije virtualnog stroja JVM nije prema\u0161ila 2 GB:<\/p>\n<p><img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/3320e2eea891055cc0935da492d18ee9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/6e3976c310309aa8be45fa3fdf547750.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/94baa1b689ae854693fb7cc4ed6e105e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPropusnost diska dostigla je maksimalnu propusnost I\/O \u010dvora na svih tri instance na kojima su radili brokera:<\/p>\n<p><img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/408139ad33cda1294755660df1c128a8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/391d2df0ddfe82f94abdb200370ff775.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/e7e9fd021a2cdc71992ce672363a78ec.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIz podataka o kori\u0161tenju memorije od strane \u010dvorova, proizlazi da je sistemsko baferiranje i ke\u0161iranje zauzelo ~10-15 GB:<\/p>\n<p><img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/781887507e01a4903b86871961ff9260.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/63f10177f01342039f04192ea93c8bca.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/48b992cc73a968b3d3b1442f96562c4e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>3 brokera, veli\u010dina poruka \u2014 100 bajtova<\/h3>\n<p>\nS smanjenjem veli\u010dine poruka, propusnost opada otprilike 15-20%: utje\u010de vrijeme koje je potrebno za obradu svake poruke. Osim toga, optere\u0107enje procesora se gotovo udvostru\u010dilo.<\/p>\n<p><img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/2f7dc5a94da371cfe17c9e0fc0ec1941.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/986160a3a4e099a0dbb8aeefaf6f1c2f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/c08244457bf4dbfadf52838d4ea2969e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBudu\u0107i da na \u010dvorovima brokera i dalje postoje neiskori\u0161tena jezgra, performanse se mogu pove\u0107ati mijenjanjem konfiguracije Kafke. To je slo\u017een zadatak, pa je za pove\u0107anje propusnosti bolje raditi s ve\u0107im veli\u010dinama poruka.<\/p>\n<h3>4 brokera, veli\u010dina poruka \u2014 512 bajtova<\/h3>\n<p>\nMo\u017ee se lako pove\u0107ati performansa Klastera Kafka jednostavnim dodavanjem novih brokera i odr\u017eavanjem ravnote\u017ee partitiona (ovo osigurava ravnomjernu distribuciju optere\u0107enja izme\u0111u brokera). U na\u0161em slu\u010daju, nakon dodavanja brokera, propusnost klastera je porasla na <i>~580 MB\/s (~1,1 milijuna poruka u sekundi)<\/i>. Rast je bio manji nego \u0161to se o\u010dekivalo: najvi\u0161e zbog disbalansa partitiona (ne rade svi brokeri na vrhuncu mogu\u0107nosti).<\/p>\n<p><img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/8c8d2e70739add3c3f88fe42acf98c46.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/a6e4812270c04487de0ad39b996a13f8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/6162c04cfb87b9d9cd0f3147a4ae1647.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/dae5de3b14be212c679f3627a3b77d7b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKori\u0161tenje memorije JVM ma\u0161ine ostalo je ispod 2 GB:<\/p>\n<p><img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/0bca07a817d7da3104b08de10979f049.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/7e1e64f80ec140f13e171cfe3be930ce.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/5e9700b1e54e45f9cd5fa018ec07dba1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/4ba0c4b59bfe72bcb0d2f22056c47d79.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa rad brokera s pohranom utjecao je disbalans partitiona:<\/p>\n<p><img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/2b8ed3c21adf70c751d1daa6d4c41895.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/77b980869b99903d9de5cd7d43d79291.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/f2f9569a3a1ef0ce35e89b2e52e4a8b2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Odre\u0111ivanje prikladne veli\u010dine za Kafka klaster u Kubernetesu\" src=\"\/wp-content\/uploads\/2020\/02\/191d6d97b32b2128c5cfd3914171de15.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Zaklju\u010dci<\/h2>\n<p>\nGore predstavljeni iterativni pristup mo\u017ee se pro\u0161iriti kako bi obuhvatio slo\u017eenije scenarije koji uklju\u010duju stotine potro\u0161a\u010da, repartitioning, nadogradnje, ponovne pokretanja podova itd. Sve ovo omogu\u0107ava nam da procijenimo granice mogu\u0107nosti klastera Kafka u razli\u010ditim uvjetima, identificiramo uska grla u njegovom radu i prona\u0111emo na\u010dine za njihovo prevladavanje.<\/p>\n<p>Razvili smo Supertubes za brzo i jednostavno postavljanje klastera, njegovo konfiguriranje, dodavanje\/uklanjanje brokera i tema, reakciju na obavijesti i osiguranje ispravnog rada Kafke u Kubernetesu u cjelini. Na\u0161 cilj je pomo\u0107i vam da se usredoto\u010dite na osnovni zadatak ('generiranje' i 'konzumiranje' poruka Kafke), dok sav te\u017eak posao prepu\u0161tamo Supertubes i Kafka operatoru.<\/p>\n<p>Ako vas zanimaju tehnologije i Open Source projekti Banzai Clouda, pratite tvrtku na <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> ili <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/BanzaiCloud\">Twitter<\/a><\/noindex>.<\/p>\n<h2>P.S. od prevodioca<\/h2>\n<p>\nPro\u010ditajte i na na\u0161em blogu:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/480722\/\">Jedna pri\u010da o Redis operatoru u K8s i mini pregled alata za analizu podataka ove baze podataka<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/450662\/\">Migracija RabbitMQ u Kubernetes bez problema<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/329224\/\">zetcd od CoreOS: Zamjena ZooKeepera s... pohranom etcd<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Izvor: <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.4 - 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\/hr\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\/hr\/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\udd47Odre\u0111ivanje odgovaraju\u0107e veli\u010dine za klaster Kafke u Kubernetesu | ProHoster","description":"Napomena prev.: U ovom \u010dlanku Banzai Cloud dijeli primjer kori\u0161tenja svojih posebnih alata za olak\u0161avanje operativnih zadataka Kafke u okviru Kubernetesa.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/opredelyaem-podhodyashhij-razmer-dlya-klastera-kafka-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/71213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=71213"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/71213\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/71214"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=71213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=71213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=71213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}