Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Nānā. unuhi.: Ma kēia ʻatikala, hōʻike ʻo Banzai Cloud i kahi laʻana o ka hoʻohana ʻana i kāna mau mea hana maʻamau i mea e maʻalahi ai ka hoʻohana ʻana iā Kafka i loko o Kubernetes. Hōʻike kēia mau ʻōlelo aʻoaʻo pehea e hiki ai iā ʻoe ke hoʻoholo i ka nui kūpono o kāu ʻōnaehana a hoʻonohonoho iā Kafka ponoʻī e hoʻokō i ka throughput i koi ʻia.

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

ʻO Apache Kafka kahi kahua hoʻoheheʻe i hāʻawi ʻia no ka hoʻokumu ʻana i nā ʻōnaehana holoʻokoʻa hilinaʻi, scalable a me ka hana kiʻekiʻe. Hiki ke hoʻonui ʻia kona mau mana kupaianaha me ka hoʻohana ʻana iā Kubernetes. No kēia ua kūkulu mākou Open Source Kafka mea hoʻohana a he mea paahana i kapaia Nā mea hoʻoheheʻe nui. Hāʻawi lākou iā ʻoe e holo iā Kafka ma Kubernetes a hoʻohana i kāna mau hiʻohiʻona like ʻole, e like me ka hoʻoponopono ʻana i ka hoʻonohonoho broker, metric-based scaling me rebalancing, rack awareness, "soft" (aloha) ka hoʻolaha ʻana i nā mea hou, etc.

E ho'āʻo i nā Supertubes i kāu pūʻulu:

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

A i ʻole pili palapala. Hiki iā ʻoe ke heluhelu e pili ana i kekahi o nā mana o Kafka, ka hana i hoʻohana ʻia me Supertubes a me Kafka operator. Ua kākau mua mākou e pili ana iā lākou ma ka blog:

Ke hoʻoholo ʻoe e kau i kahi pūʻulu Kafka ma nā Kubernetes, e alo paha ʻoe i ka paʻakikī o ka hoʻoholo ʻana i ka nui kūpono o ka ʻōnaehana kumu a me ka pono e hoʻoponopono i kāu hoʻonohonoho Kafka e hoʻokō i nā koi throughput. Hoʻoholo ʻia ka hana kiʻekiʻe loa o kēlā me kēia broker e ka hana ʻana o nā ʻāpana ʻenehana i lalo, e like me ka hoʻomanaʻo, ka processor, ka wikiwiki disk, ka bandwidth network, etc.

ʻO ke kūpono, pono ka hoʻonohonoho broker e hoʻohana ʻia nā mea ʻenehana āpau i ko lākou hiki. Eia naʻe, ma ke ola maoli he paʻakikī kēia hoʻonohonoho. Hiki paha i nā mea hoʻohana ke hoʻonohonoho i nā brokers e hoʻonui i ka hoʻohana ʻana i hoʻokahi a i ʻole ʻelua ʻāpana (disk, memory, a i ʻole processor). Ma ka ʻōlelo maʻamau, hōʻike ka mea hoʻolimalima i ka hana kiʻekiʻe loa ke hiki i kāna hoʻonohonoho ʻana ke hoʻohana i ka mea lohi e hoʻohana ʻia i kona ʻano piha. Ma kēia ala e hiki ai iā mākou ke loaʻa kahi manaʻo koʻikoʻi o ka ukana i hiki i kahi broker ke mālama.

ʻO ka manaʻo, hiki iā mākou ke koho i ka helu o nā brokers e pono ai e mālama i kahi ukana i hāʻawi ʻia. Eia naʻe, ma ka hoʻomaʻamaʻa ʻana he nui nā koho hoʻonohonoho i nā pae like ʻole he paʻakikī loa (inā ʻaʻole hiki ʻole) ke loiloi i ka hana kūpono o kahi hoʻonohonoho. I nā huaʻōlelo ʻē aʻe, paʻakikī loa ka hoʻolālā ʻana i kahi hoʻonohonoho e pili ana i kekahi hana i hāʻawi ʻia.

No nā mea hoʻohana Supertubes, lawe mākou i kēia ala: hoʻomaka mākou me kekahi hoʻonohonoho (infrastructure + setting), a laila ana i kāna hana, hoʻoponopono i nā hoʻonohonoho broker a hana hou i ke kaʻina hana. Hana ʻia kēia a hiki i ka hoʻohana pono ʻana o ka mea lohi o ka ʻōnaehana.

Ma kēia ala, loaʻa iā mākou kahi manaʻo maʻalahi e pili ana i ka nui o nā mea kūʻai aku e pono ai i kahi puʻupuʻu e mālama i kekahi ukana (ʻo ka nui o nā brokers e pili pū ana i nā kumu ʻē aʻe, e like me ka helu liʻiliʻi o nā replicas memo e hōʻoia i ka resiliency, ka helu o ka ʻāpana. alakaʻi, etc.). Eia hou, loaʻa iā mākou ka ʻike e pili ana i nā ʻāpana ʻenehana e pono ai ka scaling vertical.

E kamaʻilio kēia ʻatikala e pili ana i nā ʻanuʻu a mākou e hana ai no ka loaʻa ʻana o nā mea lohi loa i nā hoʻonohonoho mua a ana i ka throughput o kahi pūʻulu Kafka. ʻO kahi hoʻonohonoho hoʻoikaika ikaika e pono ai ma kahi o ʻekolu mau mea hoʻokele holo (min.insync.replicas=3), puʻunaue ʻia ma ʻekolu mau wahi hiki ke komo. No ka hoʻonohonoho, hoʻonui a nānā i ka ʻōnaehana Kubernetes, hoʻohana mākou i kā mākou kahua hoʻokele pahu ponoʻī no nā ao hybrid - Ka Pipeline. Kākoʻo ia ma ka hale (metala ʻole, VMware) a me nā ʻano ao ʻelima (Alibaba, AWS, Azure, Google, Oracle), a me nā hui pū ʻana o ia mau mea.

Nā manaʻo e pili ana i ka ʻōnaehana hui a me ka hoʻonohonoho ʻana o Kafka

No nā hiʻohiʻona ma lalo nei, ua koho mākou iā AWS ma ke ʻano he mea hāʻawi kapuaʻi a me EKS ma ke ʻano o ka hāʻawi Kubernetes. Hiki ke hoʻokō ʻia kahi hoʻonohonoho like me ka hoʻohana ʻana P.K.E. - Hāʻawi ʻia nā Kubernetes mai Banzai Cloud, i hōʻoia ʻia e CNCF.

pā hōkū

Hāʻawi ʻo Amazon i nā ʻano like ʻole Nā ʻano leo EBS. Ma ke kumu GP2 и io1 aia nā SSD drive, akā, e hōʻoia i ka throughput kiʻekiʻe GP2 hoʻopau i nā hōʻaiʻē hōʻiliʻili (I/O nā hōʻaiʻē), no laila makemake mākou i ke ʻano io1, e hāʻawi ana i ka hana kiʻekiʻe.

Nā ʻano laʻana

Ua hilinaʻi nui ʻia ka hana a Kafka i ka ʻaoʻao cache o ka ʻōnaehana hana, no laila pono mākou i nā manawa me ka hoʻomanaʻo nui no nā brokers (JVM) a me ka cache ʻaoʻao. Laʻana c5.2x nui - he hoʻomaka maikaʻi, no ka mea he 16 GB o ka hoʻomanaʻo a hoʻolālā ʻia e hana pū me EBS. ʻO kona hemahema ʻo ia ka hiki ke hāʻawi i ka hana kiʻekiʻe loa no ka ʻoi aku o 30 mau minuke i kēlā me kēia 24 hola. Inā makemake kāu haʻahaʻa hana i ka hana kiʻekiʻe no ka manawa lōʻihi, makemake paha ʻoe e noʻonoʻo i nā ʻano hiʻohiʻona ʻē aʻe. ʻO ia ka mea a mākou i hana ai, kū ma c5.4x nui. Hāʻawi ia i ka palena kiʻekiʻe i loko 593,75 Mb/s. Ka nui loa o ka nui o ka EBS io1 kiʻekiʻe ma mua o ka hiʻohiʻona c5.4x nui, no laila, ʻo ka mea lohi loa o ka ʻōnaehana ʻo ia ka I/O throughput o kēia ʻano instance (kahi e hōʻoia ai kā mākou hoʻāʻo ukana).

Pūnaewele

Pono e lawa ka nui o ka pūnaewele i ka hoʻohālikelike ʻana i ka hana o ka VM instance a me ka disk, i ʻole e lilo ka pūnaewele i bottleneck. I kā mākou hihia, ke kikowaena pūnaewele c5.4x nui kākoʻo i ka wikiwiki a hiki i 10 Gb/s, ʻoi aku ka kiʻekiʻe ma mua o ka I/O throughput o kahi VM.

Hoʻokomo ʻia nā mea kūʻai aku

Pono e hoʻoili ʻia nā mea kūʻai aku (i hoʻonohonoho ʻia ma Kubernetes) i nā node i hoʻolaʻa ʻia e pale aku i ka hoʻokūkū me nā kaʻina hana ʻē aʻe no ka CPU, ka hoʻomanaʻo, ka pūnaewele, a me nā kumuwaiwai disk.

Manaʻo Java

ʻO ka koho kūpono ʻo Java 11 no ka mea ua kūpono ia me Docker ma ke ʻano he hoʻoholo pololei ʻo JVM i nā kaʻina hana a me ka hoʻomanaʻo i loaʻa i ka pahu kahi e holo ai ka mea hoʻolimalima. Ke ʻike nei he mea nui nā palena o ka mea hana, ua hoʻonohonoho ʻo JVM i loko a maopopo i ka helu o nā kaula GC a me nā kaula JIT. Ua hoʻohana mākou i ke kiʻi Kafka banzaicloud/kafka:2.13-2.4.0, e komo pū ana me Kafka version 2.4.0 (Scala 2.13) ma Java 11.

Inā makemake ʻoe e aʻo hou e pili ana iā Java/JVM ma nā Kubernetes, e nānā i kā mākou mau pou:

Nā hoʻonohonoho hoʻomanaʻo broker

ʻElua mau mea nui i ka hoʻonohonoho ʻana i ka hoʻomanaʻo broker: nā hoʻonohonoho no ka JVM a no ka pod Kubernetes. Pono ka palena hoʻomanaʻo i hoʻonohonoho ʻia no kahi pod ma mua o ka nui o ka puʻu nui i loaʻa i ka JVM kahi lumi no ka Java metaspace e noho ana i loko o kona hoʻomanaʻo ponoʻī a no ka ʻaoʻao ʻaoʻao cache a Kafka e hoʻohana ikaika nei. I kā mākou hoʻāʻo ʻana ua hoʻolaha mākou i nā mea hoʻolaha Kafka me nā ʻāpana -Xmx4G -Xms2G, a ʻo ka palena hoʻomanaʻo no ka pod 10 Gi. E ʻoluʻolu e hiki ke loaʻa maʻalahi nā hoʻonohonoho hoʻomanaʻo no ka JVM me ka hoʻohana ʻana -XX:MaxRAMPercentage и -X:MinRAMPercentage, ma muli o ka palena hoʻomanaʻo no ka pod.

Nā hoʻonohonoho hoʻonohonoho hoʻonohonoho broker

Ma ka ʻōlelo maʻamau, hiki iā ʻoe ke hoʻomaikaʻi i ka hana ma ka hoʻonui ʻana i ka parallelism ma ka hoʻonui ʻana i ka helu o nā kaula i hoʻohana ʻia e Kafka. ʻOi aku ka nui o nā kaʻina hana no Kafka, ʻoi aku ka maikaʻi. I kā mākou ho'āʻo, hoʻomaka mākou me ka palena o 6 processors a me ka lohi (ma o nā hoʻololi) hoʻonui i kā lākou helu i 15. Eia kekahi, ua hoʻonohonoho mākou. num.network.threads=12 i nā hoʻonohonoho broker e hoʻonui i ka helu o nā kaula i loaʻa ka ʻikepili mai ka pūnaewele a hoʻouna aku. I ka ʻike koke ʻana ʻaʻole hiki i nā mea hoʻolaha hahai ke loaʻa koke i nā kope, ua hāpai lākou num.replica.fetchers i ka 4 e hoʻonui i ka wikiwiki i hoʻopili hou ai nā mea hahai i nā leka mai nā alakaʻi.

Mea Hana Hana Hoouka

Pono ʻoe e hōʻoia ʻaʻole e pau ka mana o ka mea hoʻohana i koho ʻia ma mua o ka hiki ʻana o ka puʻupuʻu Kafka (e hōʻike ʻia ana) i kona haʻahaʻa kiʻekiʻe. I nā huaʻōlelo ʻē aʻe, pono e hana i kahi loiloi mua o nā hiki o ka mea hana hoʻoili ukana, a koho pū i nā ʻano hiʻohiʻona no ia me ka nui o nā kaʻina hana a me ka hoʻomanaʻo. I kēia hihia, ʻoi aku ka nui o kā mākou mea hana ma mua o ka hiki i ka hui Kafka ke mālama. Ma hope o nā hoʻokolohua he nui, ua hoʻoholo mākou i ʻekolu kope c5.4x nui, ua loaʻa i kēlā me kēia mea kahi mīkini hana e holo ana.

Ka hoʻopaʻa ʻana

ʻO ke ana ʻana i ka hana he kaʻina hana hoʻololi e pili ana i nā pae aʻe:

  • ka hoʻonohonoho ʻana i nā ʻōnaehana (EKS cluster, Kafka cluster, load generation tool, a me Prometheus a me Grafana);
  • ka hoʻoulu ʻana i kahi ukana no kekahi manawa e kānana i nā hoʻokaʻawale ʻokoʻa i nā hōʻailona hana i hōʻiliʻili ʻia;
  • ka hoʻoponopono ʻana i ka ʻōnaehana a me ka hoʻonohonoho ʻana o ka mea hoʻopili ma muli o nā hōʻailona hana i ʻike ʻia;
  • e hana hou i ke kaʻina hana a hiki i ka loaʻa ʻana o ka pae i koi ʻia o ka puʻupuʻu puʻupuʻu Kafka. I ka manawa like, pono e hana hou ʻia a hōʻike i nā loli liʻiliʻi i ka throughput.

Hōʻike ka ʻāpana aʻe i nā ʻanuʻu i hana ʻia i ka wā o ke kaʻina hana hōʻailona hōʻailona puʻupuʻu.

Nā Mea Hana

Ua hoʻohana ʻia kēia mau mea hana no ka hoʻonohonoho wikiwiki ʻana i kahi hoʻonohonoho baseline, hana i nā ukana, a ana i ka hana:

  • Banzai Cloud Pipeline no ka hoʻonohonoho ʻana i kahi pūʻulu EKS mai Amazon c IHILA (e hōʻiliʻili i ka Kafka a me nā anana waiwai) a grafana (e nānā i kēia mau ana). Ua lawe pono mākou hui pū ʻia в Ka Pipeline nā lawelawe e hāʻawi ana i ka nānā ʻana i hui pū ʻia, ka hōʻiliʻili lāʻau kikowaena, ka nānā ʻana i ka nāwaliwali, ka hoʻihoʻi ʻana i ka pōʻino, ka palekana ʻoihana a me nā mea hou aku.
  • Sangrenel - he mea hana no ka hoʻāʻo ʻana i kahi pūʻulu Kafka.
  • ʻO nā papa kuhikuhi Grafana no ka nānā ʻana i nā metric Kafka a me nā ʻōnaehana: Kubernetes Kafka, Node Exporter.
  • Supertubes CLI no ke ala maʻalahi loa e hoʻonohonoho i kahi pūʻulu Kafka ma Kubernetes. Hoʻokomo ʻia a hoʻonohonoho pono ʻia ʻo Zookeeper, Kafka operator, Envoy a me nā mea ʻē aʻe he nui e holo i kahi pūʻulu Kafka mākaukau hana ma Kubernetes.
    • E hoʻoulu supertubes CLI e hoohana i na kuhikuhi i haawiia maanei.

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Huina EKS

E hoʻomākaukau i kahi pūʻulu EKS me nā node limahana hoʻolaʻa c5.4x nui i nā ʻāpana ʻokoʻa like ʻole no nā pods me Kafka brokers, a me nā nodes i hoʻolaʻa ʻia no ka mea hoʻomohala ukana a me nā ʻōnaehana nānā.

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

Ke holo a holo ka pūʻulu EKS, hiki iā ia ke hoʻohui lawelawe nānā - e hoʻonoho ʻo ia iā Prometheus a me Grafana i kahi hui.

Nā ʻāpana ʻōnaehana Kafka

E hoʻouka i nā ʻāpana ʻōnaehana Kafka (Zookeeper, kafka-operator) ma EKS me ka hoʻohana ʻana i nā supertubes CLI:

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

pūʻulu Kafka

Ma ka maʻamau, hoʻohana ʻo EKS i nā puke EBS o ke ʻano GP2, no laila pono ʻoe e hana i kahi papa mālama ʻokoʻa e pili ana i nā volumes io1 no ka hui 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

E hoʻonoho i ka palena no nā mea hoʻolimalima min.insync.replicas=3 a kau i nā pods broker ma nā node i ʻekolu mau ʻāpana hiki ke loaʻa:

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

Kumuhana

Ua holo mākou i ʻekolu mau mea hana hoʻoili ukana i ka like. Kākau kēlā me kēia o lākou i kā lākou kumuhana ponoʻī, ʻo ia hoʻi, pono mākou i ʻekolu mau kumuhana i ka huina:

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

No kēlā me kēia kumuhana, ʻo ka helu hoʻopiʻi he 3—ke kumu waiwai haʻahaʻa i manaʻo ʻia no nā ʻōnaehana hana i loaʻa loa.

Mea Hana Hana Hoouka

Ua hoʻokuʻu mākou i ʻekolu kope o ka mīkini hoʻoili ukana (kākau kēlā me kēia ma kahi kumuhana ʻokoʻa). No ka hoʻouka ʻana i nā pods generator, pono ʻoe e hoʻonohonoho i ka node affinity i hoʻonohonoho ʻia lākou ma nā nodes i hāʻawi ʻia no lākou:

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

ʻO kekahi mau mea e nānā ai:

  • Hoʻopuka ka mea hana hoʻoili i nā memo o 512 bytes ka lōʻihi a hoʻopuka iā Kafka i nā pūʻulu o 500 mau leka.
  • Ke hoʻohana nei i ka hoʻopaʻapaʻa -required-acks=all Manaʻo ʻia ka paʻi ʻana i ka holomua ke loaʻa a hoʻopaʻa ʻia nā kope a pau o ka leka i hoʻopaʻa ʻia e nā mea kūʻai aku ʻo Kafka. ʻO ke ʻano kēia, ʻaʻole mākou i ana i ka wikiwiki o nā alakaʻi i ka loaʻa ʻana o nā leka, akā ʻo kā lākou poʻe hahai i ka hoʻopili ʻana i nā leka. ʻO ke kumu o kēia hoʻokolohua ʻaʻole ia e loiloi i ka wikiwiki heluhelu o ka mea kūʻai (nā mea kūʻai aku) i loaʻa i kēia manawa nā memo i koe i loko o ka waihona ʻaoʻao OS, a me kāna hoʻohālikelike ʻana me ka wikiwiki heluhelu o nā memo i mālama ʻia ma ka disk.
  • E holo like ana ka mea hana ukana i 20 mau limahana (-workers=20). Loaʻa i kēlā me kēia limahana nā mea hana 5 e kaʻana like i ka pilina o ka limahana i ka hui Kafka. ʻO ka hopena, loaʻa i kēlā me kēia mīkini hana 100 mau mea hana, a hoʻouna lākou a pau i nā leka i ka hui Kafka.

Ka nānā 'ana i ke olakino o ka pū'ulu

I ka wā o ka hoʻāʻo ʻana i ka puʻupuʻu Kafka, ua nānā pū mākou i kona olakino e hōʻoia ʻaʻole i hoʻomaka hou ʻia nā pod, ʻaʻohe replicas out-of-sync, a me ka loaʻa ʻana o ka nui me ka liʻiliʻi liʻiliʻi.

  • Kākau ka mea hoʻoili ukana i nā helu helu maʻamau e pili ana i ka helu o nā memo i paʻi ʻia a me ka helu kuhi. Pono e mau ka helu kuhi hewa 0,00%.
  • Kaʻa holo moku, hoʻolālā ʻia e kafka-operator, hāʻawi i kahi dashboard kahi e hiki ai iā mākou ke nānā i ke kūlana o ka hui. No ka ʻike ʻana i kēia papa hana:
    supertubes cluster cruisecontrol show -n kafka --kubeconfig <path-to-eks-cluster-kubeconfig-file>
  • pae ISR (ka helu o nā kope “in-sync”) ʻO ka emi a me ka hoʻonui ʻana ua like ia me 0.

Nā hualoaʻa ana

3 brokers, ka nui memo - 512 bytes

Me nā ʻāpana i hoʻokaʻawale ʻia i ʻekolu mau brokers, hiki iā mākou ke hoʻokō i ka hana ~500 Mb/s (ma kahi o 990 tausani memo i kekona):

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

ʻAʻole i ʻoi aku ka nui o ka hoʻohana ʻana o ka mīkini virtual JVM ma mua o 2 GB:

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ua hōʻea ʻo Disk throughput i ka nui o ka I/O node throughput ma nā manawa ʻekolu i holo ai nā mea hoʻolimalima:

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Mai ka ʻikepili e pili ana i ka hoʻohana ʻana i ka hoʻomanaʻo e nā nodes, e hahai ana i ka mālama ʻana i ka ʻōnaehana a me ka caching i lawe iā ~ 10-15 GB:

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

3 brokers, ka nui memo - 100 bytes

Ke emi nei ka nui o ka memo, hāʻule ka throughput ma kahi o 15-20%: pili ka manawa i hoʻopau ʻia i kēlā me kēia memo. Eia hou, ua aneane pālua ka ukana o ka mea hana.

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

No ka loaʻa ʻole o nā cores i hoʻohana ʻole ʻia, hiki ke hoʻomaikaʻi ʻia ka hana ma ka hoʻololi ʻana i ka hoʻonohonoho Kafka. ʻAʻole kēia he hana maʻalahi, no laila e hoʻonui i ka throughput ʻoi aku ka maikaʻi o ka hana me nā leka nui.

4 brokers, ka nui memo - 512 bytes

Hiki iā ʻoe ke hoʻonui maʻalahi i ka hana o kahi puʻupuʻu Kafka ma ka hoʻohui ʻana i nā brokers hou a mālama i ke koena o nā ʻāpana (ʻo ia ka mea e hoʻokaʻawale ʻia ka ukana ma waena o nā brokers). I kā mākou hihia, ma hope o ka hoʻohui ʻana i kahi mea kūʻai aku, ua hoʻonui ʻia ka throughput cluster i ~580 Mb/s (~1,1 miliona memo no kekona). Ua emi iho ka ulu ʻana ma mua o ka mea i manaʻo ʻia: ua wehewehe nui ʻia kēia e ka imbalance o nā ʻāpana (ʻaʻole hana nā mea hoʻolale āpau i ka piko o ko lākou hiki).

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Noho ʻia ka hoʻohana ʻana i ka hoʻomanaʻo o ka mīkini JVM ma lalo o 2 GB:

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ua hoʻopilikia ʻia ka hana a nā brokers me nā drive e ka ʻole o nā ʻāpana:

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

Ke hoʻoholo nei i ka nui kūpono no kahi pūʻulu Kafka ma Kubernetes

haʻina

Hiki ke hoʻonui ʻia ke ala iterative i hōʻike ʻia ma luna e uhi i nā hiʻohiʻona paʻakikī e pili ana i nā haneli o nā mea kūʻai aku, repartitioning, rolling updates, pod restarts, etc. ʻO kēia mau mea a pau e hiki ai iā mākou ke loiloi i nā palena o nā mana o ka hui Kafka i nā kūlana like ʻole, e ʻike i nā bottlenecks i kāna hana a ʻimi i nā ala e hakakā ai iā lākou.

Ua hoʻolālā mākou i nā Supertubes e hoʻonohonoho wikiwiki a maʻalahi i kahi pūʻulu, hoʻonohonoho iā ia, hoʻohui / wehe i nā brokers a me nā kumuhana, pane i nā mākaʻikaʻi, a e hōʻoia i ka hana pono ʻana o Kafka ma nā Kubernetes. ʻO kā mākou pahuhopu ke kōkua iā ʻoe e noʻonoʻo i ka hana nui ("hana" a "hoʻopau" i nā leka Kafka), a waiho i nā hana paʻakikī a pau iā Supertubes a me ka mea hoʻokele Kafka.

Inā makemake ʻoe i nā ʻenehana Banzai Cloud a me nā papahana Open Source, e kākau inoa i ka hui ma GitHub, LinkedIn ai ole ia, Twitter.

PS mai ka unuhi

E heluhelu pū ma kā mākou blog:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka