ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².: Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ компания Banzai Cloud дСлится ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ использования Π΅Ρ‘ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ для облСгчСния эксплуатации Kafka Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Kubernetes. ΠŸΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ инструкции ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ инфраструктуры ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ саму Kafka для достиТСния Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ пропускной способности.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

Apache Kafka β€” распрСдСлённая стриминговая ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° для создания Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹Ρ…, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Ρ… систСм Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π•Ρ‘ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»ΡΡŽΡ‰ΠΈΠ΅ возмоТности ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Kubernetes. Для этого ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Open Source-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Kafka ΠΈ инструмСнт ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Supertubes. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Kafka Π² Kubernetes ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ тонкая настройка ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° основС ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ с рСбалансировкой, rack awareness (ΠΎΡΠ²Π΅Π΄ΠΎΠΌΠ»Ρ‘Π½Π½ΠΎΡΡ‚ΡŒ ΠΎΠ± Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… рСсурсах), «мягкоС» (graceful) Π²Ρ‹ΠΊΠ°Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΈ Ρ‚.Π΄.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Supertubes Π² своём кластСрС:

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

Или ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… возмоТностях Kafka, Ρ€Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Supertubes ΠΈ Kafka operator. О Π½ΠΈΡ… ΠΌΡ‹ ΡƒΠΆΠ΅ писали Π² Π±Π»ΠΎΠ³Π΅:

РСшив Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ кластСр Kafka Π² Kubernetes, Π²Ρ‹ навСрняка ΡΡ‚ΠΎΠ»ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ опрСдСлСния ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Π°Π·ΠΎΠ²ΠΎΠΉ инфраструктуры ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Ρ‚ΠΎΠ½ΠΊΠΎΠΉ подстройки ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Kafka для удовлСтворСния Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ пропускной способности. Максимальная ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° опрСдСляСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² инфраструктуры Π² Π΅Π³ΠΎ основС, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΏΠ°ΠΌΡΡ‚ΡŒ, процСссор, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ диска, пропускная ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ сСти ΠΈ Ρ‚.Π΄.

Π’ ΠΈΠ΄Π΅Π°Π»Π΅ конфигурация Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС элСмСнты инфраструктуры использовались Π½Π° максимумС своих возмоТностСй. Однако Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ такая настройка вСсьма слоТна. Π‘ΠΎΠ»Π΅Π΅ вСроятно, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ использованиС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π΄Π²ΡƒΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (диска, памяти ΠΈΠ»ΠΈ процСссора). Π’ΠΎΠΎΠ±Ρ‰Π΅ говоря, Π±Ρ€ΠΎΠΊΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ конфигурация позволяСт Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ самый ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Β«ΠΏΠΎ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅Β». Π’Π°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎΠ΅ прСдставлСниС ΠΎ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ способСн ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΠ΄ΠΈΠ½ Π±Ρ€ΠΎΠΊΠ΅Ρ€.

ВСорСтичСски, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠΊΠΈΠ½ΡƒΡ‚ΡŒ число Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ. Однако Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² настройки Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… уровнях ΡΡ‚ΠΎΠ»ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ вСсьма слоТно (Ссли Π½Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ). Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΎΡ‡Π΅Π½ΡŒ слоТно ΡΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ, ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°ΡΡΡŒ ΠΎΡ‚ Π½Π΅ΠΊΠΎΠΉ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Supertubes ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ примСняСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄: Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (инфраструктура + настройки), Π·Π°Ρ‚Π΅ΠΌ измСряСм Π΅Ρ‘ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ настройки Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° ΠΈ повторяСм процСсс Π΅Ρ‰Ρ‘ Ρ€Π°Π·. Π­Ρ‚ΠΎ происходит Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π» самого ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° инфраструктуры Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ задСйствован.

Π’Π°ΠΊΠΈΠΌ способом ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‡Ρ‘Ρ‚ΠΊΠΎΠ΅ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, сколько Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ кластСру, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ (количСство Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ зависит ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ минимальноС число Ρ€Π΅ΠΏΠ»ΠΈΠΊ сообщСний для обСспСчСния устойчивости, количСство partition-Π»ΠΈΠ΄Π΅Ρ€ΠΎΠ² ΠΈ Ρ‚.ΠΏ.). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, для ΠΊΠ°ΠΊΠΎΠ³ΠΎ инфраструктурного ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ ΠΎ ΡˆΠ°Π³Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Β«Π²Ρ‹ΠΆΠ°Ρ‚ΡŒ всё» ΠΈΠ· самых ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… конфигурациях ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ кластСра Kafka. Высокоустойчивая конфигурация Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ наличия ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Ρ‚Ρ€Ρ‘Ρ… Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² (min.insync.replicas=3), разнСсённых ΠΏΠΎ Ρ‚Ρ€Ρ‘ΠΌ Ρ€Π°Π·Π½Ρ‹ΠΌ Π·ΠΎΠ½Π°ΠΌ доступности. Для настройки, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° инфраструктуры Kubernetes ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ управлСния ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ для Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹Ρ… ΠΎΠ±Π»Π°ΠΊΠΎΠ² β€” Pipeline. Она ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ on-premise (bare metal, VMware) ΠΈ ΠΏΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±Π»Π°ΠΊΠΎΠ² (Alibaba, AWS, Azure, Google, Oracle), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡ… Π»ΡŽΠ±Ρ‹Π΅ сочСтания.

ΠœΡ‹ΡΠ»ΠΈ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ инфраструктуры ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ кластСра Kafka

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Ρ… Π½ΠΈΠΆΠ΅, ΠΌΡ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ AWS Π² качСствС поставщика ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… услуг ΠΈ EKS Π² качСствС дистрибутива Kubernetes. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PKE β€” дистрибутива Kubernetes ΠΎΡ‚ Banzai Cloud, сСртифицированного CNCF.

Диск

Amazon ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Ρ‚ΠΎΠΌΠΎΠ² EBS. Π’ основС gp2 ΠΈ io1 Π»Π΅ΠΆΠ°Ρ‚ SSD-диски, ΠΎΠ΄Π½Π°ΠΊΠΎ для обСспСчСния высокой пропускной способности gp2 потрСбляСт Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½Ρ‹Π΅ ΠΊΡ€Π΅Π΄ΠΈΡ‚Ρ‹ (I/O credits), поэтому ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π»ΠΈ Ρ‚ΠΈΠΏ io1, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΡƒΡŽ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ.

Π’ΠΈΠΏΡ‹ инстансов

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Kafka сильно зависит ΠΎΡ‚ страничного кэша ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, поэтому Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ инстансы с достаточным количСством памяти для Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² (JVM) ΠΈ страничного кэша. Π˜Π½ΡΡ‚Π°Π½Ρ c5.2xlarge β€” Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎΠ΅ Π½Π°Ρ‡Π°Π»ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠΌΠ΅Π΅Ρ‚ 16 Π“Π± памяти ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с EBS. Π•Π³ΠΎ нСдостатком являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ способСн ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° протяТСнии Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 30 ΠΌΠΈΠ½ΡƒΡ‚ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 24 часа. Если рабочая Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ максимальной ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, слСдуСт ΠΏΡ€ΠΈΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒΡΡ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ инстансов. ΠœΡ‹ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ ΠΈ поступили, ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ²ΡˆΠΈΡΡŒ Π½Π° c5.4xlarge. Он обСспСчиваСт ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π² 593,75 Мб/с. Максимальная пропускная ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠΌΠ° EBS io1 Π²Ρ‹ΡˆΠ΅, Ρ‡Π΅ΠΌ Ρƒ инстанса c5.4xlarge, поэтому самый ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ элСмСнт инфраструктуры, ΠΏΠΎ всСй видимости, это пропускная ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ I/O этого Ρ‚ΠΈΠΏΠ° инстанса (Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π½Π°ΡˆΠΈΡ… Π½Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹Ρ… тСстов).

Π‘Π΅Ρ‚ΡŒ

ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ½Π°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ сСти Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ достаточно большой ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ инстанса VM ΠΈ диска, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΡΠ΅Ρ‚ΡŒ становится ΡƒΠ·ΠΊΠΈΠΌ мСстом. Π’ нашСм случаС сСтСвой интСрфСйс c5.4xlarge ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π΄ΠΎ 10 Π“Π±/с, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΡˆΠ΅ пропускной способности I/O инстанса VM.

Π Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ²

Π‘Ρ€ΠΎΠΊΠ΅Ρ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ (ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Kubernetes) Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΡƒΠ·Π»Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ процСссами Π·Π° рСсурсы процСссора, памяти, сСти ΠΈ диска.

ВСрсия Java

Π›ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ являСтся Java 11, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° совмСстима с Docker Π² Ρ‚ΠΎΠΌ смыслС, Ρ‡Ρ‚ΠΎ JVM ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ опрСдСляСт процСссоры ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ, доступныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€. Зная, Ρ‡Ρ‚ΠΎ Π»ΠΈΠΌΠΈΡ‚Ρ‹ ΠΏΠΎ процСссорам Π²Π°ΠΆΠ½Ρ‹, JVM Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ ΠΈ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ устанавливаСт количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² GC ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² JIT-компилятора. ΠœΡ‹ использовали ΠΎΠ±Ρ€Π°Π· Kafka banzaicloud/kafka:2.13-2.4.0, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ Π²Π΅Ρ€ΡΠΈΡŽ Kafka 2.4.0 (Scala 2.13) Π½Π° Java 11.

Если Π²Ρ‹ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Java/JVM Π½Π° Kubernetes, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ наши ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ:

Настройки памяти Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°

БущСствуСт Π΄Π²Π° ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… аспСкта Π² настройкС памяти Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°: настройки для JVM ΠΈ для pod’Π° Kubernetes. ΠŸΡ€Π΅Π΄Π΅Π» памяти, установлСнный для pod’Π°, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ большС, Ρ‡Π΅ΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ heap size, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ JVM ΠΎΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ мСсто для мСтапространства Java, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ находится Π² собствСнной памяти, ΠΈ для страничного кэша ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Kafka Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚. ΠœΡ‹ Π² своих тСстах запускали Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρ‹ Kafka с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ -Xmx4G -Xms2G, Π° ΠΏΡ€Π΅Π΄Π΅Π» памяти для pod’Π° составлял 10 Gi. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ настройки памяти для JVM ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ -XX:MaxRAMPercentage ΠΈ -X:MinRAMPercentage, исходя ΠΈΠ· Π»ΠΈΠΌΠΈΡ‚Π° памяти для pod’Π°.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½Ρ‹Π΅ настройки Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°

Π’ΠΎΠΎΠ±Ρ‰Π΅ говоря, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, повысив ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π·Π° счёт увСличСния числа ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Kafka. Π§Π΅ΠΌ большС процСссоров доступны для Kafka, Ρ‚Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅. Π’ нашСм тСстС ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ с Π»ΠΈΠΌΠΈΡ‚Π° Π² 6 процСссоров ΠΈ постСпСнно (итСрациями) подняли ΠΈΡ… число Π΄ΠΎ 15. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ установили num.network.threads=12 Π² настройках Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· сСти ΠΈ ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‰ΠΈΡ… ΠΈΡ…. Π‘Ρ€Π°Π·Ρƒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ², Ρ‡Ρ‚ΠΎ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρ‹-послСдоватСли Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ достаточно быстро, подняли num.replica.fetchers Π΄ΠΎ 4, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρ‹-послСдоватСли Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ сообщСния ΠΎΡ‚ Π»ΠΈΠ΄Π΅Ρ€ΠΎΠ².

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ гСнСрирования Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π» Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π΅ иссякнСт Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ кластСр Kafka (Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ проводится) достигнСт своСй максимальной Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ провСсти ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΡ†Π΅Π½ΠΊΡƒ возмоТностСй инструмСнта гСнСрирования Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ для Π½Π΅Π³ΠΎ Ρ‚ΠΈΠΏΡ‹ instance’ΠΎΠ² с достаточным количСством процСссоров ΠΈ памяти. Π’ этом случаС наш инструмСнт Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΡƒΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ большС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Ρ‡Π΅ΠΌ способСн ΠΏΠ΅Ρ€Π΅Π²Π°Ρ€ΠΈΡ‚ΡŒ кластСр Kafka. ПослС мноТСства ΠΎΠΏΡ‹Ρ‚ΠΎΠ², ΠΌΡ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ Π½Π° Ρ‚Ρ€Ρ‘Ρ… экзСмплярах c5.4xlarge, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π» Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€.

Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³

Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ β€” ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ процСсс, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ стадии:

  • настройка инфраструктуры (кластСра EKS, кластСра Kafka, инструмСнта гСнСрирования Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Prometheus ΠΈ Grafana);
  • Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ случайных ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠΉ Π² собираСмых показатСлях ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ;
  • подстройка инфраструктуры ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° Π½Π° основС Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹Ρ… ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ;
  • ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅ процСсса Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнут Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ пропускной способности кластСра Kafka. ΠŸΡ€ΠΈ этом ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ воспроизводимым ΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ пропускной способности.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ описаны шаги, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡŒ Π² процСссС Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ° тСстового кластСра.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹

Для быстрого развёртывания Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ измСрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ использовались ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ инструмСнты:

  • Banzai Cloud Pipeline для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ кластСра EKS ΠΎΡ‚ Amazon c Prometheus (для сбора ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ Kafka ΠΈ инфраструктуры) ΠΈ Grafana (для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этих ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ). ΠœΡ‹ воспользовались ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π² Pipeline сСрвисами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ„Π΅Π΄Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³, Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ сбор Π»ΠΎΠ³ΠΎΠ², сканированиС уязвимостСй, восстановлСниС послС сбоСв, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ уровня ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.
  • Sangrenel β€” инструмСнт для Π½Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ³ΠΎ тСстирования кластСра Kafka.
  • ПанСли Grafana для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ Kafka ΠΈ инфраструктуры: Kubernetes Kafka, Node Exporter.
  • Supertubes CLI для максимально простой настройки кластСра Kafka Π² Kubernetes. Zookeeper, Kafka operator, Envoy ΠΈ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² установлСны ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ сконфигурированы для запуска Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊ production кластСра Kafka Π² Kubernetes.
    • Для установки supertubes CLI Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ инструкциями, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌΠΈ здСсь.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠšΠ»Π°ΡΡ‚Π΅Ρ€ EKS

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΡŒΡ‚Π΅ кластСр EKS с Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌΠΈ ΡƒΠ·Π»Π°ΠΌΠΈ c5.4xlarge Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·ΠΎΠ½Π°Ρ… доступности для pod’ΠΎΠ² с Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌΠΈ Kafka, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΡƒΠ·Π»Ρ‹ для Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠ²ΠΎΠΉ инфраструктуры.

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

Когда кластСр EKS Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ слуТбу ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° β€” ΠΎΠ½Π° Ρ€Π°Π·Π²Π΅Ρ€Π½Ρ‘Ρ‚ Prometheus ΠΈ Grafana Π² кластСр.

БистСмныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Kafka

УстановитС систСмныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Kafka (Zookeeper, kafka-operator) Π² EKS с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ supertubes CLI:

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 ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ pod’Ρ‹ Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² Π½Π° ΡƒΠ·Π»Π°Ρ… Π² Ρ‚Ρ€Ρ‘Ρ… Ρ€Π°Π·Π½Ρ‹Ρ… Π·ΠΎΠ½Π°Ρ… доступности:

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

Π’ΠΎΠΏΠΈΠΊΠΈ

ΠœΡ‹ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ запускали Ρ‚Ρ€ΠΈ экзСмпляра Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΏΠΈΡˆΠ΅Ρ‚ Π² свой Ρ‚ΠΎΠΏΠΈΠΊ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ всСго Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚Ρ€ΠΈ Ρ‚ΠΎΠΏΠΈΠΊΠ°:

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 β€” ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ для высокодоступных production-систСм.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ гСнСрирования Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ

ΠœΡ‹ запускали Ρ‚Ρ€ΠΈ экзСмпляра Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ писал Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΎΠΏΠΈΠΊ). Для pod’ΠΎΠ² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ node affinity, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ для Π½ΠΈΡ… ΡƒΠ·Π»Ρ‹:

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 Π±Π°ΠΉΡ‚ ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅Ρ‚ ΠΈΡ… Π² Kafka партиями ΠΏΠΎ 500 сообщСний.
  • Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° -required-acks=all публикация признаётся ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° всС синхронизированныС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ сообщСния ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Ρ‹ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌΠΈ Kafka. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ΅ ΠΌΡ‹ измСряли Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π»ΠΈΠ΄Π΅Ρ€ΠΎΠ², ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… сообщСния, Π½ΠΎ ΠΈ ΠΈΡ… послСдоватСлСй, Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… сообщСния. Π’ Π·Π°Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ тСста Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎΡ†Π΅Π½ΠΊΠ° скорости чтСния потрСбитСлями (consumers) Π½Π΅Π΄Π°Π²Π½ΠΎ принятых сообщСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΊΠ° ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² страничном кэшС ОБ, ΠΈ Π΅Ρ‘ сравнСниС со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ чтСния сообщСний, хранящихся Π½Π° дискС.
  • Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ запускаСт 20 worker’ΠΎΠ² (-workers=20). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ worker содСрТит 5 producer’ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ worker’Π° ΠΊ кластСру Kafka. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ насчитываСт 100 producer’ΠΎΠ², ΠΈ всС ΠΎΠ½ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ сообщСния Π² кластСр Kafka.

НаблюдСниС Π·Π° состояниСм кластСра

Π’ΠΎ врСмя Π½Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ³ΠΎ тСстирования кластСра Kafka ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ слСдили Π·Π° Π΅Π³ΠΎ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² отсутствии пСрСзапусков pod’ΠΎΠ², рассинхронизированных Ρ€Π΅ΠΏΠ»ΠΈΠΊ ΠΈ максимальной пропускной способности с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ флуктуациями:

  • Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΠΈΡˆΠ΅Ρ‚ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ статистику ΠΎ количСствС ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… сообщСний ΠΈ ΡƒΡ€ΠΎΠ²Π½Π΅ ошибок. ΠŸΡ€ΠΎΡ†Π΅Π½Ρ‚ ошибок Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ 0,00%.
  • Cruise Control, Ρ€Π°Π·Π²Ρ‘Ρ€Π½ΡƒΡ‚Ρ‹ΠΉ kafka-operator’ΠΎΠΌ, прСдоставляСт панСль ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π·Π° состояниСм кластСра. Для просмотра этой ΠΏΠ°Π½Π΅Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅:
    supertubes cluster cruisecontrol show -n kafka --kubeconfig <path-to-eks-cluster-kubeconfig-file>
  • Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ ISR (число Ρ€Π΅ΠΏΠ»ΠΈΠΊ Β«in-syncΒ») shrink ΠΈ expansion Ρ€Π°Π²Π΅Π½ 0.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ

3 Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°, Ρ€Π°Π·ΠΌΠ΅Ρ€ сообщСний β€” 512 Π±Π°ΠΉΡ‚

Π‘ partition’Π°ΠΌΠΈ, Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ распрСдСлёнными ΠΏΠΎ Ρ‚Ρ€Ρ‘ΠΌ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌ, Π½Π°ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ~500 Мб/с (ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 990 тыс. сообщСний Π² сСкунду):

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠŸΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной JVM Π½Π΅ прСвысило 2 Π“Π±:

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ½Π°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ диска достигла максимальной пропускной способности I/O ΡƒΠ·Π»Π° Π½Π° всСх Ρ‚Ρ€Ρ‘Ρ… инстансах, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρ‹:

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

Из Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ± использовании памяти ΡƒΠ·Π»Π°ΠΌΠΈ слСдуСт, Ρ‡Ρ‚ΠΎ систСмная буфСризация ΠΈ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ заняли ~10-15 Π“Π±:

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

3 Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°, Ρ€Π°Π·ΠΌΠ΅Ρ€ сообщСний β€” 100 Π±Π°ΠΉΡ‚

Π‘ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° сообщСний пропускная ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° 15-20%: сказываСтся врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сообщСния. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° процСссор выросла ΠΏΠΎΡ‡Ρ‚ΠΈ Π²Π΄Π²ΠΎΠ΅.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π° ΡƒΠ·Π»Π°Ρ… Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ядра, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Π·Π° счёт измСнСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Kafka. Π­Ρ‚ΠΎ нСпростая Π·Π°Π΄Π°Ρ‡Π°, поэтому для увСличСния пропускной способности Π»ΡƒΡ‡ΡˆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с сообщСниями большСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

4 Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°, Ρ€Π°Π·ΠΌΠ΅Ρ€ сообщСний β€” 512 Π±Π°ΠΉΡ‚

МоТно Π»Π΅Π³ΠΊΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ кластСра Kafka, просто добавляя Π½ΠΎΠ²Ρ‹Π΅ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρ‹ ΠΈ сохраняя баланс partition’ΠΎΠ² (это обСспСчиваСт Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ΅ распрСдСлСниС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌΠΈ). Π’ нашСм случаС послС добавлСния Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° пропускная ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ кластСра возросла Π΄ΠΎ ~580 Мб/с (~1,1 ΠΌΠ»Π½ сообщСний Π² сСкунду). Рост оказался мСньшим, Ρ‡Π΅ΠΌ оТидалось: прСимущСствСнно это ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ дисбалансом partition’ΠΎΠ² (Π½Π΅ всС Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° ΠΏΠΈΠΊΠ΅ возмоТностСй).

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠŸΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти машиной JVM ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π½ΠΈΠΆΠ΅ 2 Π“Π±:

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

На Ρ€Π°Π±ΠΎΡ‚Π΅ Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² с накопитСлями сказался дисбаланс partition’ΠΎΠ²:

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ подходящий Ρ€Π°Π·ΠΌΠ΅Ρ€ для кластСра Kafka Π² Kubernetes

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ для ΠΎΡ…Π²Π°Ρ‚Π° Π±ΠΎΠ»Π΅Π΅ слоТных сцСнариСв, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΡ… сотни consumer’ΠΎΠ², repartitioning, Π½Π°ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ обновлСния, пСрСзапуски pod’ΠΎΠ² ΠΈ Ρ‚.Π΄. Всё это позволяСт Π½Π°ΠΌ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ возмоТностСй кластСра Kafka Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… условиях, Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ ΡƒΠ·ΠΊΠΈΠ΅ мСста Π² Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈ Π½Π°ΠΉΡ‚ΠΈ способы Π±ΠΎΡ€ΡŒΠ±Ρ‹ с Π½ΠΈΠΌΠΈ.

ΠœΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ Supertubes для быстрого ΠΈ Π»Ρ‘Π³ΠΊΠΎΠ³ΠΎ развёртывания кластСра, Π΅Π³ΠΎ конфигурирования, добавлСния/удалСния Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² ΠΈ Ρ‚ΠΎΠΏΠΈΠΊΠΎΠ², рСагирования Π½Π° оповСщСния ΠΈ обСспСчСния ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Kafka Π² Kubernetes Π² Ρ†Π΅Π»ΠΎΠΌ. Наша Ρ†Π΅Π»ΡŒ β€” ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΡΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° основной Π·Π°Π΄Π°Ρ‡Π΅ (Β«Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΒ» ΠΈ Β«ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒΒ» сообщСния Kafka), Π° всю Ρ‚ΡΠΆΡ‘Π»ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Supertubes ΠΈ Kafka operator’Ρƒ.

Если Π²Π°ΠΌ интСрСсны Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ Open Source-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Banzai Cloud, ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° компанию Π² GitHub, LinkedIn ΠΈΠ»ΠΈ Twitter.

P.S. ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π² нашСм Π±Π»ΠΎΠ³Π΅:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com