ããŒãã 翻蚳ã: ãã®èšäºã§ã¯ãBanzai Cloud ããã«ã¹ã¿ã ããŒã«ã䜿çšã㊠Kubernetes å 㧠Kafka ã䜿ããããããæ¹æ³ã®äŸã玹ä»ããŸãã 次ã®æé ã§ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®æé©ãªãµã€ãºã決å®ããå¿ èŠãªã¹ã«ãŒããããéæããããã« Kafka èªäœãæ§æããæ¹æ³ã瀺ããŸãã
Apache Kafka ã¯ãä¿¡é Œæ§ãé«ããã¹ã±ãŒã©ãã«ã§é«æ§èœãªãªã¢ã«ã¿ã€ã ã¹ããªãŒãã³ã° ã·ã¹ãã ãäœæããããã®åæ£ã¹ããªãŒãã³ã° ãã©ãããã©ãŒã ã§ãã ãã®åªããæ©èœã¯ãKubernetes ã䜿çšããŠæ¡åŒµã§ããŸãã ãã®ããã«ç§ãã¡ã¯éçºããŸãã
ã¯ã©ã¹ã¿ãŒå 㧠Supertube ãè©ŠããŠãã ããã
curl https://getsupertubes.sh | sh О supertubes install -a --no-democluster --kubeconfig <path-to-eks-cluster-kubeconfig-file>
ãŸãã¯é£çµ¡ããŠãã ãã
ããã¥ã¡ã³ããŒã·ã§ã³ ã ãŸããKafka ã®æ©èœã®äžéšã«ã€ããŠèªãããšãã§ããŸãããã®äœæ¥ã¯ãSupertube ãš Kafka ãªãã¬ãŒã¿ãŒã䜿çšããŠèªååãããŸãã ãããã«ã€ããŠã¯ãã§ã«ããã°ã§æžããŸããã
ãªããŠãã£ãïŒ Kubernetes çšã®ãã XNUMX ã€ã® Kafka ãªãã¬ãŒã¿ãŒ ;Prometheus ã¡ããªã¯ã¹ã«åºã¥ã㊠Kafka ãç£èŠããã³æäœãã ;Kubernetes ã§ã® Kafka ã©ãã¯ã®èªè ;Istio äžã§ Apache Kafka ãå®è¡ - ãã³ãããŒã¯ ;Kafka ãªãã¬ãŒã¿ãŒã«ãããŠãŒã¶ãŒèªèšŒããã³ã¢ã¯ã»ã¹å¶åŸ¡ãããã¯ã©ã¹ã¿ãŒ ;Kafka ã®ããŒãªã³ã° ã¢ããã°ã¬ãŒããš Kubernetes ã§ã®åçæ§æ ;Kafka ã® Envoy ãããã³ã« ãã£ã«ã¿ãŒãã¡ãã·ã¥å .
Kafka ã¯ã©ã¹ã¿ãŒã Kubernetes ã«ãããã€ããããšã«ããå Žåãåºç€ãšãªãã€ã³ãã©ã¹ãã©ã¯ãã£ã®æé©ãªãµã€ãºã決å®ããã¹ã«ãŒãããèŠä»¶ãæºããããã« Kafka æ§æã埮調æŽããå¿ èŠããããšãã課é¡ã«çŽé¢ããå¯èœæ§ããããŸãã åãããŒã«ãŒã®æ倧ããã©ãŒãã³ã¹ã¯ãã¡ã¢ãªãããã»ããµããã£ã¹ã¯é床ããããã¯ãŒã¯åž¯åå¹ ãªã©ãåºç€ãšãªãã€ã³ãã©ã¹ãã©ã¯ã㣠ã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ã«ãã£ãŠæ±ºãŸããŸãã
çæ³çã«ã¯ããããŒã«ãŒæ§æã¯ããã¹ãŠã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãŒèŠçŽ ããã®æ©èœãæ倧éã«æŽ»çšã§ããããã«ããå¿ èŠããããŸãã ãã ããå®éã«ã¯ããã®èšå®ã¯éåžžã«è€éã§ãã ãŠãŒã¶ãŒã¯ãXNUMX ã€ãŸã㯠XNUMX ã€ã®ã³ã³ããŒãã³ã (ãã£ã¹ã¯ãã¡ã¢ãªããŸãã¯ããã»ããµ) ãæ倧éã«äœ¿çšããããã«ãããŒã«ãŒãæ§æããå¯èœæ§ãé«ããªããŸãã äžè¬ã«ããããŒã«ãŒã¯ãæãé ãã³ã³ããŒãã³ããæ倧éã«äœ¿çšã§ããæ§æã«ãªã£ãŠããå Žåã«æ倧ã®ããã©ãŒãã³ã¹ãçºæ®ããŸãã ãã®ããã«ããŠãXNUMX ã€ã®ãããŒã«ãŒãåŠçã§ããè² è·ã®å€§ãŸããªã¢ã€ãã¢ãåŸãããšãã§ããŸãã
çè«çã«ã¯ãç¹å®ã®è² è·ãåŠçããããã«å¿ èŠãªãããŒã«ãŒã®æ°ãèŠç©ããããšãã§ããŸãã ãã ããå®éã«ã¯ãããŸããŸãªã¬ãã«ã§éåžžã«å€ãã®æ§æãªãã·ã§ã³ããããããç¹å®ã®æ§æã®æœåšçãªããã©ãŒãã³ã¹ãè©äŸ¡ããããšã¯ (äžå¯èœã§ã¯ãªãã«ããŠã) éåžžã«å°é£ã§ãã èšãæããã°ãç¹å®ã®ããã©ãŒãã³ã¹ã«åºã¥ããŠæ§æãèšç»ããããšã¯éåžžã«å°é£ã§ãã
Supertubes ãŠãŒã¶ãŒã®å Žåãç§ãã¡ã¯éåžžã次ã®ã¢ãããŒããæ¡çšããŸãããŸããããã€ãã®æ§æ (ã€ã³ãã©ã¹ãã©ã¯ã㣠+ èšå®) ããéå§ãã次ã«ãã®ããã©ãŒãã³ã¹ã枬å®ãããããŒã«ãŒèšå®ã調æŽããŠãããã»ã¹ãå床繰ãè¿ããŸãã ããã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®æãé ãã³ã³ããŒãã³ããå®å šã«å©çšããããŸã§çºçããŸãã
ãã®ããã«ããŠãã¯ã©ã¹ã¿ãŒãç¹å®ã®è² è·ãåŠçããããã«å¿ èŠãªãããŒã«ãŒã®æ°ãããæ確ã«ææ¡ã§ããŸã (ãããŒã«ãŒã®æ°ã¯ãå埩æ§ã確ä¿ããããã®ã¡ãã»ãŒãž ã¬ããªã«ã®æå°æ°ãããŒãã£ã·ã§ã³ã®æ°ãªã©ã®ä»ã®èŠçŽ ã«ãäŸåããŸã)ãªãŒããŒãªã©ïŒã ããã«ãã©ã®ã€ã³ãã©ã¹ãã©ã¯ã㣠ã³ã³ããŒãã³ããåçŽæ¹åã®ã¹ã±ãŒãªã³ã°ãå¿ èŠãšãããã«ã€ããŠã®æŽå¯ãåŸãããŸãã
ãã®èšäºã§ã¯ãåææ§æã§æãé
ãã³ã³ããŒãã³ããæ倧éã«æŽ»çšããKafka ã¯ã©ã¹ã¿ãŒã®ã¹ã«ãŒãããã枬å®ããããã«å®è¡ããæé ã«ã€ããŠèª¬æããŸãã 埩å
åã®é«ãæ§æã«ã¯ãå°ãªããšã XNUMX ã€ã®ãããŒã«ãŒãå®è¡ããå¿
èŠããããŸã (min.insync.replicas=3
)ãXNUMX ã€ã®ç°ãªãã¢ã¯ã»ã·ããªã㣠ãŸãŒã³ã«åæ£ãããŠããŸãã Kubernetes ã€ã³ãã©ã¹ãã©ã¯ãã£ã®æ§æãæ¡åŒµãç£èŠã«ã¯ããã€ããªãã ã¯ã©ãŠãçšã®ç¬èªã®ã³ã³ãã管çãã©ãããã©ãŒã ã䜿çšããŸãã
Kafka ã¯ã©ã¹ã¿ãŒã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãšæ§æã«ã€ããŠã®èã
以äžã®äŸã§ã¯ãã¯ã©ãŠããããã€ããŒãšã㊠AWS ãéžæããKubernetes ãã£ã¹ããªãã¥ãŒã·ã§ã³ãšã㊠EKS ãéžæããŸããã åæ§ã®æ§æã¯æ¬¡ã䜿çšããŠå®è£
ã§ããŸãã
ãã©ã€ã
ã¢ããŸã³ã§ã¯ããŸããŸãªååãæäŸãããŠããŸã
ã€ã³ã¹ã¿ã³ã¹ã®çš®é¡
Kafka ã®ããã©ãŒãã³ã¹ã¯ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®ããŒãž ãã£ãã·ã¥ã«å€§ããäŸåããããããããŒã«ãŒ (JVM) ãšããŒãž ãã£ãã·ã¥ã«ååãªã¡ã¢ãªãåããã€ã³ã¹ã¿ã³ã¹ãå¿
èŠã§ãã å®äŸ c5.2xã©ãŒãž - 16 GB ã®ã¡ã¢ãªãš
СеÑÑ
ãããã¯ãŒã¯ ã¹ã«ãŒãããã¯ãVM ã€ã³ã¹ã¿ã³ã¹ãšãã£ã¹ã¯ã®ããã©ãŒãã³ã¹ã«æ¯ã¹ãŠååã«å€§ããå¿ èŠããããŸããããã§ãªããšããããã¯ãŒã¯ãããã«ããã¯ã«ãªããŸãã ç§ãã¡ã®å Žåããããã¯ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ã¯ c5.4xã©ãŒãž ã¯æ倧 10 Gb/s ã®é床ããµããŒãããŸããããã¯ãVM ã€ã³ã¹ã¿ã³ã¹ã® I/O ã¹ã«ãŒããããããå€§å¹ ã«é«éã§ãã
ãããŒã«ãŒã®å°å ¥
CPUãã¡ã¢ãªããããã¯ãŒã¯ããã£ã¹ã¯ ãªãœãŒã¹ã«é¢ããŠä»ã®ããã»ã¹ãšç«¶åããã®ãé¿ããããã«ããããŒã«ãŒã¯å°çšããŒãã«ããã〠(Kubernetes ã§ã¹ã±ãžã¥ãŒã«) ããå¿ èŠããããŸãã
Java ããŒãžã§ã³
è«ççãªéžæ㯠Java 11 ã§ããããã¯ãJVM ããããŒã«ãŒãå®è¡ãããŠããã³ã³ãããŒã§äœ¿çšã§ããããã»ããµãŒãšã¡ã¢ãªãŒãæ£ããå€æãããšããæå³ã§ Docker ãšäºææ§ãããããã§ãã CPU å¶éãéèŠã§ããããšãèªèããŠãããããJVM 㯠GC ã¹ã¬ãããš JIT ã¹ã¬ããã®æ°ãå
éšçãã€ééçã«èšå®ããŸãã Kafka ã€ã¡ãŒãžã䜿çšããŸãã banzaicloud/kafka:2.13-2.4.0
ããã«ã¯ãJava 2.4.0 äžã® Kafka ããŒãžã§ã³ 2.13 (Scala 11) ãå«ãŸããŸãã
Kubernetes äžã® Java/JVM ã«ã€ããŠè©³ããç¥ãããå Žåã¯ã次ã®æçš¿ãã芧ãã ããã
ãããŒã«ãŒã®ã¡ã¢ãªèšå®
ãããŒã«ãŒ ã¡ã¢ãªã®æ§æã«ã¯ãJVM ã®èšå®ãš Kubernetes ãããã®èšå®ãšãã XNUMX ã€ã®éèŠãªåŽé¢ããããŸãã ãããã«èšå®ãããã¡ã¢ãªå¶éã¯ãJVM ãç¬èªã®ã¡ã¢ãªå
ã«åžžé§ãã Java ã¡ã¿ã¹ããŒã¹ãšãKafka ãã¢ã¯ãã£ãã«äœ¿çšãããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®ããŒãž ãã£ãã·ã¥ã®ããã®ã¹ããŒã¹ã確ä¿ã§ããããã«ãæ倧ââããŒã ãµã€ãºãã倧ããããå¿
èŠããããŸãã ãã¹ãã§ã¯ããã©ã¡ãŒã¿ãæå®ã㊠Kafka ãããŒã«ãŒãèµ·åããŸããã -Xmx4G -Xms2G
ããããã®ã¡ã¢ãªå¶é㯠10 Gi
ã JVM ã®ã¡ã¢ãªèšå®ã¯ã次ã®ã³ãã³ãã䜿çšããŠèªåçã«ååŸã§ããããšã«æ³šæããŠãã ããã -XX:MaxRAMPercentage
О -X:MinRAMPercentage
ããããã®ã¡ã¢ãªå¶éã«åºã¥ããŸãã
ãããŒã«ãŒã®ããã»ããµèšå®
äžè¬ã«ãKafka ã§äœ¿çšãããã¹ã¬ããã®æ°ãå¢ãããŠäžŠååŠçãå¢ãããšãããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã Kafka ã§äœ¿çšã§ããããã»ããµãå€ããã°å€ãã»ã©è¯ãã§ãã ç§ãã¡ã®ãã¹ãã§ã¯ãããã»ããµæ°ã®å¶éã 6 ã€ãšããŠéå§ããåŸã
ã« (å埩ãéããŠ) ããã»ããµæ°ã 15 ãŸã§å¢ãããŸããã num.network.threads=12
ãããŒã«ãŒèšå®ã§ããããã¯ãŒã¯ããããŒã¿ãåä¿¡ããŠââéä¿¡ããã¹ã¬ããã®æ°ãå¢ãããŸãã åŸç¶ã®ãããŒã«ãŒãã¬ããªã«ãè¿
éã«åä¿¡ã§ããªãããšãããã«çºèŠãã圌ãã¯ã num.replica.fetchers
ãã©ãã¯ãŒ ãããŒã«ãŒããªãŒããŒããã®ã¡ãã»ãŒãžãè€è£œããé床ãåäžãããã«ã¯ã4 ã«å¢ãããŸãã
è² è·çæããŒã«
Kafka ã¯ã©ã¹ã¿ãŒ (ãã³ãããŒã¯å¯Ÿè±¡) ãæå€§è² è·ã«éããåã«ãéžæããããŒã ãžã§ãã¬ãŒã¿ãŒã®å®¹éãäžè¶³ããªãããã«ããå¿ èŠããããŸãã ã€ãŸããè² è·çæããŒã«ã®æ©èœãäºåã«è©äŸ¡ããååãªæ°ã®ããã»ããµãšã¡ã¢ãªãåããã€ã³ã¹ã¿ã³ã¹ ã¿ã€ããéžæããå¿ èŠããããŸãã ãã®å Žåãç§ãã¡ã®ããŒã«ã¯ãKafka ã¯ã©ã¹ã¿ãŒãåŠçã§ãã以äžã®è² è·ãçæããŸãã å€ãã®å®éšãè¡ã£ãçµæãXNUMX éšã«èœã¡çããŸããã c5.4xã©ãŒãžãããããã«çºé»æ©ã皌åããŠããŸããã
ãã³ãããŒã¯
ããã©ãŒãã³ã¹æž¬å®ã¯ã次ã®æ®µéãå«ãå埩ããã»ã¹ã§ãã
- ã€ã³ãã©ã¹ãã©ã¯ã㣠(EKS ã¯ã©ã¹ã¿ãŒãKafka ã¯ã©ã¹ã¿ãŒãè² è·çæããŒã«ãPrometheus ããã³ Grafana) ã®ã»ããã¢ããã
- åéãããããã©ãŒãã³ã¹ææšã®ã©ã³ãã ãªåå·®ããã£ã«ã¿ãªã³ã°ããããã«ãäžå®æéè² è·ãçæããŸãã
- 芳å¯ãããããã©ãŒãã³ã¹ææšã«åºã¥ããŠãããŒã«ãŒã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãšæ§æã調æŽããã
- Kafka ã¯ã©ã¹ã¿ãŒã®å¿ èŠãªã¬ãã«ã®ã¹ã«ãŒããããéæããããŸã§ããã®ããã»ã¹ãç¹°ãè¿ããŸãã åæã«ãäžè²«ããŠåçŸå¯èœã§ãããã¹ã«ãŒãããã®å€åãæå°éã§ããããšãå®èšŒããå¿ èŠããããŸãã
次ã®ã»ã¯ã·ã§ã³ã§ã¯ããã¹ã ã¯ã©ã¹ã¿ãŒã®ãã³ãããŒã¯ ããã»ã¹äžã«å®è¡ãããæé ã«ã€ããŠèª¬æããŸãã
ããŒã«
次ã®ããŒã«ã䜿çšããŠãããŒã¹ã©ã€ã³æ§æãè¿ éã«å±éããè² è·ãçæããããã©ãŒãã³ã¹ã枬å®ããŸããã
-
ãã³ã¶ã€ã¯ã©ãŠããã€ãã©ã€ã³ Amazon c ãã EKS ã¯ã©ã¹ã¿ãŒãç·šæããããããã¡ããŠã¹ (Kafka ãšã€ã³ãã©ã¹ãã©ã¯ãã£ã®ã¡ããªã¯ã¹ãåéãããã) ããã³ã°ã©ãã¡ã (ãããã®ã¡ããªã¯ã¹ãèŠèŠåãããã)ã ç§ãã¡ã¯ãããå©çšããŸãã çµ±åããã вãã€ãã©ã€ã³ é£æºç£èŠãéäžãã°åéãè匱æ§ã¹ãã£ã³ãçœå®³åŸ©æ§ããšã³ã¿ãŒãã©ã€ãº ã°ã¬ãŒãã®ã»ãã¥ãªãã£ãªã©ãæäŸãããµãŒãã¹ã -
ãµã³ã°ã¬ãã« â Kafka ã¯ã©ã¹ã¿ãŒã®è² è·ãã¹ãçšã®ããŒã«ã - Kafka ã¡ããªã¯ã¹ãšã€ã³ãã©ã¹ãã©ã¯ãã£ãèŠèŠåããããã® Grafana ããã·ã¥ããŒã:
Kubernetes ã«ãã« ,ããŒããšã¯ã¹ããŒã¿ãŒ . - Supertubes CLI ã¯ãKubernetes äžã§ Kafka ã¯ã©ã¹ã¿ãŒãã»ããã¢ããããæãç°¡åãªæ¹æ³ã§ãã ZookeeperãKafka ãªãã¬ãŒã¿ãŒãEnvoy ããã³ãã®ä»ã®å€ãã®ã³ã³ããŒãã³ããã€ã³ã¹ããŒã«ãããKubernetes äžã§æ¬çªç°å¢ã«å¯Ÿå¿ãã Kafka ã¯ã©ã¹ã¿ãŒãå®è¡ããããã«é©åã«æ§æãããŠããŸãã
- åãä»ãçš ã¹ãŒããŒãã¥ãŒã CLI æäŸãããæ瀺ã䜿çšããŠãã ãã
ãã㧠.
- åãä»ãçš ã¹ãŒããŒãã¥ãŒã CLI æäŸãããæ瀺ã䜿çšããŠãã ãã
EKS ã¯ã©ã¹ã¿ãŒ
å°çšã¯ãŒã«ãŒããŒããåãã EKS ã¯ã©ã¹ã¿ãŒãæºåãã c5.4xã©ãŒãž Kafka ãããŒã«ãŒãåãããããã®ããŸããŸãªã¢ãã€ã©ããªã㣠ãŸãŒã³ãããã³ããŒã ãžã§ãã¬ãŒã¿ãŒãšã¢ãã¿ãªã³ã° ã€ã³ãã©ã¹ãã©ã¯ãã£ã®å°çšããŒãã
banzai cluster create -f https://raw.githubusercontent.com/banzaicloud/kafka-operator/master/docs/benchmarks/infrastructure/cluster_eks_202001.json
EKS ã¯ã©ã¹ã¿ãŒãèµ·åããŠå®è¡ããããããã®çµ±åãããã¯ã©ã¹ã¿ãŒãæå¹ã«ããŸãã
Kafka ã·ã¹ãã ã®ã³ã³ããŒãã³ã
supertubes CLI ã䜿çšã㊠EKS ã« Kafka ã·ã¹ãã ã³ã³ããŒãã³ã (Zookeeperãkafka-operator) ãã€ã³ã¹ããŒã«ããŸãã
supertubes install -a --no-democluster --kubeconfig <path-to-eks-cluster-kubeconfig-file>
Kafka ã¯ã©ã¹ã¿ãŒ
ããã©ã«ãã§ã¯ãEKS ã¯æ¬¡ã®ã¿ã€ãã® EBS ããªã¥ãŒã ã䜿çšããŸãã gp2ãã®ãããããªã¥ãŒã ã«åºã¥ããŠå¥ã®ã¹ãã¬ãŒãž ã¯ã©ã¹ãäœæããå¿ èŠããããŸãã io1 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
ãããŒã«ãŒã®ãã©ã¡ãŒã¿ãèšå®ãã min.insync.replicas=3
ãããŠãXNUMX ã€ã®ç°ãªãã¢ãã€ã©ããªã㣠ãŸãŒã³ã®ããŒãã«ãããŒã«ãŒ ãããããããã€ããŸãã
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
ãããã¯
XNUMX ã€ã®ããŒã ãžã§ãã¬ãŒã¿ãŒ ã€ã³ã¹ã¿ã³ã¹ã䞊è¡ããŠå®è¡ããŸããã ãããããç¬èªã®ãããã¯ã«æžã蟌ã¿ãŸããã€ãŸããåèš XNUMX ã€ã®ãããã¯ãå¿ èŠã§ãã
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
åãããã¯ã®ã¬ããªã±ãŒã·ã§ã³ä¿æ°ã¯ 3 ã§ããããã¯ãå¯çšæ§ã®é«ãå®çšŒåã·ã¹ãã ã®æå°æšå¥šå€ã§ãã
è² è·çæããŒã«
ããŒã ãžã§ãã¬ãŒã¿ãŒã®ã³ããŒã XNUMX ã€èµ·åããŸãã (ããããå¥ã®ãããã¯ã§æžããŸãã)ã ããŒã ãžã§ãã¬ãŒã¿ãŒ ãããã®å Žåã¯ããããã«å²ãåœãŠãããããŒãäžã§ã®ã¿ã¹ã±ãžã¥ãŒã«ãããããã«ããŒã ã¢ãã£ããã£ãèšå®ããå¿ èŠããããŸãã
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
泚æãã¹ãç¹ãããã€ããããŸã:
- ããŒã ãžã§ãã¬ãŒã¿ãŒã¯é·ã 512 ãã€ãã®ã¡ãã»ãŒãžãçæãããããã 500 ã¡ãã»ãŒãžã®ããããšã㊠Kafka ã«ãããªãã·ã¥ããŸãã
- åŒæ°ã®äœ¿çš
-required-acks=all
ã¡ãã»ãŒãžã®åæãããã¬ããªã«ããã¹ãŠåä¿¡ãããKafka ãããŒã«ãŒã«ãã£ãŠç¢ºèªããããšããããªã±ãŒã·ã§ã³ã¯æåãããšã¿ãªãããŸãã ããã¯ããã³ãããŒã¯ã§ã¯ããªãŒããŒãã¡ãã»ãŒãžãåä¿¡ããé床ã ãã§ãªãããã®ãã©ãã¯ãŒãã¡ãã»ãŒãžãè€è£œããé床ã枬å®ããããšãæå³ããŸãã ãã®ãã¹ãã®ç®çã¯ãæ¶è²»è ã®èªæžé床ãè©äŸ¡ããããšã§ã¯ãããŸããã (æ¶è²»è ) OS ããŒãž ãã£ãã·ã¥ã«ãŸã æ®ã£ãŠããæè¿åä¿¡ããã¡ãã»ãŒãžãšããã£ã¹ã¯ã«ä¿åãããŠããã¡ãã»ãŒãžã®èªã¿åãé床ãšã®æ¯èŒã - ããŒã ãžã§ãã¬ãŒã¿ãŒã¯ 20 åã®ã¯ãŒã«ãŒã䞊è¡ããŠå®è¡ããŸã (
-workers=20
ïŒã åã¯ãŒã«ãŒã«ã¯ãKafka ã¯ã©ã¹ã¿ãŒãžã®ã¯ãŒã«ãŒã®æ¥ç¶ãå ±æãã 5 ã€ã®ãããã¥ãŒãµãŒãå«ãŸããŠããŸãã ãã®çµæãåãžã§ãã¬ãŒã¿ãŒã«ã¯ 100 ã®ãããã¥ãŒãµãŒãããããããã¯ãã¹ãŠ Kafka ã¯ã©ã¹ã¿ãŒã«ã¡ãã»ãŒãžãéä¿¡ããŸãã
ã¯ã©ã¹ã¿ãŒã®å¥å šæ§ã®ç£èŠ
Kafka ã¯ã©ã¹ã¿ãŒã®è² è·ãã¹ãäžã«ããããã®åèµ·åããªãããšãåæããŠããªãã¬ããªã«ããªãããšãæå°éã®å€åã§æ倧ã®ã¹ã«ãŒãããã確ä¿ãããŠããããšã確èªããããã«ããã®ç¶æ ãç£èŠããŸããã
- ããŒã ãžã§ãã¬ãŒã¿ãŒã¯ããããªãã·ã¥ãããã¡ãã»ãŒãžã®æ°ãšãšã©ãŒçã«é¢ããæšæºçµ±èšãæžã蟌ã¿ãŸãã ãšã©ãŒçã¯å€ãããªãã¯ãã§ã
0,00%
. -
ã¯ã«ãŒãºã³ã³ãããŒã« kafka-operator ã«ãã£ãŠãããã€ãããããã·ã¥ããŒãã¯ãã¯ã©ã¹ã¿ãŒã®ç¶æ ãç£èŠããããšãã§ããŸãã ãã®ããã«ã衚瀺ããã«ã¯ã次ã®æé ãå®è¡ããŸããsupertubes cluster cruisecontrol show -n kafka --kubeconfig <path-to-eks-cluster-kubeconfig-file>
- ISRã¬ãã« (ãåæãã¬ããªã«ã®æ°) çž®å°ãšæ¡åŒµã¯ 0 ã«çãããªããŸãã
枬å®çµæ
3 ãããŒã«ãŒãã¡ãã»ãŒãž ãµã€ãº - 512 ãã€ã
ããŒãã£ã·ã§ã³ã XNUMX ã€ã®ãããŒã«ãŒã«åçã«åæ£ããããšã§ãããã©ãŒãã³ã¹ãéæããããšãã§ããŸããã ~500 Mb/ç§ (990 ç§ãããçŽ XNUMX äžã¡ãã»ãŒãž):
JVM ä»®æ³ãã·ã³ã®ã¡ã¢ãªæ¶è²»é㯠2 GB ãè¶
ããŸããã§ããã
ãã£ã¹ã¯ ã¹ã«ãŒãããã¯ããããŒã«ãŒãå®è¡ãããŠãã XNUMX ã€ã®ã€ã³ã¹ã¿ã³ã¹ãã¹ãŠã§æ倧 I/O ããŒã ã¹ã«ãŒãããã«éããŸããã
ããŒãã«ããã¡ã¢ãªäœ¿çšéã®ããŒã¿ãããã·ã¹ãã ã®ãããã¡ãªã³ã°ãšãã£ãã·ã¥ã«çŽ 10 ïœ 15 GB ããã£ãŠããããšãããããŸãã
3 ãããŒã«ãŒãã¡ãã»ãŒãž ãµã€ãº - 100 ãã€ã
ã¡ãã»ãŒãž ãµã€ãºãæžå°ãããšãã¹ã«ãŒãããã¯çŽ 15 ïœ 20% äœäžããŸããåã¡ãã»ãŒãžã®åŠçã«è²»ããããæéã圱é¿ããŸãã ããã«ãããã»ããµã®è² è·ãã»ãŒ XNUMX åã«ãªããŸããã
ãããŒã«ãŒ ããŒãã«ã¯æªäœ¿çšã®ã³ã¢ããŸã ãããããKafka æ§æãå€æŽããããšã§ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã ããã¯ç°¡åãªäœæ¥ã§ã¯ãªããããã¹ã«ãŒããããåäžããã«ã¯ããã倧ããªã¡ãã»ãŒãžãåŠçããæ¹ãè¯ãã§ãããã
4 ãããŒã«ãŒãã¡ãã»ãŒãž ãµã€ãº - 512 ãã€ã
æ°ãããããŒã«ãŒãè¿œå ããããŒãã£ã·ã§ã³ã®ãã©ã³ã¹ãç¶æããã ãã§ãKafka ã¯ã©ã¹ã¿ãŒã®ããã©ãŒãã³ã¹ãç°¡åã«åäžãããããšãã§ããŸã (ããã«ããããããŒã«ãŒéã§è² è·ãåçã«åæ£ãããŸã)ã ç§ãã¡ã®å ŽåããããŒã«ãŒãè¿œå ããåŸãã¯ã©ã¹ã¿ãŒã®ã¹ã«ãŒãããã¯æ¬¡ã®ããã«å¢å ããŸããã ~580 Mb/ç§ (æ¯ç§ ~1,1 äžã¡ãã»ãŒãž)ã æé·ã¯äºæ³ãããäœãããšãå€æããŸãããããã¯äž»ã«ããŒãã£ã·ã§ã³ã®äžåè¡¡ã«ãã£ãŠèª¬æãããŸã (ãã¹ãŠã®ãããŒã«ãŒãèœåã®ããŒã¯ã§åäœããããã§ã¯ãããŸãã)ã
JVM ãã·ã³ã®ã¡ã¢ãªæ¶è²»é㯠2 GB æªæºã®ãŸãŸã§ããã
ãã©ã€ãã䜿çšãããããŒã«ãŒã®äœæ¥ã¯ãããŒãã£ã·ã§ã³ã®äžåè¡¡ã«ãã£ãŠåœ±é¿ãåããŸããã
æèŠ
äžèšã®å埩ã¢ãããŒãã¯ãæ°çŸã®ã³ã³ã·ã¥ãŒããŒãåããŒãã£ã·ã§ã³åãããŒãªã³ã° ã¢ããããŒãããããã®åèµ·åãªã©ãå«ãããè€éãªã·ããªãªãã«ããŒããããã«æ¡åŒµã§ããŸãã ããããã¹ãŠã«ãããããŸããŸãªç¶æ³ã«ããã Kafka ã¯ã©ã¹ã¿ãŒã®æ©èœã®éçãè©äŸ¡ãããã®éçšã®ããã«ããã¯ãç¹å®ããããã«å¯ŸåŠããæ¹æ³ãèŠã€ããããšãã§ããŸãã
Supertube ã¯ãã¯ã©ã¹ã¿ãŒã®ãããã€ãæ§æããããŒã«ãŒãšãããã¯ã®è¿œå /åé€ãã¢ã©ãŒããžã®å¿çãäžè¬çã« Kafka ã Kubernetes äžã§é©åã«åäœããããšãä¿èšŒããããã«ãè¿ éãã€ç°¡åã«èšèšãããŠããŸãã ç§ãã¡ã®ç®æšã¯ããŠãŒã¶ãŒãäž»èŠãªã¿ã¹ã¯ (Kafka ã¡ãã»ãŒãžã®ãçæããšãæ¶è²»ã) ã«éäžã§ããããã«ãããã¹ãŠã®é£ããäœæ¥ã Supertube ãš Kafka ãªãã¬ãŒã¿ãŒã«ä»»ããããšã§ãã
Banzai Cloud ãã¯ãããžãŒãšãªãŒãã³ãœãŒã¹ ãããžã§ã¯ãã«èå³ãããå Žåã¯ã次㮠URL ã§äŒç€Ÿã«ç»é²ããŠãã ããã
翻蚳è ããã®è¿œäŒž
ç§ãã¡ã®ããã°ããèªã¿ãã ãã:
- «
K8s ã® Redis ãªãã¬ãŒã¿ãŒã«é¢ãã XNUMX ã€ã®ã¹ããŒãªãŒãšããã®ããŒã¿ããŒã¹ã®ããŒã¿ãåæããããã®ãŠãŒãã£ãªãã£ã®ããã¬ãã¥ãŒ "; - «
RabbitMQ ãã Kubernetes ãžã®ã·ãŒã ã¬ã¹ãªç§»è¡ "; - «
CoreOS ã® zetcd: ZooKeeper ã etcd ã¹ãã¬ãŒãžã«çœ®ãæãã 'ã
åºæïŒ habr.com