Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Shën. përk.: Në këtë artikull, kompania Banzai Cloud ndan një shembull të përdorimit të utiliteteve të saj speciale për të lehtësuar operimin e Kafka në Kubernetes. Udhëzimet e dhëna ilustrojnë se si mund të përcaktohet madhësia optimale e infrastrukturës dhe si të konfigurohet Kafka për të arrijtur kapacitetin e kërkuar.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Apache Kafka është një platformë e shpërndarë për transmetimin e të dhënave, e cila mundëson krijimin e sistemeve të besueshme, të shkallëzueshme dhe me performancë të lartë në kohë reale. Mundësitë e saj frymëzuese mund të zgjerohet me ndihmën e Kubernetes. Për këtë qëllim, ne zhvilluam Operatorin Open Source të Kafka dhe një mjet të quajtur Supertubes. Këto lejojnë ekzekutimin e Kafka në Kubernetes dhe përdorimin e funksioneve të saj të ndryshme, të tilla si optimizimi i konfigurimit të brokerit, shkallëzimi mbi baza metrikash me ribalancim, vetëdijesimi për kapacitetet e pajisjeve, "shkëputja e butë" (graceful) e azhurnimeve etj.

Provoni Supertubes në klasterin tuaj:

curl https://getsupertubes.sh | sh dhe supertubes install -a --no-democluster --kubeconfig

Ose kontaktoni dokumentacion. Mund të lexoni gjithashtu për disa mundësi të Kafka, me të cilat punimi është automatizuar përmes Supertubes dhe Kafka operatorit. Ne kemi shkruar tashmë për to në blogun tonë:

Duke vendosur të ngrisni një grup Kafka në Kubernetes, padyshim që do të përballeni me problemin e përcaktimit të madhësisë optimale të infrastrukturës themelore dhe nevojën për të nxjerrë përfundime të detajizuara të konfiguracionit të Kafka për të përmbushur kërkesat për kapacitetin. Përformanca maksimale e çdo broker-i përcaktohet nga performanca e komponenteve të infrastrukturës në bazë të tij, siç janë memoria, procesori, shpejtësia e disku, kapaciteti i rrjetit etj.

Idealja, konfigurimi i brokerit duhet të jetë i tillë që të gjitha elementët e infrastrukturës të përdoren në maksimumin e mundësive të tyre. Megjithatë, në jetën reale, një konfigurim i tillë është mjaft i komplikuar. Më shumë gjasa, përdoruesit do të konfigurojnë brokerat në mënyrë që të maksimizojnë përdorimin e një apo dy komponenteve (diskut, memorie ose procesor). Në përgjithësi, brokeri tregon performancën maksimale kur konfigurimi i tij lejon që komponenti më i ngadalshëm të angazhohet 'në mënyrë të plotë'. Kështu, ne mund të marrim një ide të përafërt mbi ngarkesën që një broker është në gjendje të përballojë.

Teorikisht, ne gjithashtu mund të vlerësojmë numrin e brokerave të nevojshëm për të përballuar një ngarkesë të caktuar. Megjithatë, në praktikë, opsionet e konfigurimit në nivele të ndryshme janë aq të shumta saqë vlerësimi i performancës potenciale të një konfigurimi është shumë i vështirë (nëse jo i pamundur). Me fjalë të tjera, është shumë e vështirë të planifikosh një konfigurim duke u bazuar në një performancë të caktuar.

Për përdoruesit e Supertubes, zakonisht përdorim qasjen e mëposhtme: fillojmë me një konfigurim të caktuar (infrastrukturë + cilësime), pastaj matim performancën e saj, korrektojmë cilësimet e brokerit dhe e përsërisim procesin përsëri. Kjo ndodh derisa potenciali i komponentit më të ngadalshëm të infrastrukturës të jetë plotësisht i angazhuar.

Me këtë mënyrë ne marrim një pamje më të qartë se sa brokerë i nevojiten klasterit për të përballuar një ngarkesë të caktuar (numri i brokerëve gjithashtu varet nga faktorë të tjerë, si numri minimal i replikave të mesazheve për të siguruar qëndrueshmëri, numri i liderëve të partition-it etj.). Përveç kësaj, ne marrim një ide se për cilin komponent infrastrukture është e dëshirueshme shkallëzimi vertikal.

NĂ« kĂ«tĂ« artikull do tĂ« flitet pĂ«r hapat qĂ« ne ndĂ«rmarrim pĂ«r tĂ« "shkĂ«lqyer gjithçka" nga komponentĂ«t mĂ« tĂ« ngadalshĂ«m nĂ« konfigurimet fillestare dhe pĂ«r tĂ« matur kapacitetin kalues tĂ« klasterit Kafka. NjĂ« konfigurim me qĂ«ndrueshmĂ«ri tĂ« lartĂ« kĂ«rkon tĂ« paktĂ«n tre brokerĂ« qĂ« funksionojnĂ« (min.insync.replicas=3), tĂ« shpĂ«rndara nĂ« tre zona tĂ« ndryshme disponueshmĂ«rie. PĂ«r konfigurimin, shkallĂ«zimin dhe monitorimin e infrastrukturĂ«s Kubernetes, ne pĂ«rdorim platformĂ«n tonĂ« tĂ« menaxhimit tĂ« kontejnerĂ«ve pĂ«r mjete hibride — Pipeline. Ajo mbĂ«shtet on-premise (bare metal, VMware) dhe pesĂ« lloje tĂ« mjeteve (Alibaba, AWS, Azure, Google, Oracle), si dhe çdo kombinim tĂ« tyre.

Mendime mbi infrastrukturën dhe konfigurimin e klasterit Kafka

PĂ«r shembujt e dhĂ«nĂ« mĂ« poshtĂ«, ne zgjodhĂ«m AWS si ofruesin e shĂ«rbimeve tĂ« mjeteve dhe EKS si shpĂ«rndarjen e Kubernetes. NjĂ« konfigurim tĂ« ngjashĂ«m mund tĂ« realizohet me PKE — shpĂ«rndarja e Kubernetes nga Banzai Cloud, e certifikuar nga CNCF.

Disku

Amazon ofron lloje të ndryshme të volumeneve EBS. Në thelb, gp2 dhe io1 janë bazuar në disqe SSD, megjithatë për të siguruar një kapacitet të lartë kalimi, gp2 ai konsumon kredite I/O (kredite I/O), prandaj ne preferuam një tip io1, i cili ofron një kalim të qëndrueshëm të lartë.

Llojet e instancave

Performanca e Kafka varet shumĂ« nga cache-i i faqeve tĂ« sistemit operativ, prandaj na nevojiten instanca me mjaft memorie pĂ«r brokerĂ«t (JVM) dhe cache-in e faqeve. Instanca c5.2xlarge — njĂ« fillim i mirĂ«, pasi ka 16 GB memorie dhe Ă«shtĂ« i optimizuar pĂ«r tĂ« punuar me EBS. Disavantazhi i tij Ă«shtĂ« se ai mund tĂ« ofrojĂ« performancĂ« maksimale pĂ«r maksimumi 30 minuta çdo 24 orĂ«. NĂ«se ngarkesa e punĂ«s kĂ«rkon performancĂ« maksimale pĂ«r njĂ« periudhĂ« mĂ« tĂ« gjatĂ«, Ă«shtĂ« e nevojshme tĂ« shqyrtohen lloje tĂ« tjera instancash. Ne e bĂ«mĂ« shtĂ«pinĂ« tonĂ«, duke u ndalur nĂ« c5.4xlarge. Ai ofron njĂ« kapacitet maksimal prej 593.75 MB/s. Kapaciteti maksimal i volumit EBS io1 Ă«shtĂ« mĂ« i lartĂ« se ai i instancĂ«s c5.4xlarge, kĂ«shtu qĂ« element dhe mĂ« i ngadalshĂ«m nĂ« infrastrukturĂ«, duket se Ă«shtĂ« kapaciteti I/O i kĂ«tij lloji instance (çka gjithashtu duhet ta konfirmojnĂ« rezultatet tona tĂ« testeve tĂ« ngarkesĂ«s).

RRjeti

Kapaciteti i rrjetit duhet të jetë mjaft i madh në krahasim me performancën e instancës VM dhe diskut, në të kundërt do të shndërrohet në një pikë të ngushtë. Në rastin tonë, ndërfaqja rrjetit c5.4xlarge mbështet një shpejtësi deri në 10 GB/s, që është dukshëm më e lartë se kapaciteti I/O i instancës VM.

Zhvillimi i brokerëve

Brokers duhet të shtrihen (planifikohen në Kubernetes) në node të dedikuar, për të shmangur konkurrencën me procese të tjera për burimet e procesorëve, memories, rrjetit dhe disqeve.

Versioni i Java

Zgjedhja logjike është Java 11, pasi ajo është e përputhshme me Docker, në kuptimin që JVM e përcakton saktësisht procesorët dhe memorien e disponueshme për kontejnerin në të cilin funksionon brokeri. Duke e ditur se kufizimet e procesorëve janë të rëndësishme, JVM brenda saj dhe në mënyrë transparente përcakton numrin e telave të GC dhe telave të kompilatorit JIT. Ne përdorëm imazhin Kafka banzaicloud/kafka:2.13-2.4.0, duke përfshirë versionin Kafka 2.4.0 (Scala 2.13) në Java 11.

Nëse dëshironi të mësoni më shumë rreth Java/JVM në Kubernetes, ju lutemi shikoni publikimet tona të mëposhtme:

Cilësimet e memories së brokerit

Ka janë dy aspekte kyçe në konfigurimin e memorjes së brokerit: konfigurimet për JVM dhe për pod'in Kubernetes. Kufiri i memories, i vendosur për pod'in, duhet të jetë më i madh se madhësia maksimale e heap-it, në mënyrë që JVM të ketë hapësirë për metapësirën Java, e cila ndodhet në memorien e saj, dhe për cache-in e faqeve të sistemit operativ, të cilin Kafka e përdor aktivisht. Ne në testet tona kemi ekzekutuar brokerët Kafka me parametrat -Xmx4G -Xms2G, ndërsa kufiri i memories për pod'in ishte 10 Gi. Vini re se konfigurimet e memories për JVM mund të merren automatikisht me anë të -XX:MaxRAMPercentage dhe -X:MinRAMPercentage, në përputhje me kufirin e memories për pod'in.

Konfigurimet e procesorit të brokerit

Në përgjithësi, është e mundur të rritet performanca duke rritur paralelizmën përmes rritjes së numrit të thesareve që përdoren nga Kafka. Sa më shumë procesorë të jenë të disponueshëm për Kafka, aq më mirë. Në testin tonë kemi filluar me një kufi prej 6 procesorësh dhe gradualisht (në iteracione) e rritëm numrin e tyre në 15. Për më tepër, kemi vendosur num.network.threads=12 në cilësimet e brokerit, për të rritur numrin e rrjedhave që marrin të dhëna nga rrjeti dhe i dërgojnë ato. Menjëherë duke e kuptuar se brokerët ndiqës nuk mund të marrin replika mjaftueshëm shpejt, rritëm num.replica.fetchers në 4, për të përshpejtuar shpejtësinë me të cilën brokerët ndiqës replikonin mesazhet nga liderët.

Mjeti i gjenerimit të ngarkesës

Duhet të sigurohemi që potenciali i gjeneratorit të zgjedhur të ngarkesës të mos shterrojë para se klusteri Kafka (benchmark-u i të cilit po kryhet) të arrijë ngarkesën maksimale. Në fjalë të tjera, është e nevojshme të bëhet një vlerësim paraprak i kapaciteteve të mjetit të gjenerimit të ngarkesës, si dhe të zgjidhen llojet e instancave me një numër të mjaftueshëm procesorësh dhe memories. Në këtë rast, mjeti ynë do të prodhojë më shumë ngarkesë sesa klusteri Kafka është në gjendje të përballojë. Pas shumë eksperimenteve, ne ndaluam në tre instanca c5.4xlarge, në secilën prej të cilave ishte aktivizuar një gjenerator.

Benchmarkimi

Matja e performancës është një proces iterativ që përfshin fazat e mëposhtme:

  • konfigurimi i infrastrukturĂ«s (klasteri EKS, klasteri Kafka, mjeti i gjenerimit tĂ« ngarkesĂ«s, si dhe Prometheus dhe Grafana);
  • gjenerimi i ngarkesĂ«s pĂ«r njĂ« periudhĂ« tĂ« caktuar pĂ«r tĂ« filtruar deviacione tĂ« rastit nĂ« shĂ«nimet e performancĂ«s tĂ« mbledhura;
  • pĂ«rshtatja e infrastrukturĂ«s dhe konfigurimit tĂ« brokerit nĂ« bazĂ« tĂ« metrikeve tĂ« performancĂ«s sĂ« vĂ«zhguara;
  • pĂ«rsĂ«ritja e procesit derisa tĂ« arrihet niveli i kĂ«rkuar i kapacitetit tĂ« klasterit Kafka. Ky duhet tĂ« jetĂ« stabilisht i riprodhueshĂ«m dhe tĂ« tregojĂ« variacione minimale tĂ« kapacitetit.

Në seksionin e ardhshëm përshkruhen hapat që janë ndjekur gjatë procesit të benchmark-ut të klasterit për prova.

Mjetet

Për implementimin e shpejtë të konfigurimit themelor, gjenerimin e ngarkesës dhe matjen e performancës janë përdorur mjetet e mëposhtme:

  • Banzai Cloud Pipeline pĂ«r organizimin e klasterit EKS nga Amazon me Prometheus (pĂ«r mbledhjen e metrikeve tĂ« Kafka dhe infrastrukturĂ«s) dhe Grafana (pĂ«r vizualizimin e kĂ«tyre metrikeve). Ne kemi pĂ«rdorur tĂ« integruar. nĂ« Pipeline shĂ«rbimeve qĂ« ofrojnĂ« monitorim federativ, grumbullim tĂ« centralizuar tĂ« logjeve, skanimin e dobĂ«sive, rikuperimin pas dĂ«shtimeve, sigurinĂ« e nivelit korporativ dhe shumĂ« tĂ« tjera.
  • Sangrenel — njĂ« mjet pĂ«r testimin e ngarkesĂ«s sĂ« klasterit Kafka.
  • Grafana panels pĂ«r vizualizimin e metrikeve tĂ« Kafka dhe infrastrukturĂ«s: Kubernetes Kafka, Node Exporter.
  • Supertubes CLI pĂ«r konfigurimin sa mĂ« tĂ« thjeshtĂ« tĂ« klasterit Kafka nĂ« Kubernetes. Zookeeper, Kafka operator, Envoy dhe shumĂ« komponentĂ« tĂ« tjerĂ« janĂ« tĂ« instaluar dhe tĂ« konfiguruar siç duhet pĂ«r tĂ« drejtuar njĂ« klaster Kafka tĂ« gatshĂ«m pĂ«r prodhim nĂ« Kubernetes.
    • PĂ«r instalimin supertubes CLI pĂ«rdorni udhĂ«zimet e dhĂ«na kĂ«tu.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Klaster EKS

PĂ«rgatitni klasterin EKS me nodet e dedikuara c5.4xlarge nĂ« zona tĂ« shumta tĂ« disponueshmĂ«risĂ« pĂ«r pod’ët me brokerĂ«t Kafka, si dhe nodet e veçuara pĂ«r gjeneratorin e ngarkesĂ«s dhe infrastrukturĂ«n e monitorimit.

banzai cluster create -f https://raw.githubusercontent.com/banzaicloud/kafka-operator/master/docs/benchmarks/infrastructure/cluster_eks_202001.json

Kur klasteri EKS tĂ« jetĂ« nĂ« punĂ«, aktivizoni shĂ«rbimin e tij tĂ« integruar tĂ« monitorimit — do tĂ« shpĂ«rndajĂ« Prometheus dhe Grafana nĂ« klaster.

Pjesët sistemike të Kafka

Instaloni pjesët sistemike të Kafka (Zookeeper, kafka-operator) në EKS duke përdorur supertubes CLI:

supertubes install -a --no-democluster --kubeconfig

Klusteri Kafka

Me default, në EKS përdoren volume EBS të tipit gp2, prandaj është e nevojshme të krijohet një klasë e veçantë magazinimi të bazuar në volume io1 për klusterin Kafka:

kubectl create -f - <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-ssd
provisioner: kubernetes.io/aws-ebs
parameters:
  type: io1
  iopsPerGB: "50"
  fsType: ext4
volumeBindingMode: WaitForFirstConsumer
EOF

Vendosni parametrin për brokerët min.insync.replicas=3 dhe shpërndani pod-të e brokerëve në node në tri zona të ndryshme të aksesit:

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

Temat

Ne kemi ekzekutuar paralelisht tre instanca të gjeneratorit të ngarkesës. Secili prej tyre shkruan në temën e tij, që do të thotë se na nevojiten gjithsej tri tema:

supertubes cluster topic create -n kafka --kubeconfig  -f -<<EOF
apiVersion: kafka.banzaicloud.io/v1alpha1
kind: KafkaTopic
metadata:
  name: perftest1
spec:
  name: perftest1
  partitions: 12
  replicationFactor: 3
  retention.ms: '28800000'
  cleanup.policy: delete
EOF

supertubes cluster topic create -n kafka --kubeconfig  -f -<<EOF
apiVersion: kafka.banzaicloud.io/v1alpha1
kind: KafkaTopic
metadata:
    name: perftest2
spec:
  name: perftest2
  partitions: 12
  replicationFactor: 3
  retention.ms: '28800000'
  cleanup.policy: delete
EOF

supertubes cluster topic create -n kafka --kubeconfig  -f -<<EOF
apiVersion: kafka.banzaicloud.io/v1alpha1
kind: KafkaTopic
metadata:
  name: perftest3
spec:
  name: perftest3
  partitions: 12
  replicationFactor: 3
  retention.ms: '28800000'
  cleanup.policy: delete
EOF

PĂ«r çdo temĂ«, faktori i replikimit Ă«shtĂ« 3 — vlera minimale e rekomanduar pĂ«r sistemet production me disponueshmĂ«ri tĂ« lartĂ«.

Mjeti i gjenerimit të ngarkesës

Ne ekzekutuam tre instanca të gjeneratorit të ngarkesës (secili shkruante në një temë të veçantë). Për pod'ët e gjeneratorit të ngarkesës është e nevojshme të specifikohet afiniteti i nyjave, në mënyrë që ato të planifikohen vetëm në nyjat e dedikuara për ta:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: loadtest
  name: perf-load1
  namespace: kafka
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: loadtest
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: loadtest
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: nodepool.banzaicloud.io/name
                operator: In
                values:
                - loadgen
      containers:
      - args:
        - -brokers=kafka-0:29092,kafka-1:29092,kafka-2:29092,kafka-3:29092
        - -topic=perftest1
        - -required-acks=all
        - -message-size=512
        - -workers=20
        image: banzaicloud/perfload:0.1.0-blog
        imagePullPolicy: Always
        name: sangrenel
        resources:
          limits:
            cpu: 2
            memory: 1Gi
          requests:
            cpu: 2
            memory: 1Gi
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30

Disa pika që duhet të keni parasysh:

  • Generatori i ngarkesĂ«s gjeneron mesazhe me gjatĂ«si 512 byte dhe i publikon ato nĂ« Kafka nĂ« grupe prej 500 mesazhesh.
  • Dhe me argumentin -required-acks=all Publikimi konsiderohet i suksesshĂ«m kur tĂ« gjitha replikat e sinkronizuara tĂ« mesazheve janĂ« marrĂ« dhe konfirmuar nga brokerat Kafka. Kjo do tĂ« thotĂ« se nĂ« benchmarkun matĂ«m jo vetĂ«m shpejtĂ«sinĂ« e liderĂ«ve qĂ« marrin mesazhe, por edhe tĂ« pasuesve tĂ« tyre qĂ« riplikojnĂ« mesazhet. Testi i kĂ«tij testi nuk pĂ«rfshin vlerĂ«simin e shpejtĂ«sisĂ« sĂ« leximit nga konsumatorĂ«t. (konsumatorĂ«t) e mesazheve tĂ« sapopranuara, tĂ« cilat ende qĂ«ndrojnĂ« nĂ« cache-nĂ« e sistemit tĂ« operimit, dhe krahasimi i saj me shpejtĂ«sinĂ« e leximit tĂ« mesazheve qĂ« ruhen nĂ« disk.
  • Gjenaratori i ngarkesĂ«s niste paralelisht 20 worker’ë (-workers=20). Çdo worker pĂ«rmban 5 prodhues, tĂ« cilĂ«t e pĂ«rdorin bashkĂ« vetĂ«m lidhjen e worker-it me klustĂ«rin Kafka. KĂ«shtu, çdo gjenarator numĂ«ron 100 prodhues, dhe tĂ« gjithĂ« ata dĂ«rgojnĂ« mesazhe nĂ« klustĂ«rin Kafka.

Vëzhgimi i gjendjes së klustërin

Gjatë testimit të ngarkesës së klustërin Kafka, ne gjithashtu ndoqëm shëndetin e saj, për t'u siguruar që nuk kishte rindizje pod-esh, replika të asinkronizuara dhe kapacitet maksimal me variacione minimale:

  • Generatori i ngarkes jep statistikĂ«n standarde pĂ«r numrin e mesazheve tĂ« publikuara dhe nivelin e gabimeve. PĂ«rqindja e gabimeve duhet tĂ« mbetet nĂ« vlerĂ«n 0,00%.
  • Kontrolli i Fluturimit, i vendosur nga kafka-operator, ofron njĂ« panel monitorimi ku gjithashtu mund tĂ« vĂ«zhgojmĂ« gjendjen e klasterit. PĂ«r tĂ« parĂ« kĂ«tĂ« panel, ekzekutoni:
    supertubes cluster cruisecontrol show -n kafka --kubeconfig
  • Niveli ISR (numri i replikave «in-sync») shrink dhe expansion Ă«shtĂ« 0.

Rezultatet e matjeve

3 brokerĂ«, madhĂ«sia e mesazheve — 512 byte

Me partitionet, të shpërndara në mënyrë të barabartë mes tre brokerëve, arritëm një performancë ~500 Mb/s (afërsisht 990 mijë mesazhe në sekondë):

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Konsumimi i memories nga makina virtuale JVM nuk e kaloi 2 Gb:

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Kapaciteti i diskut arriti kapacitetin maksimal I/O të nodit në të tre instancat ku ishin duke funksionuar brokerët:

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Nga të dhënat mbi përdorimin e memories nga nodet, rezulton se sistemet e buferimit dhe keqkësimi zënë ~10-15 Gb:

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

3 brokerĂ«, madhĂ«sia e mesazheve — 100 byte

Me uljen e madhësisë së mesazheve, kapaciteti bie rreth 15-20%: ndikon koha e shpenzuar për përpunimin e çdo mesazhi. Për më tepër, ngarkesa në procesor është rritur pothuajse dyfish.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Duke qenë se në nyjat e brokerëve ende ka bërthama të papërdorura, performanca mund të përmirësohet përmes ndryshimit të konfigurimit të Kafka-s. Kjo është një detyrë e vështirë, prandaj për të rritur kapacitetin është më mirë të punoni me mesazhe më të mëdha.

4 brokerĂ«, madhĂ«sia e mesazheve — 512 byte

ËshtĂ« e lehtĂ« tĂ« rritet performanca e klustrit Kafka thjesht duke shtuar brokerĂ« tĂ« rinj dhe duke ruajtur balansin e partition-eve (kjo siguron shpĂ«rndarje tĂ« barabartĂ« tĂ« ngarkesĂ«s midis brokerĂ«ve). NĂ« rastin tonĂ«, pas shtimit tĂ« njĂ« brokeri, kapaciteti i klustrit u rrit deri nĂ« ~580 Mb/s (~1.1 milion mesazhe nĂ« sekondĂ«). Rritja ishte mĂ« e vogĂ«l se sa pritej: kryesisht kjo shpjegohet nga disbalancat e partition-eve (jo tĂ« gjithĂ« brokerĂ«t punojnĂ« nĂ« kapacitetin e plotĂ«).

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Konsumimi i memories nga makina JVM mbeti nën 2 Gb:

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Disbalancat e partition-eve ndikuan në funksionimin e brokerëve me ruajtës:

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përcaktojmë madhësinë e përshtatshme për klastern Kafka në Kubernetes.

Përfundimet

Qashtu i paraqitur qasje iteruese mund të zgjerohet për të përfshirë skenarë më të komplikuar, që përfshijnë qindra konsumatorë, riparticionim, azhurnime të instaluara, rindezje pod-esh etj. Të gjitha këto na lejojnë të vlerësojmë kufijtë e mundësive të klasterit Kafka në kushte të ndryshme, të identifikojmë ngushticat në funksionimin e tij dhe të gjejmë mënyra për t'u përballur me to.

Ne kemi krijuar Supertubes pĂ«r vendosjen, konfigurimin, shtimin/zhvendosjen e brokerĂ«ve dhe temave nĂ« mĂ«nyrĂ« tĂ« shpejtĂ« dhe tĂ« lehtĂ«, reagimin ndaj alarmeve dhe pĂ«r tĂ« siguruar qĂ« Kafka tĂ« funksionojĂ« siç duhet nĂ« Kubernetes nĂ« pĂ«rgjithĂ«si. QĂ«llimi ynĂ« Ă«shtĂ« tĂ« ndihmojmĂ« nĂ« pĂ«rqendrimin nĂ« detyrĂ«n kryesore (“tĂ« gjenerosh” dhe “tĂ« konsumosh” mesazhe Kafka), duke ia lĂ«nĂ« tĂ« gjitha punĂ«t e rĂ«ndĂ«sishme Supertubes dhe operatorit Kafka.

Nëse jeni të interesuar për teknologjitë dhe projektet Open Source të Banzai Cloud, ndiqni kompaninë në GitHub, LinkedIn ose Twitter.

P.S. nga përkthyesi

Lexoni gjithashtu në blogun tonë:

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster