๋ฉ๋ชจ. ๋ฒ์ญ: ์ด ๊ธฐ์ฌ์์ 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>
์๋๋ฉด ์ฐ๋ฝํ์ธ์
์ ์ ์๋ฅ ๋น์น . ๋ํ Supertubes ๋ฐ Kafka ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋ํ๋ ์์ ์ธ Kafka์ ์ผ๋ถ ๊ธฐ๋ฅ์ ๋ํด ์ฝ์ ์๋ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ๋ธ๋ก๊ทธ์ ์ด์ ๋ํด ์ผ์ต๋๋ค:
์ ๋ผ! Kubernetes๋ฅผ ์ํ ๋ ๋ค๋ฅธ Kafka ์ฐ์ฐ์ ;Prometheus ๋ฉํธ๋ฆญ์ ๊ธฐ๋ฐ์ผ๋ก Kafka ๋ชจ๋ํฐ๋ง ๋ฐ ์ด์ ;Kubernetes์ Kafka ๋ ์ธ์ ;Istio๋ฅผ ํตํด Apache Kafka ์คํ - ๋ฒค์น๋งํฌ ;Kafka ์ด์์๋ฅผ ํตํ ์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ์ก์ธ์ค ์ ์ด ํด๋ฌ์คํฐ ;Kubernetes์ Kafka ๋กค๋ง ์ ๊ทธ๋ ์ด๋ ๋ฐ ๋์ ๊ตฌ์ฑ ;Kafka์ฉ Envoy ํ๋กํ ์ฝ ํํฐ, ๋ฉ์ํ .
Kubernetes์ Kafka ํด๋ฌ์คํฐ๋ฅผ ๋ฐฐํฌํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ฉด ๊ธฐ๋ณธ ์ธํ๋ผ์ ์ต์ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํ๊ณ ์ฒ๋ฆฌ๋ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๊ธฐ ์ํด Kafka ๊ตฌ์ฑ์ ๋ฏธ์ธ ์กฐ์ ํด์ผ ํ๋ ๋ฌธ์ ์ ์ง๋ฉดํ๊ฒ ๋ ๊ฒ์ ๋๋ค. ๊ฐ ๋ธ๋ก์ปค์ ์ต๋ ์ฑ๋ฅ์ ๋ฉ๋ชจ๋ฆฌ, ํ๋ก์ธ์, ๋์คํฌ ์๋, ๋คํธ์ํฌ ๋์ญํญ ๋ฑ๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ์ธํ๋ผ ๊ตฌ์ฑ ์์์ ์ฑ๋ฅ์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค.
์ด์์ ์ผ๋ก๋ ๋ชจ๋ ์ธํ๋ผ ์์๊ฐ ์ต๋ ์ฑ๋ฅ์ ๋ฐํํ๋๋ก ๋ธ๋ก์ปค ๊ตฌ์ฑ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ์ํ์์๋ ์ด ์ค์ ์ด ์๋นํ ๋ณต์กํฉ๋๋ค. ์ฌ์ฉ์๋ ํ๋ ๋๋ ๋ ๊ฐ์ ๊ตฌ์ฑ ์์(๋์คํฌ, ๋ฉ๋ชจ๋ฆฌ ๋๋ ํ๋ก์ธ์)์ ์ฌ์ฉ์ ์ต๋ํํ๋๋ก ๋ธ๋ก์ปค๋ฅผ ๊ตฌ์ฑํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ก์ปค๋ ๊ฐ์ฅ ๋๋ฆฐ ๊ตฌ์ฑ ์์๋ฅผ ์ต๋ํ ํ์ฉํ๋๋ก ๊ตฌ์ฑํ ๋ ์ต๋ ์ฑ๋ฅ์ ๋ฐํํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ๋์ ๋ธ๋ก์ปค๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ๋ถํ์ ๋ํ ๋๋ต์ ์ธ ์์ด๋์ด๋ฅผ ์ป์ ์ ์์ต๋๋ค.
์ด๋ก ์ ์ผ๋ก ํน์ ๋ก๋๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ํ์ํ ๋ธ๋ก์ปค ์๋ฅผ ์ถ์ ํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ๋ก๋ ๋ค์ํ ์์ค์ ๊ตฌ์ฑ ์ต์ ์ด ๋๋ฌด ๋ง์์ ํน์ ๊ตฌ์ฑ์ ์ ์ฌ์ ์ฑ๋ฅ์ ํ๊ฐํ๋ ๊ฒ์ด ๋งค์ฐ ์ด๋ ต์ต๋๋ค(๋ถ๊ฐ๋ฅํ์ง๋ ์์ง๋ง). ์ฆ, ํน์ ์ฑ๋ฅ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ฑ์ ๊ณํํ๋ ๊ฒ์ ๋งค์ฐ ์ด๋ ต์ต๋๋ค.
Supertubes ์ฌ์ฉ์์ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ ๊ทผ ๋ฐฉ์์ ์ทจํฉ๋๋ค. ์ผ๋ถ ๊ตฌ์ฑ(์ธํ๋ผ + ์ค์ )์ผ๋ก ์์ํ ๋ค์ ์ฑ๋ฅ์ ์ธก์ ํ๊ณ ๋ธ๋ก์ปค ์ค์ ์ ์กฐ์ ํ๊ณ ํ๋ก์ธ์ค๋ฅผ ๋ค์ ๋ฐ๋ณตํฉ๋๋ค. ์ด๋ ์ธํ๋ผ์์ ๊ฐ์ฅ ๋๋ฆฐ ๊ตฌ์ฑ ์์๊ฐ ์์ ํ ํ์ฉ๋ ๋๊น์ง ๋ฐ์ํฉ๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ฐ๋ฆฌ๋ ํด๋ฌ์คํฐ๊ฐ ํน์ ๋ก๋๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ํ์ํ ๋ธ๋ก์ปค ์์ ๋ํ ๋ ๋ช ํํ ์์ด๋์ด๋ฅผ ์ป์ต๋๋ค(๋ธ๋ก์ปค ์๋ ํ๋ ฅ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ์ต์ ๋ฉ์์ง ๋ณต์ ๋ณธ ์, ํํฐ์ ์์ ๊ฐ์ ๋ค๋ฅธ ์์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค). ๋ฆฌ๋ ๋ฑ). ๋ํ ์์ง ํ์ฅ์ด ํ์ํ ์ธํ๋ผ ๊ตฌ์ฑ ์์์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ป์ต๋๋ค.
์ด ๊ธฐ์ฌ์์๋ ์ด๊ธฐ ๊ตฌ์ฑ์์ ๊ฐ์ฅ ๋๋ฆฐ ๊ตฌ์ฑ ์์๋ฅผ ์ต๋ํ ํ์ฉํ๊ณ Kafka ํด๋ฌ์คํฐ์ ์ฒ๋ฆฌ๋์ ์ธก์ ํ๊ธฐ ์ํด ์ทจํ๋ ๋จ๊ณ์ ๋ํด ์ค๋ช
ํฉ๋๋ค. ๋ณต์๋ ฅ์ด ๋ฐ์ด๋ ๊ตฌ์ฑ์๋ ์คํ ์ค์ธ ๋ธ๋ก์ปค๊ฐ XNUMX๊ฐ ์ด์ ํ์ํฉ๋๋ค(min.insync.replicas=3
), ์ธ ๊ฐ์ง ๋ค๋ฅธ ์ ๊ทผ์ฑ ์์ญ์ ๋ถ์ฐ๋์ด ์์ต๋๋ค. Kubernetes ์ธํ๋ผ๋ฅผ ๊ตฌ์ฑ, ํ์ฅ ๋ฐ ๋ชจ๋ํฐ๋งํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ํ์ด๋ธ๋ฆฌ๋ ํด๋ผ์ฐ๋๋ฅผ ์ํ ์์ฒด ์ปจํ
์ด๋ ๊ด๋ฆฌ ํ๋ซํผ์ ์ฌ์ฉํฉ๋๋ค.
Kafka ํด๋ฌ์คํฐ ์ธํ๋ผ ๋ฐ ๊ตฌ์ฑ์ ๋ํ ์๊ฐ
์๋ ์์์๋ ํด๋ผ์ฐ๋ ๊ณต๊ธ์๋ก AWS๋ฅผ ์ ํํ๊ณ Kubernetes ๋ฐฐํฌํ์ผ๋ก EKS๋ฅผ ์ ํํ์ต๋๋ค. ์ ์ฌํ ๊ตฌ์ฑ์ ๋ค์์ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ ์์ต๋๋ค.
๋์คํฌ
์๋ง์กด์ ๋ค์ํ
์ธ์คํด์ค ์ ํ
Kafka์ ์ฑ๋ฅ์ ์ด์ ์ฒด์ ์ ํ์ด์ง ์บ์์ ํฌ๊ฒ ์์กดํ๋ฏ๋ก ๋ธ๋ก์ปค(JVM) ๋ฐ ํ์ด์ง ์บ์๋ฅผ ์ํ ์ถฉ๋ถํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ์ธ์คํด์ค๊ฐ ํ์ํฉ๋๋ค. ์ฌ๋ก c5.2x ํฐ - 16GB์ ๋ฉ๋ชจ๋ฆฌ์ XNUMXGB์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ถ๊ณ ์์ด ์์์ด ์ข์ต๋๋ค.
๋คํธ์ํฌ
๋คํธ์ํฌ ์ฒ๋ฆฌ๋์ VM ์ธ์คํด์ค ๋ฐ ๋์คํฌ์ ์ฑ๋ฅ์ ๋นํด ์ถฉ๋ถํ ์ปค์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋คํธ์ํฌ์ ๋ณ๋ชฉ ํ์์ด ๋ฐ์ํฉ๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ๋คํธ์ํฌ ์ธํฐํ์ด์ค c5.4x ํฐ VM ์ธ์คํด์ค์ I/O ์ฒ๋ฆฌ๋๋ณด๋ค ํจ์ฌ ๋์ ์ต๋ 10Gb/s์ ์๋๋ฅผ ์ง์ํฉ๋๋ค.
๋ธ๋ก์ปค ๋ฐฐํฌ
CPU, ๋ฉ๋ชจ๋ฆฌ, ๋คํธ์ํฌ ๋ฐ ๋์คํฌ ๋ฆฌ์์ค์ ๋ํ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๊ฒฝ์ํ์ง ์์ผ๋ ค๋ฉด ๋ธ๋ก์ปค๋ฅผ ์ ์ฉ ๋ ธ๋์ ๋ฐฐํฌ(Kubernetes์์ ์์ฝ)ํด์ผ ํฉ๋๋ค.
์๋ฐ ๋ฒ์
๋
ผ๋ฆฌ์ ์ธ ์ ํ์ 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 Pod ์ค์ ์ด๋ผ๋ ๋ ๊ฐ์ง ์ฃผ์ ์ธก๋ฉด์ด ์์ต๋๋ค. Pod์ ์ค์ ๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ 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 ํด๋ฌ์คํฐ ์ฒ๋ฆฌ๋์ด ๋ฌ์ฑ๋ ๋๊น์ง ํ๋ก์ธ์ค๋ฅผ ๋ฐ๋ณตํฉ๋๋ค. ๋์์ ์ผ๊ด๋๊ฒ ์ฌํ ๊ฐ๋ฅํด์ผ ํ๋ฉฐ ์ฒ๋ฆฌ๋์ ๋ณํ๊ฐ ์ต์ํ๋์ด์ผ ํฉ๋๋ค.
๋ค์ ์น์ ์์๋ ํ ์คํธ ํด๋ฌ์คํฐ ๋ฒค์น๋งํน ํ๋ก์ธ์ค ์ค์ ์ํ๋ ๋จ๊ณ๋ฅผ ์ค๋ช ํฉ๋๋ค.
๋๊ตฌ
๊ธฐ๋ณธ ๊ตฌ์ฑ์ ์ ์ํ๊ฒ ๋ฐฐํฌํ๊ณ , ๋ก๋๋ฅผ ์์ฑํ๊ณ , ์ฑ๋ฅ์ ์ธก์ ํ๋ ๋ฐ ๋ค์ ๋๊ตฌ๊ฐ ์ฌ์ฉ๋์์ต๋๋ค.
-
Banzai ํด๋ผ์ฐ๋ ํ์ดํ๋ผ์ธ Amazon c์์ EKS ํด๋ฌ์คํฐ ๊ตฌ์ฑํ๋ก ๋ฉํ ์ฐ์ค (Kafka ๋ฐ ์ธํ๋ผ ์ธก์ ํญ๋ชฉ ์์ง) ๋ฐ๊ทธ๋ผ ํ๋ (์ด๋ฌํ ์ธก์ ํญ๋ชฉ์ ์๊ฐํํ๊ธฐ ์ํด) ์ฐ๋ฆฌ๋ ์ด์ ์ ์ทจํ์ต๋๋ค ํตํฉ ะฒ๊ด๋ก ํตํฉ ๋ชจ๋ํฐ๋ง, ์ค์ ์ง์ค์ ๋ก๊ทธ ์์ง, ์ทจ์ฝ์ฑ ๊ฒ์, ์ฌํด ๋ณต๊ตฌ, ์ํฐํ๋ผ์ด์ฆ๊ธ ๋ณด์ ๋ฑ์ ์ ๊ณตํ๋ ์๋น์ค์ ๋๋ค. -
์๊ทธ๋ ๋ฌ โ Kafka ํด๋ฌ์คํฐ์ ๋ถํ ํ ์คํธ๋ฅผ ์ํ ๋๊ตฌ์ ๋๋ค. - Kafka ์ธก์ ํญ๋ชฉ ๋ฐ ์ธํ๋ผ๋ฅผ ์๊ฐํํ๊ธฐ ์ํ Grafana ๋์๋ณด๋:
์ฟ ๋ฒ๋คํฐ์ค ์นดํ์นด ,๋ ธ๋ ๋ด๋ณด๋ด๊ธฐ . - Kubernetes์์ Kafka ํด๋ฌ์คํฐ๋ฅผ ์ค์ ํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ํ Supertubes CLI. 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 ํด๋ฌ์คํฐ๊ฐ ์คํ๋๋ฉด ํตํฉ์ ํ์ฑํํฉ๋๋ค.
์นดํ์นด ์์คํ ๊ตฌ์ฑ ์์
supertubes CLI๋ฅผ ์ฌ์ฉํ์ฌ EKS์ Kafka ์์คํ ๊ตฌ์ฑ ์์(Zookeeper, kafka-operator)๋ฅผ ์ค์นํฉ๋๋ค.
supertubes install -a --no-democluster --kubeconfig <path-to-eks-cluster-kubeconfig-file>
์นดํ์นด ํด๋ฌ์คํฐ
๊ธฐ๋ณธ์ ์ผ๋ก 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
์ธ ๊ฐ์ง ๋ค๋ฅธ ๊ฐ์ฉ์ฑ ์์ญ์ ๋
ธ๋์ ๋ธ๋ก์ปค ํฌ๋๋ฅผ ๋ฐฐํฌํฉ๋๋ค.
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์ ๋๋ค.
๋ถํ ์์ฑ ๋๊ตฌ
์ฐ๋ฆฌ๋ ๋ก๋ ์์ฑ๊ธฐ์ ๋ณต์ฌ๋ณธ 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๊ฐ์ ๋ธ๋ก์ปค์ ํํฐ์ ์ด ๊ท ๋ฑํ๊ฒ ๋ถ์ฐ๋์ด ์ฑ๋ฅ์ ๋ฌ์ฑํ ์ ์์์ต๋๋ค. ~500Mb/s(์ด๋น ์ฝ 990๋ง ๊ฐ์ ๋ฉ์์ง):
JVM ๊ฐ์ ๋จธ์ ์ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ 2GB๋ฅผ ์ด๊ณผํ์ง ์์์ต๋๋ค.
๋์คํฌ ์ฒ๋ฆฌ๋์ด ๋ธ๋ก์ปค๊ฐ ์คํ ์ค์ธ ์ธ ์ธ์คํด์ค ๋ชจ๋์์ ์ต๋ I/O ๋
ธ๋ ์ฒ๋ฆฌ๋์ ๋๋ฌํ์ต๋๋ค.
๋
ธ๋๋ณ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ฐ์ดํฐ์ ๋ฐ๋ฅด๋ฉด ์์คํ
๋ฒํผ๋ง ๋ฐ ์บ์ฑ์ ~10-15GB๊ฐ ์์๋์์ต๋๋ค.
๋ธ๋ก์ปค 3๊ฐ, ๋ฉ์์ง ํฌ๊ธฐ - 100๋ฐ์ดํธ
๋ฉ์์ง ํฌ๊ธฐ๊ฐ ์ค์ด๋ค๋ฉด ์ฒ๋ฆฌ๋์ด ์ฝ 15-20% ๊ฐ์ํฉ๋๋ค. ์ฆ, ๊ฐ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์์๋๋ ์๊ฐ์ด ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋ํ ํ๋ก์ธ์ ๋ก๋๊ฐ ๊ฑฐ์ ๋ ๋ฐฐ๋ก ๋์ด๋ฌ์ต๋๋ค.
๋ธ๋ก์ปค ๋
ธ๋์๋ ์์ง ์ฌ์ฉ๋์ง ์์ ์ฝ์ด๊ฐ ์์ผ๋ฏ๋ก Kafka ๊ตฌ์ฑ์ ๋ณ๊ฒฝํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด๋ ์ฌ์ด ์์
์ด ์๋๋ฏ๋ก ์ฒ๋ฆฌ๋์ ๋๋ฆฌ๋ ค๋ฉด ๋ ํฐ ๋ฉ์์ง๋ก ์์
ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ธ๋ก์ปค 4๊ฐ, ๋ฉ์์ง ํฌ๊ธฐ - 512๋ฐ์ดํธ
์ ๋ธ๋ก์ปค๋ฅผ ์ถ๊ฐํ๊ณ ํํฐ์ ๊ท ํ์ ์ ์งํ๋ฉด Kafka ํด๋ฌ์คํฐ์ ์ฑ๋ฅ์ ์ฝ๊ฒ ๋์ผ ์ ์์ต๋๋ค(์ด๋ฅผ ํตํด ๋ก๋๊ฐ ๋ธ๋ก์ปค ๊ฐ์ ๊ท ๋ฑํ๊ฒ ๋ถ์ฐ๋ฉ๋๋ค). ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ๋ธ๋ก์ปค๋ฅผ ์ถ๊ฐํ ํ ํด๋ฌ์คํฐ ์ฒ๋ฆฌ๋์ด ๋ค์๊ณผ ๊ฐ์ด ์ฆ๊ฐํ์ต๋๋ค. ~580Mb/s(์ด๋น ~1,1๋ง ๋ฉ์์ง). ์ฑ์ฅ์ ์์๋ณด๋ค ๋ฎ์ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์ด๋ ์ฃผ๋ก ํํฐ์ ์ ๋ถ๊ท ํ์ผ๋ก ์ธํด ์ค๋ช ๋ฉ๋๋ค(๋ชจ๋ ๋ธ๋ก์ปค๊ฐ ์ต๊ณ ์ฑ๋ฅ์ผ๋ก ์๋ํ๋ ๊ฒ์ ์๋๋๋ค).
JVM ์์คํ
์ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ 2GB ๋ฏธ๋ง์ผ๋ก ์ ์ง๋์์ต๋๋ค.
๋๋ผ์ด๋ธ๊ฐ ์๋ ๋ธ๋ก์ปค์ ์์
์ ํํฐ์
๋ถ๊ท ํ์ ์ํฅ์ ๋ฐ์์ต๋๋ค.
์กฐ์ฌ ๊ฒฐ๊ณผ
์์ ์ ์๋ ๋ฐ๋ณต์ ์ ๊ทผ ๋ฐฉ์์ ์๋ฐฑ ๋ช ์ ์๋น์, ์ฌ๋ถํ , ๋กค๋ง ์ ๋ฐ์ดํธ, ํฌ๋ ๋ค์ ์์ ๋ฑ์ ํฌํจํ๋ ๋ณด๋ค ๋ณต์กํ ์๋๋ฆฌ์ค๋ฅผ ํฌ๊ดํ๋๋ก ํ์ฅ๋ ์ ์์ต๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ ํตํด ์ฐ๋ฆฌ๋ ๋ค์ํ ์กฐ๊ฑด์์ Kafka ํด๋ฌ์คํฐ ๊ธฐ๋ฅ์ ํ๊ณ๋ฅผ ํ๊ฐํ๊ณ , ์๋ ์ค ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ , ์ด์ ๋์ฒํ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ํด๋ฌ์คํฐ๋ฅผ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ๋ฐฐํฌํ๊ณ , ๊ตฌ์ฑํ๊ณ , ๋ธ๋ก์ปค์ ์ฃผ์ ๋ฅผ ์ถ๊ฐ/์ ๊ฑฐํ๊ณ , ๊ฒฝ๊ณ ์ ์๋ตํ๊ณ , ์ผ๋ฐ์ ์ผ๋ก Kafka๊ฐ Kubernetes์์ ์ ๋๋ก ์๋ํ๋๋ก Supertubes๋ฅผ ์ค๊ณํ์ต๋๋ค. ์ฐ๋ฆฌ์ ๋ชฉํ๋ ์ฌ์ฉ์๊ฐ ์ฃผ์ ์์ (Kafka ๋ฉ์์ง "์์ฑ" ๋ฐ "์๋น")์ ์ง์คํ ์ ์๋๋ก ๋๊ณ ๋ชจ๋ ๋ ธ๋ ฅ์ Supertubes ๋ฐ Kafka ์ด์์์๊ฒ ๋งก๊ธฐ๋ ๊ฒ์ ๋๋ค.
Banzai Cloud ๊ธฐ์ ๋ฐ ์คํ ์์ค ํ๋ก์ ํธ์ ๊ด์ฌ์ด ์์ผ์๋ฉด ๋ค์ ํ์ฌ๋ฅผ ๊ตฌ๋
ํ์ธ์.
๋ฒ์ญ๊ฐ์ ์ถ์
๋ธ๋ก๊ทธ์์๋ ์ฝ์ด๋ณด์ธ์.
- ยซ
K8s์ Redis ์ด์์์ ๋ํ ์ด์ผ๊ธฐ์ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ธฐ ์ํ ์ ํธ๋ฆฌํฐ์ ๋ํ ๊ฐ๋ตํ ๊ฒํ "; - ยซ
RabbitMQ๋ฅผ Kubernetes๋ก ์ํํ๊ฒ ๋ง์ด๊ทธ๋ ์ด์ "; - ยซ
CoreOS์ zetcd: ZooKeeper๋ฅผ etcd ์คํ ๋ฆฌ์ง๋ก ๊ต์ฒด ".
์ถ์ฒ : habr.com