[Kafka] ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด์šฉํ•œ Kafka ์„ค์น˜

๋ฐ˜์‘ํ˜•

์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ ์šฐ๋ฆฌ๋Š” Kafka๊ฐ€ ์–ด๋–ค์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜์—ˆ๋Š”์ง€๋ฅผ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค.

 

2022.07.31 - [Middleware/Kafka] - [Kafka] ์นดํ”„์นด์˜ ์ฝ”๋””๋„ค์ดํ„ฐ Zookeeper

 

[Kafka] ์นดํ”„์นด์˜ ์ฝ”๋””๋„ค์ดํ„ฐ Zookeeper

์šฐ๋ฆฌ๊ฐ€ ์ปดํ“จํ„ฐ์— ์นดํ”„์นด๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ๋”ฐ๋ผ์„œ ์„ค์น˜ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ฃผํ‚คํผ(Zookeeper)์ธ๋ฐ์š”. ๋‹ค๋ฅธ ๋ฉ”์‹œ์ง€ ํ์™€ ๋‹ค๋ฅด๊ฒŒ ์นดํ”„์นด๋Š” ์™œ ์ฃผํ‚คํผ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ์š”? ์ฝ”๋””๋„ค

blog.neonkid.xyz

์นดํ”„์นด๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

  • ์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ์— ์ง์ ‘ ์„ค์น˜
  • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด์šฉํ•œ ์„ค์น˜

 

์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ์— ์ง์ ‘ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์€ ํ™˜๊ฒฝ ๋ถ„๋ฆฌ ์—†์ด Homebrew, PPA๋ฅผ ์ด์šฉํ•ด์„œ ์ž์‹ ์˜ ์„œ๋ฒ„ ํ™˜๊ฒฝ์— ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋…๋ฆฝ๋œ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๋ฅผ ์ง์ ‘ ์šด์˜ํ•˜์—ฌ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด ์ด ๋ฐฉ๋ฒ•์„ ์ถ”์ฒœ๋“œ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” Docker๋ฅผ ์ด์šฉํ•ด ์นดํ”„์นด๋ฅผ ์„ค์น˜ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

Single Node

์ตœ๋Œ€ํ•œ ์‰ฝ๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด ์‹ฑ๊ธ€ ๋…ธ๋“œ ๊ตฌ์„ฑ์œผ๋กœ ์นดํ”„์นด๋ฅผ ์„ค์น˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

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

 

 

 

Network ๊ตฌ์„ฑ

Docker์—์„œ ํด๋Ÿฌ์Šคํ„ฐ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ฃผํ‚คํผ์™€ ์นดํ”„์นด๋ฅผ ์„œ๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ทธ๋“ค๋งŒ์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

$ docker network create local-kafka

์œ„ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ ํŠน์ • ๋„คํŠธ์›Œํฌ ๋ธŒ๋ฆฟ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

 

 

Zookeeper ์„ค์น˜

์นดํ”„์นด๋Š” ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์„ ๊ธฐ๋ณธ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹จ์ผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๊ณ , ๋ถ„์‚ฐ๋œ ์นดํ”„ํ‚ค์˜ ๋…ธ๋“œ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋””๋„ค์ดํ„ฐ ์„œ๋น„์Šค ์‹œ์Šคํ…œ์ด ํ•„์š”ํ•œ๋ฐ, ์ด์— ๋Œ€ํ‘œ์ ์ธ ์†”๋ฃจ์…˜์ด ๋ฐ”๋กœ ์ฃผํ‚คํผ(Zookeeper)์ž…๋‹ˆ๋‹ค.

 

https://hub.docker.com/_/zookeeper/tags

 

zookeeper Tags | Docker Hub

zookeeper •• Apache ZooKeeper is an open-source server which enables highly reliable distributed coordination.

hub.docker.com

์šฐ๋ฆฌ๋Š” Docker๋ฅผ ์ด์šฉํ•˜์—ฌ ์นดํ”„์นด๋ฅผ ์„ค์น˜ํ•ด๋ณผ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฃผํ‚คํผ ๋˜ํ•œ Docker ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Macbook์„ ์‚ฌ์šฉํ•˜์‹œ๋Š” ๊ฒฝ์šฐ ์ž์‹ ์˜ ๋งฅ๋ถ์ด M1 ํ”„๋กœ์„ธ์„œ์ธ์ง€๋ฅผ ํ™•์ธํ•œ ํ›„ ๋ฒ„์ „์„ ์„ ํƒํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

$ docker pull zookeeper:3.8.0-temurin

์ด ํฌ์ŠคํŠธ์—์„œ๋Š” ํŽธ์˜์ƒ ์ฃผํ‚คํผ์˜ 3.8 ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์œ„ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋จผ์ € ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

 

์ด๋ฏธ์ง€๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋ฐ›์•„์กŒ๋‹ค๋ฉด Pull complete์ด๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

$ docker run -d --net local-kafka --name local-zookeeper -p 2181:2181 zookeeper:3.8.0-temurin

์ด๋ฏธ์ง€๋ฅผ ๋ชจ๋‘ ๋ฐ›์•˜๋‹ค๋ฉด ์ด์ œ ์ฃผํ‚คํผ ์„œ๋ฒ„๋ฅผ ๋„์›Œ๋ณผ๊ฑด๋ฐ์š”. ์œ„ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ ํฌํŠธ ์ฃผ์†Œ๋ฅผ 2181์„ expose ํ•œ ๋‹ค์Œ local-zookeeper๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ฃผํ‚คํผ ์„œ๋ฒ„๋ฅผ ๋„์›Œ์ค๋‹ˆ๋‹ค.

 

์ปจํ…Œ์ด๋„ˆ ํ•ด์‰ฌ๊ฐ’์ด ์ถœ๋ ฅ๋œ ํ›„ docker ps ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ local-zookeeper๊ฐ€ ๋ณด์ธ๋‹ค๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ์ฃผํ‚คํผ๊ฐ€ ๋„์›Œ์ง„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

 

Zookeeper ๊ธฐ๋ณธ ๋‹ค๋ฃจ๊ธฐ

์šฐ๋ฆฌ๋Š” Docker์—์„œ 2181๋ฒˆ ํฌํŠธ ์ฃผ์†Œ๋งŒ์„ expose ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ํ•˜์œ„ ๋…ธ๋“œ๊ฐ€ ์ฃผํ‚คํผ์™€ ์—ฐ๊ฒฐํ•  ๋•Œ ์“ฐ๋Š” Listen Port๊ฐ€ 2181 ํฌํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋‚˜๋จธ์ง€ ํฌํŠธ ์ฃผ์†Œ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

 

  • 2181: ์ฃผํ‚คํผ์™€ ์—ฐ๊ฒฐํ•  ํด๋ผ์ด์–ธํŠธ๋“ค์˜ ์—ฐ๊ฒฐ ํฌํŠธ ์ฃผ์†Œ
  • 2888: follower๊ฐ€ leader์—๊ฒŒ ์—ฐ๊ฒฐ์„ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•œ ํฌํŠธ ์ฃผ์†Œ
  • 3888: leader๋ฅผ ์„ ์ถœํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ ์ฃผ์†Œ
  • 8080: Web API ํฌํŠธ ์ฃผ์†Œ

ํ˜„์žฌ ์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” Single Cluster - Single Node์—์„œ๋Š” 2888, 3888 ํฌํŠธ ์ฃผ์†Œ๋Š” ํฐ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ๋ฉ€ํ‹ฐ ํด๋Ÿฌ์Šคํ„ฐ์™€ ๋ฉ€ํ‹ฐ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ์นดํ”„์นด์— ๋Œ€ํ•ด ๋‹ค๋ฃจ๊ฒŒ ๋œ๋‹ค๋ฉด ์ข€ ๋” ์‹ฌ์ธต์ ์œผ๋กœ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ด์ œ ์ฃผํ‚คํผ๋ฅผ ๋„์› ์œผ๋‹ˆ ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€๋ฅผ ์ง์ ‘ ์ ‘์†ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ฒ ์ง€๋งŒ ์ด๋Š” ์ข€ ๋” ํ›„์— ๋ณด๋„๋ก ํ•˜๊ณ , ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฃผํ‚คํผ๋ฅผ ์ปจํŠธ๋กคํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์ธ zocli.sh๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

$ docker exec -it local-zookeeper /bin/bash

์œ„ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์œ„์—์„œ ๋„์šด local-zookeeper ํ™˜๊ฒฝ์˜ bash๋ฅผ ์‹คํ–‰ํ•ด๋ด…๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์ด๋ ‡๊ฒŒ local-zookeeper์˜ bash ์‰˜์ด ์‹คํ–‰๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

bin ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ ‘๊ทผํ•˜๋ฉด zkCli.sh ํŒŒ์ผ์ด ๋ณด์ž…๋‹ˆ๋‹ค. zkCli๋Š” znode๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‚ญ์ œํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋กœ ์šฐ๋ฆฌ๋Š” ์ด์ œ๋ถ€ํ„ฐ ์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

$ ./zkCli.sh

 

๊ทธ๋Ÿฌ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ™์€ ํ˜ธ์ŠคํŠธ์˜ 2181 ์ฃผ์†Œ๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ์ ‘์†ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ๋กœ์ปฌ์˜ ์ฃผํ‚คํผ ์„œ๋ฒ„์— ์ ‘์†ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

[zk: localhost:2181(CONNECTED) 0] ls /

์ด๋ฒˆ์—” ls / ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด๋ด…์‹œ๋‹ค. 

 

์ด์ „ ๊ธ€์—์„œ ์ด์•ผ๊ธฐํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ์ฃผํ‚คํผ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‹จ์œ„(Znode)๋กœ ์ž์›์„ ๋ฐฐ์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Zookeeper (์ž๊ธฐ ์ž์‹ )์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๊ฒƒ๋„ ์ฃผํ‚คํผ์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

 

 

 

Kafka ์„ค์น˜

์ž ์ด์ œ ์ฃผํ‚คํผ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ฒƒ์€ ์ค€๋น„๊ฐ€ ๋๋‚ฌ์œผ๋‹ˆ ์ด์ œ ์นดํ”„์นด๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋„์›Œ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

$ docker pull wurstmeister/kafka:2.13-2.8.1

์ฃผํ‚คํผ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์นดํ”„์นด์˜ ์ด๋ฏธ์ง€ ์ด๋ฆ„๋งŒ ๋ฐ”๊ฟ” ์ปจํ…Œ์ด๋‹ˆ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

 

์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™”๋‹ค๋ฉด ์—ญ์‹œ Pull complete์ด ๋‚˜์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

$ docker run -d --net local-kafka --name local-kafka-node -p 9092:9092 -e KAFKA_ZOOKEEPER_CONNECT=local-zookeeper:2181 -e KAFKA_LISTENERS=INTERNAL://local-kafka-node:19092,EXTERNAL://localhost:9092 -e KAFKA_ADVERTISED_LISTENERS=INTERNAL://local-kafka-node:19092,EXTERNAL://localhost:9092 -e KAFKA_INTER_BROKER_LISTENER_NAME=INTERNAL -e KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT wurstmeister/kafka:2.13-2.8.1

์œ„ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ docker run์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์†Œ ๋ช…๋ น์–ด๊ฐ€ ๊ธด๋ฐ, ์ฃผํ‚คํผ ์—ฐ๊ฒฐ ์ •๋ณด ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ์นดํ”„์นด์—๊ฒŒ ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฐจ๊ทผ์ฐจ๊ทผ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ฃ .

 

  • KAFKA_ZOOKEEPER_CONNECT

    Kafka์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ฃผํ‚คํผ ์ฃผ์†Œ (์•™์ƒ๋ธ”์ธ ๊ฒฝ์šฐ Comma ๋‹จ์œ„๋กœ ๋ชจ๋“  ์ฃผํ‚คํผ์˜ ์ฃผ์†Œ๋ฅผ ์ ์–ด์•ผ ํ•จ)

  • KAFKA_LISTENERS

    ์นดํ”„์นด ๋ฆฌ์Šค๋„ˆ ์ฃผ์†Œ(์กด ๋‚ด)๋ฅผ ์ ๋Š” ๋ณ€์ˆ˜ (ํ˜„์žฌ๋Š” ํ•„์ˆ˜๊ฐ’์œผ๋กœ ๋“ค์–ด๊ฐ€์•ผ ํ•จ)

  • KAFKA_ADVERTISED_LISTENERS

    ์นดํ”„์นด ๋ฆฌ์Šค๋„ˆ ์ฃผ์†Œ(์กด ์™ธ)๋ฅผ ์ ๋Š” ๋ณ€์ˆ˜

  • KAFKA_INTER_BROKER_LISTENER_NAME

    ์นดํ”„์นด๋ผ๋ฆฌ ํ†ต์‹ ํ•  ๋ฆฌ์Šค๋„ˆ ์ด๋ฆ„์„ ์ •์˜

  • KAFKA_LISTENER_SECURITY_PROTOCOL_MAP

    ๋ฆฌ์Šค๋„ˆ์˜ ๋ณด์•ˆ ํ”„๋กœํ† ์ฝœ ์—ฌ๋ถ€ (PLAINTEXT, SSL, SASL_PLAINTEXT, SASL_SSL)

 

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

 

๊ทธ๋ฆฌ๊ณ , ADVERTISED_LISTENER์˜ ๊ฒฝ์šฐ NAT ๋‚ด์˜ ์กด์ด ์•„๋‹Œ ์กด ์™ธ์˜ ์นดํ”„์นด๋ผ๋ฆฌ ํ†ต์‹ ์„ ํ•ด์•ผํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(Kubernetes, k8s)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

LISTENER_SECURITY_PROTOCOL์€ ๋ฆฌ์Šค๋„ˆ๋“ค๋ผ๋ฆฌ ํ†ต์‹ ํ•  ๋–„ ์•”ํ˜ธํ™”๋ฅผ ํ• ๊ฒƒ์ธ์ง€ ํ‰๋ฌธ์œผ๋กœ ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์˜ต์…˜์œผ๋กœ ์—ฌ๊ธฐ์„œ๋Š” ํ‰๋ฌธ์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋‹ค์‹œ ์ฃผํ‚คํผ๋กœ ์™€์„œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋ณด๋ฉด zookeeper ์™ธ์— admin, brokers, cluster, consumers ๋“ฑ ์นดํ”„์นด์™€ ๊ด€๋ จ๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์ถ”๊ฐ€ ๋˜์—ˆ์Œ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

์ฃผํ‚คํผ Web API

์ฃผํ‚คํผ Web API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผํ‚คํผ๋ฅผ ๊ด€๋ฆฌํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

$ docker run -d --net local-kafka --name local-zookeeper -p 2181:2181 -p 8080:8080 zookeeper:3.8.0-temurin

WebAPI๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด 8080 ํฌํŠธ๋ฅผ EXPOSE ํ•ฉ๋‹ˆ๋‹ค.

 

Insomnia, Postman ๋“ฑ๊ณผ ๊ฐ™์€ API ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•ด ์ฃผํ‚คํผ WebAPI๋ฅผ ํ˜ธ์ถœํ•ด๋ด…๋‹ˆ๋‹ค. ๋งŒ์•ฝ CLI ํ™˜๊ฒฝ์ด๋ผ๋ฉด curl ๋“ฑ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

 

$ curl http://localhost:8080/commands/stats

GET commands/stats๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์„œ๋ฒ„ ์ƒํƒœ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์˜ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. connections ํ•ญ๋ชฉ์— ์•„๊นŒ ์šฐ๋ฆฌ๊ฐ€ ๋„์› ๋˜ ์นดํ”„์นด๊ฐ€ ์—ฐ๊ฒฐ๋œ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

$ docker inspect local-kafka-node

docker inspect ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด ์œ„์—์„œ ๋„์šด ์นดํ”„์นด์˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

 

IPAddress๋ฅผ ๋ณด๋ฉด 172.22.0.3 ์ฃผ์†Œ๊ฐ€ ์ผ์น˜ํ•˜๋ฉฐ ์šฐ๋ฆฌ๊ฐ€ ๋„์šด ์ฃผํ‚คํผ์— ์—ฐ๊ฒฐ๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

๋งˆ์น˜๋ฉฐ...

์นดํ”„์นด์˜ ์„ค์น˜๋Š” ์ผ๋ฐ˜ ์›น ์„œ๋ฒ„, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ณด๋‹ค๋„ ์„ค์น˜๊ฐ€ ๋ณต์žกํ•˜๊ณ  ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ ๋…ธ๋“œ, ์•™์ƒ๋ธ” ๊ตฌ์„ฑ์˜ ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ผ๋Š” ์ ๋„ ์žˆ์ง€๋งŒ ๊ทธ ๊ตฌ์กฐ๋ฅผ ๊ฟฐ๊ธฐ ์œ„ํ•ด ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•œ ์ง€์‹๋„ ํ™•์‹คํ•˜๊ฒŒ ๋ฐ›์ณ์ ธ ์žˆ์–ด์•ผ๋งŒ ์ด ์„ค์น˜ ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” docker-compose๋ฅผ ์ด์šฉํ•ด ์ข€ ๋” ์นดํ”„์นด๋ฅผ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments