Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

๋ฉ”๋ชจ. ๋ฒˆ์—ญ: ์ด ๊ธฐ์‚ฌ์—์„œ Banzai Cloud๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes ๋‚ด์—์„œ Kafka๋ฅผ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์˜ ์˜ˆ๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ง€์นจ์—์„œ๋Š” ์ธํ”„๋ผ์˜ ์ตœ์  ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ํ•„์š”ํ•œ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋‹ฌ์„ฑํ•˜๋„๋ก Kafka ์ž์ฒด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Apache Kafka๋Š” ์•ˆ์ •์ ์ด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ณ ์„ฑ๋Šฅ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋ถ„์‚ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. Kubernetes๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธ์ƒ์ ์ธ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜คํ”ˆ ์†Œ์Šค Kafka ์—ฐ์‚ฐ์ž ๊ทธ๋ฆฌ๊ณ  ๋„๊ตฌ๋ผ๋Š” ์ŠˆํผํŠœ๋ธŒ. ์ด๋ฅผ ํ†ตํ•ด Kubernetes์—์„œ Kafka๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋ธŒ๋กœ์ปค ๊ตฌ์„ฑ ๋ฏธ์„ธ ์กฐ์ •, ์žฌ์กฐ์ •์„ ํ†ตํ•œ ๋ฉ”ํŠธ๋ฆญ ๊ธฐ๋ฐ˜ ํ™•์žฅ, ๋ž™ ์ธ์‹, "์†Œํ”„ํŠธ"์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์šฐ์•„ํ•œ) ์—…๋ฐ์ดํŠธ ์ถœ์‹œ ๋“ฑ

ํด๋Ÿฌ์Šคํ„ฐ์—์„œ Supertube๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.

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

์•„๋‹ˆ๋ฉด ์—ฐ๋ฝํ•˜์„ธ์š” ์„ ์  ์„œ๋ฅ˜ ๋น„์น˜. ๋˜ํ•œ Supertubes ๋ฐ Kafka ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™ํ™”๋œ ์ž‘์—…์ธ Kafka์˜ ์ผ๋ถ€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ฝ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๋ธ”๋กœ๊ทธ์— ์ด์— ๋Œ€ํ•ด ์ผ์Šต๋‹ˆ๋‹ค:

Kubernetes์— Kafka ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๋ฉด ๊ธฐ๋ณธ ์ธํ”„๋ผ์˜ ์ตœ์  ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ์ฒ˜๋ฆฌ๋Ÿ‰ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด Kafka ๊ตฌ์„ฑ์„ ๋ฏธ์„ธ ์กฐ์ •ํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ ๋ธŒ๋กœ์ปค์˜ ์ตœ๋Œ€ ์„ฑ๋Šฅ์€ ๋ฉ”๋ชจ๋ฆฌ, ํ”„๋กœ์„ธ์„œ, ๋””์Šคํฌ ์†๋„, ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ ๋“ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ์ธํ”„๋ผ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์„ฑ๋Šฅ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

์ด์ƒ์ ์œผ๋กœ๋Š” ๋ชจ๋“  ์ธํ”„๋ผ ์š”์†Œ๊ฐ€ ์ตœ๋Œ€ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•˜๋„๋ก ๋ธŒ๋กœ์ปค ๊ตฌ์„ฑ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ ์ƒํ™œ์—์„œ๋Š” ์ด ์„ค์ •์ด ์ƒ๋‹นํžˆ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ํ•˜๋‚˜ ๋˜๋Š” ๋‘ ๊ฐœ์˜ ๊ตฌ์„ฑ ์š”์†Œ(๋””์Šคํฌ, ๋ฉ”๋ชจ๋ฆฌ ๋˜๋Š” ํ”„๋กœ์„ธ์„œ)์˜ ์‚ฌ์šฉ์„ ์ตœ๋Œ€ํ™”ํ•˜๋„๋ก ๋ธŒ๋กœ์ปค๋ฅผ ๊ตฌ์„ฑํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ธŒ๋กœ์ปค๋Š” ๊ฐ€์žฅ ๋Š๋ฆฐ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑํ•  ๋•Œ ์ตœ๋Œ€ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•˜๋‚˜์˜ ๋ธŒ๋กœ์ปค๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€ํ•˜์— ๋Œ€ํ•œ ๋Œ€๋žต์ ์ธ ์•„์ด๋””์–ด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ก ์ ์œผ๋กœ ํŠน์ • ๋กœ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ธŒ๋กœ์ปค ์ˆ˜๋ฅผ ์ถ”์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ๋Š” ๋‹ค์–‘ํ•œ ์ˆ˜์ค€์— ๊ตฌ์„ฑ ์˜ต์…˜์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ํŠน์ • ๊ตฌ์„ฑ์˜ ์ž ์žฌ์  ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค(๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋Š” ์•Š์ง€๋งŒ). ์ฆ‰, ํŠน์ • ์„ฑ๋Šฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์„ฑ์„ ๊ณ„ํšํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

Supertubes ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ทจํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ๊ตฌ์„ฑ(์ธํ”„๋ผ + ์„ค์ •)์œผ๋กœ ์‹œ์ž‘ํ•œ ๋‹ค์Œ ์„ฑ๋Šฅ์„ ์ธก์ •ํ•˜๊ณ  ๋ธŒ๋กœ์ปค ์„ค์ •์„ ์กฐ์ •ํ•˜๊ณ  ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ธํ”„๋ผ์—์„œ ๊ฐ€์žฅ ๋Š๋ฆฐ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์™„์ „ํžˆ ํ™œ์šฉ๋  ๋•Œ๊นŒ์ง€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์šฐ๋ฆฌ๋Š” ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ํŠน์ • ๋กœ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ธŒ๋กœ์ปค ์ˆ˜์— ๋Œ€ํ•œ ๋” ๋ช…ํ™•ํ•œ ์•„์ด๋””์–ด๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค(๋ธŒ๋กœ์ปค ์ˆ˜๋Š” ํƒ„๋ ฅ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ๋ฉ”์‹œ์ง€ ๋ณต์ œ๋ณธ ์ˆ˜, ํŒŒํ‹ฐ์…˜ ์ˆ˜์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์š”์†Œ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค). ๋ฆฌ๋” ๋“ฑ). ๋˜ํ•œ ์ˆ˜์ง ํ™•์žฅ์ด ํ•„์š”ํ•œ ์ธํ”„๋ผ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ํ†ต์ฐฐ๋ ฅ์„ ์–ป์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ์ดˆ๊ธฐ ๊ตฌ์„ฑ์—์„œ ๊ฐ€์žฅ ๋Š๋ฆฐ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๊ณ  Kafka ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ทจํ•˜๋Š” ๋‹จ๊ณ„์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋ณต์›๋ ฅ์ด ๋›ฐ์–ด๋‚œ ๊ตฌ์„ฑ์—๋Š” ์‹คํ–‰ ์ค‘์ธ ๋ธŒ๋กœ์ปค๊ฐ€ XNUMX๊ฐœ ์ด์ƒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(min.insync.replicas=3), ์„ธ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์ ‘๊ทผ์„ฑ ์˜์—ญ์— ๋ถ„์‚ฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes ์ธํ”„๋ผ๋ฅผ ๊ตฌ์„ฑ, ํ™•์žฅ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํด๋ผ์šฐ๋“œ๋ฅผ ์œ„ํ•œ ์ž์ฒด ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋กœ. ์˜จํ”„๋ ˆ๋ฏธ์Šค(๋ฒ ์–ด๋ฉ”ํƒˆ, VMware)์™€ XNUMX๊ฐ€์ง€ ์œ ํ˜•์˜ ํด๋ผ์šฐ๋“œ(Alibaba, AWS, Azure, Google, Oracle)๋Š” ๋ฌผ๋ก  ์ด๋“ค์˜ ์กฐํ•ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Kafka ํด๋Ÿฌ์Šคํ„ฐ ์ธํ”„๋ผ ๋ฐ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ์ƒ๊ฐ

์•„๋ž˜ ์˜ˆ์—์„œ๋Š” ํด๋ผ์šฐ๋“œ ๊ณต๊ธ‰์ž๋กœ AWS๋ฅผ ์„ ํƒํ•˜๊ณ  Kubernetes ๋ฐฐํฌํŒ์œผ๋กœ EKS๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์œ ์‚ฌํ•œ ๊ตฌ์„ฑ์„ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PKE - CNCF ์ธ์ฆ์„ ๋ฐ›์€ Banzai Cloud์˜ Kubernetes ๋ฐฐํฌํŒ์ž…๋‹ˆ๋‹ค.

๋””์Šคํฌ

์•„๋งˆ์กด์€ ๋‹ค์–‘ํ•œ EBS ๋ณผ๋ฅจ ์œ ํ˜•. ์ค‘์‹ฌ์—์„œ gp2 ะธ io1 ๊ทธ๋Ÿฌ๋‚˜ ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด SSD ๋“œ๋ผ์ด๋ธŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. gp2 ๋ˆ„์ ๋œ ํฌ๋ ˆ๋”ง์„ ์†Œ๋ชจํ•ฉ๋‹ˆ๋‹ค. (I/O ํฌ๋ ˆ๋”ง), ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ ์œ ํ˜•์„ ์„ ํ˜ธํ–ˆ์Šต๋‹ˆ๋‹ค. io1, ์ด๋Š” ์ผ๊ด€๋˜๊ฒŒ ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค ์œ ํ˜•

Kafka์˜ ์„ฑ๋Šฅ์€ ์šด์˜ ์ฒด์ œ์˜ ํŽ˜์ด์ง€ ์บ์‹œ์— ํฌ๊ฒŒ ์˜์กดํ•˜๋ฏ€๋กœ ๋ธŒ๋กœ์ปค(JVM) ๋ฐ ํŽ˜์ด์ง€ ์บ์‹œ๋ฅผ ์œ„ํ•œ ์ถฉ๋ถ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋ก€ c5.2x ํฐ - 16GB์˜ ๋ฉ”๋ชจ๋ฆฌ์™€ XNUMXGB์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ–์ถ”๊ณ  ์žˆ์–ด ์‹œ์ž‘์ด ์ข‹์Šต๋‹ˆ๋‹ค. EBS์™€ ์—ฐ๋™๋˜๋„๋ก ์ตœ์ ํ™”. ๋‹จ์ ์€ 30์‹œ๊ฐ„๋งˆ๋‹ค ์ตœ๋Œ€ 24๋ถ„ ๋™์•ˆ๋งŒ ์ตœ๋Œ€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์›Œํฌ๋กœ๋“œ์— ์žฅ๊ธฐ๊ฐ„์— ๊ฑธ์ณ ์ตœ๊ณ  ์„ฑ๋Šฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค ์œ ํ˜•์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๋ฐ”๋กœ ์šฐ๋ฆฌ๊ฐ€ ํ•œ ์ผ์ž…๋‹ˆ๋‹ค. c5.4x ํฐ. ์ตœ๋Œ€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 593,75MB/์ดˆ. EBS ๋ณผ๋ฅจ์˜ ์ตœ๋Œ€ ์ฒ˜๋ฆฌ๋Ÿ‰ io1 ์ธ์Šคํ„ด์Šค๋ณด๋‹ค ๋†’์Œ c5.4x ํฐ๋”ฐ๋ผ์„œ ์ธํ”„๋ผ์—์„œ ๊ฐ€์žฅ ๋Š๋ฆฐ ์š”์†Œ๋Š” ์ด ์ธ์Šคํ„ด์Šค ์œ ํ˜•์˜ I/O ์ฒ˜๋ฆฌ๋Ÿ‰์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค(๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ์—์„œ๋„ ํ™•์ธํ•ด์•ผ ํ•จ).

๋„คํŠธ์›Œํฌ

๋„คํŠธ์›Œํฌ ์ฒ˜๋ฆฌ๋Ÿ‰์€ 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 ์ œ๊ณต๋œ ์ง€์นจ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค ์—ฌ๊ธฐ์—.

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

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 ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ํ†ตํ•ฉ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‹ˆํ„ฐ๋ง ์„œ๋น„์Šค โ€” ๊ทธ๋…€๋Š” Prometheus์™€ Grafana๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์นดํ”„์นด ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์š”์†Œ

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๋งŒ ๊ฐœ์˜ ๋ฉ”์‹œ์ง€):

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

JVM ๊ฐ€์ƒ ๋จธ์‹ ์˜ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๋Š” 2GB๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

๋””์Šคํฌ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ๋ธŒ๋กœ์ปค๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ์„ธ ์ธ์Šคํ„ด์Šค ๋ชจ๋‘์—์„œ ์ตœ๋Œ€ I/O ๋…ธ๋“œ ์ฒ˜๋ฆฌ๋Ÿ‰์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

๋…ธ๋“œ๋ณ„ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์— ๋”ฐ๋ฅด๋ฉด ์‹œ์Šคํ…œ ๋ฒ„ํผ๋ง ๋ฐ ์บ์‹ฑ์— ~10-15GB๊ฐ€ ์†Œ์š”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

๋ธŒ๋กœ์ปค 3๊ฐœ, ๋ฉ”์‹œ์ง€ ํฌ๊ธฐ - 100๋ฐ”์ดํŠธ

๋ฉ”์‹œ์ง€ ํฌ๊ธฐ๊ฐ€ ์ค„์–ด๋“ค๋ฉด ์ฒ˜๋ฆฌ๋Ÿ‰์ด ์•ฝ 15-20% ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์ด ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”„๋กœ์„ธ์„œ ๋กœ๋“œ๊ฐ€ ๊ฑฐ์˜ ๋‘ ๋ฐฐ๋กœ ๋Š˜์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

๋ธŒ๋กœ์ปค ๋…ธ๋“œ์—๋Š” ์•„์ง ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ์ฝ”์–ด๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ Kafka ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‰ฌ์šด ์ž‘์—…์ด ์•„๋‹ˆ๋ฏ€๋กœ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋Š˜๋ฆฌ๋ ค๋ฉด ๋” ํฐ ๋ฉ”์‹œ์ง€๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋ธŒ๋กœ์ปค 4๊ฐœ, ๋ฉ”์‹œ์ง€ ํฌ๊ธฐ - 512๋ฐ”์ดํŠธ

์ƒˆ ๋ธŒ๋กœ์ปค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํŒŒํ‹ฐ์…˜ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋ฉด Kafka ํด๋Ÿฌ์Šคํ„ฐ์˜ ์„ฑ๋Šฅ์„ ์‰ฝ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด๋ฅผ ํ†ตํ•ด ๋กœ๋“œ๊ฐ€ ๋ธŒ๋กœ์ปค ๊ฐ„์— ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„์‚ฐ๋ฉ๋‹ˆ๋‹ค). ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋ธŒ๋กœ์ปค๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ ํด๋Ÿฌ์Šคํ„ฐ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฆ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ~580Mb/s(์ดˆ๋‹น ~1,1๋งŒ ๋ฉ”์‹œ์ง€). ์„ฑ์žฅ์€ ์˜ˆ์ƒ๋ณด๋‹ค ๋‚ฎ์€ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ฃผ๋กœ ํŒŒํ‹ฐ์…˜์˜ ๋ถˆ๊ท ํ˜•์œผ๋กœ ์ธํ•ด ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค(๋ชจ๋“  ๋ธŒ๋กœ์ปค๊ฐ€ ์ตœ๊ณ  ์„ฑ๋Šฅ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค).

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

JVM ์‹œ์Šคํ…œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๋Š” 2GB ๋ฏธ๋งŒ์œผ๋กœ ์œ ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

๋“œ๋ผ์ด๋ธŒ๊ฐ€ ์žˆ๋Š” ๋ธŒ๋กœ์ปค์˜ ์ž‘์—…์€ ํŒŒํ‹ฐ์…˜ ๋ถˆ๊ท ํ˜•์˜ ์˜ํ–ฅ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

Kubernetes์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ์— ์ ํ•ฉํ•œ ํฌ๊ธฐ ๊ฒฐ์ •

์กฐ์‚ฌ ๊ฒฐ๊ณผ

์œ„์— ์ œ์‹œ๋œ ๋ฐ˜๋ณต์  ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ˆ˜๋ฐฑ ๋ช…์˜ ์†Œ๋น„์ž, ์žฌ๋ถ„ํ• , ๋กค๋ง ์—…๋ฐ์ดํŠธ, ํฌ๋“œ ๋‹ค์‹œ ์‹œ์ž‘ ๋“ฑ์„ ํฌํ•จํ•˜๋Š” ๋ณด๋‹ค ๋ณต์žกํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํฌ๊ด„ํ•˜๋„๋ก ํ™•์žฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์„ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ ๊ธฐ๋Šฅ์˜ ํ•œ๊ณ„๋ฅผ ํ‰๊ฐ€ํ•˜๊ณ , ์ž‘๋™ ์ค‘ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์‹๋ณ„ํ•˜๊ณ , ์ด์— ๋Œ€์ฒ˜ํ•  ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๋ฐฐํฌํ•˜๊ณ , ๊ตฌ์„ฑํ•˜๊ณ , ๋ธŒ๋กœ์ปค์™€ ์ฃผ์ œ๋ฅผ ์ถ”๊ฐ€/์ œ๊ฑฐํ•˜๊ณ , ๊ฒฝ๊ณ ์— ์‘๋‹ตํ•˜๊ณ , ์ผ๋ฐ˜์ ์œผ๋กœ Kafka๊ฐ€ Kubernetes์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก Supertubes๋ฅผ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ฃผ์š” ์ž‘์—…(Kafka ๋ฉ”์‹œ์ง€ "์ƒ์„ฑ" ๋ฐ "์†Œ๋น„")์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๊ณ  ๋ชจ๋“  ๋…ธ๋ ฅ์€ Supertubes ๋ฐ Kafka ์šด์˜์ž์—๊ฒŒ ๋งก๊ธฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Banzai Cloud ๊ธฐ์ˆ  ๋ฐ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๊ด€์‹ฌ์ด ์žˆ์œผ์‹œ๋ฉด ๋‹ค์Œ ํšŒ์‚ฌ๋ฅผ ๊ตฌ๋…ํ•˜์„ธ์š”. GitHub์˜, ๋งํฌ๋“œ์ธ ๋˜๋Š” ํŠธ์œ„ํ„ฐ.

๋ฒˆ์—ญ๊ฐ€์˜ ์ถ”์‹ 

๋ธ”๋กœ๊ทธ์—์„œ๋„ ์ฝ์–ด๋ณด์„ธ์š”.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€