Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Nota. transl.In hoc articulo, Banzai Cloud exemplum communicat quomodo eius consuetudo utilitas adhiberi potest ut Kafka facilius utatur intra Kubernetes. Praecepta sequentia illustrant quomodo meliorem magnitudinem infrastructure tuae determinare potes et ipsam Kafka configurare ad perputium requisitum consequendum.

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Apache Kafka est suggestum effusis distributum ad creandos certos, scalabiles et magnos effectus systemata reali temporis effusis. Eius facultates infigentes uti Kubernetes extendi possunt. Hoc enim elaboraverunt Open Source Kafka operator et instrumentum nomine Supertubes. Permittunt te Kafka in Kubernetes currere et variis eius notis uti, ut pulchre tunsae figurae sectoris, scalae metricae cum conscientia recalcitanti, equuleo conscientiae, "mollis" (gratus) volvens auletum, etc.

Conare Supertubes in botro tuo;

curl https://getsupertubes.sh | sh ΠΈ supertubes install -a --no-democluster --kubeconfig <path-to-eks-cluster-kubeconfig-file>

Aut contactum documentum. Etiam legere potes de aliquibus facultatibus Kafkae, quibus opus est utens Supertubes et Kafka operante automatur. Iam de illis in diario scripsimus:

Cum Kafka botrum in Kubernetes explicari volueris, verisimile erit contra impugnationem determinandi optimam magnitudinem subiectae infrastructurae et necessitatem bene modulandi tuam Kafka conformationem ad perputa requisita. Maxima cuiusque sectoris observantia determinatur per executionem partium infrastructurae subiectarum, ut memoria, processus, celeritas orbis, latitudo retis, etc.

Optime, conformatio sectoris talis esse debet ut omnia elementa infrastructura suis facultatibus maximis adhibeantur. Sed in vita reali hoc setup est omnino implicatum. Verisimile est usores sectores configurare ad augendum usum unius vel duorum partium (disco, memoriae vel processus). In universum, sectorem maximum effectum ostendit, cum eius configuratione permittit ut tardissima pars ad suam amplitudinem adhibeatur. Sic oneris ideam asperam accipere possumus quam quis sectorem tractare potest.

Cogitatione etiam numerum sectorum aestimare possumus qui dato onere tractandum est. Attamen in praxi tam multae optiones conformationis in diversis gradibus sunt ut difficillimum est (si non potest) perpendere potentiam particularem schematismi. Aliis verbis, difficillimum est conformationem ex aliqua data agendi ratione disponere.

Pro Supertubes utentes, hoc fere modo sumimus: incipimus cum aliqua configuratione (infrastructure + occasus), deinde metimur suum effectum, accommodabimus occasus sectorem et iterum repetemus processum. Hoc fit donec lentissima pars infrastructurae plene adhibeatur.

Hoc modo clarius accipimus notionem quot sectores botri opus est ad quoddam onus tractandum (etiam numerus sectorum ab aliis factoribus pendet, sicut numerus minimus replicationum relatum ut invicta, numerus partitionis. principes, etc.). Praeterea perspectionem consequimur in quam membra infrastructura verticalem scandentem requirunt.

Articulus hic loquetur de gradibus quae maxime e tardissimis in figurationibus initialibus acquirendae sunt et per modum botri Kafka metimur. Configuratione consi- derata requirit saltem tres cursus sectorum (min.insync.replicas=3) per tres regiones diversae facilitatis distributae. Configurare, scandere ac monitorem infrastructuram Kubernetes, nostro continenti administratione suggestum pro nubibus hybridis utimur. pipeline. Sustinet in-praemissa (nudum metallum, VMware) et quinque genera nubium (Alibaba, AWS, Azure, Google, Oracle), nec non quarumlibet earum coniunctionem.

Cogitationes de Kafka botrum infrastructure et configuratione

Ad exempla infra, elegimus AWS ut nubes provisor et EKS ut Kubernetes distributionem. Similis figuratio adhiberi potest P.K.E. - Kubernetes distributio a Banzai Cloud, authentico CNCF.

orbis

Amazon offert variis EBS volumen genera. Quae media gp2 ΠΈ io1 sunt SSD agitet tamen ut altum throughput gp2 consumit exaggeratus credit (I / O credit), ut typus praetulimus io1qui constantem praebet excelsum throughput.

Types exempli gratia

Effectus Kafka maxime pendet ab cella operativa paginae, ut exemplis satis memoria opus sit pro sectoribus (JVM) et in pagina cache. Exemplum c5.2xlarge - Initium bonum, cum habeat 16 GB ipsius memoriae ac optimized ad opus EBS. Incommodum est quod tantum potest praestare maximam observantiam pro non plus quam 30 minuta singulis 24 horis. Si tuum quod inposuit in longiore temporis spatio perficiendi requirit apicem, alias rationes instantias considerare velis. Id prorsus egimus, intermittentes c5.4xlarge. Praebet maximum throughput in 593,75 Mbps. Maximum throughput of an EBS volumen io1 altior quam exempli gratia c5.4xlarge, ita tardissimum elementum infrastructurae verisimile est esse I/O perput huius exempli generis (quod onus nostrum probat etiam confirmare debet).

network

Retis throughput satis amplum esse debet ad instantias VM et disci, alioquin retis fit bottleneck. In nostro casu retiacula interface c5.4xlarge celeritates sustinet usque ad 10 Gb/s, quod insigniter altior est quam I/O perput instantiae VM.

Sectorem instruere

Sectores disponi debent (accedunt in Kubernetes) ad nodos dedicatos ne contendant cum aliis processibus pro CPU, memoria, retis et disci facultatibus.

Java version

Electio logica est Java 11 quia compatitur cum Docker in sensu quem JVM recte designat processorem et memoriam praesto continens in quo currit sector. Scientes fines CPU esse magni ponderis, JVM interne et perspicue numerum staminum GC et JIT ponit. Kafka imaginem usi sumus banzaicloud/kafka:2.13-2.4.0quae includit Kafka versionem 2.4.0 (Scala 2.13) in Java 11.

Si plura discere de Java/JVM in Kubernetes velis, sequentes epistulas nostras reprehendo:

Sectorem memoria occasus

Duo sunt aspectus magni ponderis ad sectorem memoriam: occasus pro JVM et pro podex Kubernetes. Memoria limitis vasculi appositus debet esse maior quam acervus maximus amplitudo ut JVM locum habeat metaspace Javae in sua memoria residens et pro pagina operativa cache qua Kafka active utitur. In probatis nostris Kafka praesidium sectorum comparavimus cum parametris -Xmx4G -Xms2Get memoria limes vasculi erat 10 Gi. Quaeso nota quod occasus memoriae pro JVM impetrari potest automatice utens -XX:MaxRAMPercentage ΠΈ -X:MinRAMPercentagepro memoria limi- vasculum fundatum.

Sectorem processus occasus

Fere loquendo, parallelismum augendo emendare potes augendo numerum sequelarum ab Kafka adhibitarum. Plures processores in Kafka prompti, eo meliores sunt. In nostro experimento, cum limite 6 processuum incepimus et gradatim (per iterationes) numerum suum levaverunt ad 15. Praeterea proposuimus. num.network.threads=12 in uncinis sectorem augere numerum staminum accipientium notitias a reticulo et mitte. Confestim comperto sectores se non satis celeriter replicationibus recipere, excitaverunt num.replica.fetchers ad 4 augendam celeritatem, qua emptores sectorum nuntiis a ducibus repplicantur.

Onus Generationis Instrumentum

Cavere debes ut generans electum onus capacitatis non exeat ante botrum Kafka (quod est benchmarked) maximum onus attingit. Aliis verbis, oportet praevia aestimationem facultatum instrumentorum generationis peragere, ac etiam eligere instantias rationes ad id cum sufficienti numero processuum et memoriae. In hoc casu, instrumentum nostrum plus oneris facient quam botrus Kafka tractare potest. Post multa experimenta in tribus exemplaribus consedimus c5.4xlargeQuisque cursus auctor erat id aliquam.

Benchmarking

Mensuratio euismod est processus iterativus qui sequentes gradus includit:

  • substructionem substructionem (EKS botrus, Kafka botrus, instrumentum generationis onus, necnon Prometheus et Grafana);
  • generare onus per aliquod tempus ad spargendos errores temere deflexiones in indicibus faciendis collectis;
  • infrastructuram infrastructuram et conformationem sectoris componit ex indicibus observatis faciendis;
  • iterando processum usque ad gradum inquisitionis Kafka botri throughput effectum est. Simul, constanter producibiles esse debet ac minimas variationes in perputo demonstrare.

Proxima sectio describit gradus qui fiebant in processu benchmark test botrum.

vasa cantici

Instrumenta sequentia ad figuram baselineam celeriter explicandam, onera generanda et perficiendum modum adhibita sunt;

  • Banzai Cloud Pipeline pro ordinandis per EKS botrum portassent Amazon c * Prometheum (Colligi Kafka et metrics infrastructure) and grafana (His metrics ad visualize). Nos usi sumus integrated Π² pipeline officia quae vigilantia foederata praebent, collectionem stipem centralem, vulnerabilitatem intuens, recuperatio calamitatis, incepti gradus securitatis et multo magis.
  • Sangrenel - instrumentum oneris probandi Kafka botrum.
  • Grafana dashboards pro visualising Kafka metrice et infrastructure: Kubernetes Kafka, Nodus Exporter.
  • Supertubes CLI ad iter facillime erigendi Kafka botrum in Kubernetes. Zookeeper, Kafka operator, Internuntius et multa alia componentia installantur et apte conformantur ad productionem paratam Kafka botrum in Kubernetes.
    • ut install supertubes CLI uti instructiones provisum hic.

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

EKS botri

Para EKS botrum portassent cum dicata operarius lymphaticorum c5.4xlarge in diversis zonis disponibilitate pro legumine cum Kafka sectoribus, necnon nodis dedicatis ad generantis onus et infrastructuram vigilantiam.

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

Cum EKS botrus sursum est et currens, da eius integrari magna opera β€” Prometheum et Grafana explicabit in botrum.

Kafka systematis components

Instrue systema Kafka componentium (Zookeeper, kafka-operatore) in EKS utendo supertubos CLI:

supertubes install -a --no-democluster --kubeconfig <path-to-eks-cluster-kubeconfig-file>

Kafka botrus

Defalta EKS utitur EBS generis voluminibus gp2, sic debes creare genus repositionis separatum innixum voluminibus io1 for Kafka botrus;

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

Parametri posuit pro sectoribus min.insync.replicas=3 et siliquas in nodis in tribus diversis disponibilitate explicant sectorem;

supertubes cluster create -n kafka --kubeconfig <path-to-eks-cluster-kubeconfig-file> -f https://raw.githubusercontent.com/banzaicloud/kafka-operator/master/docs/benchmarks/infrastructure/kafka_202001_3brokers.yaml --wait --timeout 600

Topics

Tres instantias generantis onus cucurrimus in Parallela. Uterque enim ad suum locum scribit, hoc est, tribus in summa rebus opus est;

supertubes cluster topic create -n kafka --kubeconfig <path-to-eks-cluster-kubeconfig-file> -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 <path-to-eks-cluster-kubeconfig-file> -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 <path-to-eks-cluster-kubeconfig-file> -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

Pro unoquoque argumento, replicatio factoris est 3 β€” minimum commendatum valorem pro rationum productionibus maxime promptum.

Onus Generationis Instrumentum

Tria exemplaria oneris generantis (singuli in argumento separato scripserunt). Siliquas generantis ad onerandum, affinitatem nodi collocare debes, ut tantum in nodi partita accedant:

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

Pauca notare;

  • Onus generans nuntios 512 bytes in longum generat et eas Kafka in batches 500 nuntiorum annuntiat.
  • Per rationem -required-acks=all Publicatio felix censetur cum omnes replicationes conformatae nuntii ab Kafka sectoribus recipiuntur et confirmantur. Hoc significat in Probatio nos non solum celeritatem ducum nuntiis accipiendis metiri, sed etiam eorum sectatores nuntiis replicandis. Propositum huius test non est aestimare celeritas legendi consumendi (consumers) Mandata nuper accepta quae adhuc manent in OS pagina cache, eiusque comparatio cum celeritate legendi nuntiorum in orbe condito.
  • Quod generans onus XX opifices in parallel decurrit (-workers=20). Quisque operarius continet 5 effectores qui nexum laborantis cum Kafka botrum communicant. Quam ob rem quilibet generator 100 effectores habet, et omnes nuntios in Kafka botrum mittunt.

Cras salutem botri

In onere experientiae botri Kafka, etiam vigilantiam suam valetudinem fecimus ut nulla legumen sileo, nullae replicationes obliquae essent, et maximae per ambigua minimarum ambigua;

  • Generator onus vexillum statisticum scribit de numero nuntiorum editorum et errorum. Error rate ut idem maneat 0,00%.
  • cruise oboediebantexplicatur ab kafka-operante, ashboardday praebet ubi etiam statum botri monitor. Ad hanc tabulam view fac:
    supertubes cluster cruisecontrol show -n kafka --kubeconfig <path-to-eks-cluster-kubeconfig-file>
  • ISR gradu (Numerus "in-sync" replicas) retrahere ac dilatare = 0 .

Proventus mensurae

3 sectorum, relatum size - 512 bytes

Particulationes per tres sectores aequaliter distributas consequi potuimus ~ D Mb / s (circiter milia nuntii CMXC per alterum):

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Memoria consummationis machinae virtualis JVM 2 GB non superavit;

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Orbis throughput maximam I/O nodi perputavit in omnibus tribus instantiis in quibus currebant sectores:

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Ex notitia in usu memoriae nodis, sequitur systema buffering et caching sumpsisse ~10-15 GB:

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

3 sectorum, relatum size - 100 bytes

Sicut magnitudo nuntium decrescit, throughput guttae circiter 15-20%: tempus dispensandi unumquemque nuntium afficit. Praeterea processus onus paene duplicatur.

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Cum nodi sectores adhuc nucleos insuetos habent, effectus emendari potest mutando configurationem Kafka. Hoc non est facile, ut perput augeatur melius est maioribus nuntiis laborare.

4 sectorum, relatum size - 512 bytes

Facile augere potes observantiam botri Kafka, additis solum novos sectores et servans stateram partitionum (hoc efficit ut onus aequaliter inter sectores distribuatur). In nobis, additis sectoribus, botrus throughput auctus est ~580 Mb/s (~1,1 decies centena millia nuntia per secundam). Incrementum evasit minus quam expectandum: hoc maxime explicatur per inaequalitatem partitionum (non omnes sectores in summo suae facultatis laborant).

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Memoria consummationis machinae JVM infra 2 GB manebat:

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Opus sectorum agitantium inaequalitate saepta affectus est;

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Determinare convenientem magnitudinem pro Kafka botrum in Kubernetes

Inventiones

Accessus iterativus supra allatus augeri potest ut missiones multiplices complectantur centenas consumerent, repartitiones, renovationes volventes, siliquas sileo, etc. Haec omnia nobis concedit perpendere limites facultatum botri Kafka in variis condicionibus, lagenas collos in operatione sua cognoscere et vias ad eas pugnare.

Supertubes constituimus ut cito ac facile botrum explicamus, configuramus, sectores et argumenta addimus, addimus, summis respondemus, Kafka in operibus generalibus recte in Kubernetes curemus. Propositum est adiuvare vos intendere in praecipuum munus ("generare" et "consumere" Kafka nuntios), et omne laborem relinquere Supertubes et Kafka operator.

Si interesse in Banzai Cloud technologiae et inceptis Open Source, scribe societati at GitHub, Quantcast aut Twitter.

PS ab translator

Lege etiam in nostro diario:

Source: www.habr.com