[Kafka] docker-compose๋ฅผ ํ™œ์šฉํ•œ ๋” ์‰ฌ์šด Kafka ์„œ๋ฒ„ ์„ค์น˜

๋ฐ˜์‘ํ˜•

์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ Docker๋ฅผ ์ด์šฉํ•ด Kafka์™€ Zookeeper๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Zookeeper์™€ Kafka ์ด๋ฏธ์ง€๋ฅผ pullํ•˜๊ณ  runํ•˜๊ณ , ๋„คํŠธ์›Œํฌ๋ฅผ ๋งŒ๋“œ๋Š” ์ž‘์—…์„ ์ผ์ผ์ด ๋ช…๋ น์–ด๋กœ ์น˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋ถˆํŽธํ•˜๊ณ  ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—…๋“ค์ด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ์ด๋ฒˆ์—” docker-compose๋ฅผ ์ด์šฉํ•ด์„œ ๋ช…๋ น์–ด ํ•˜๋‚˜๋งŒ ๊ฐ€์ง€๊ณ  ์‰ฝ๊ฒŒ ๋กœ์ปฌ์—์„œ Kafka ๋ธŒ๋กœ์ปค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

 

docker-compose

๋จผ์ € ์งง๊ฒŒ docker-compose์— ๋Œ€ํ•ด์„œ ์„ค๋ช…์„ ๋“œ๋ฆฌ์ž๋ฉด docker-compose๋Š” Docker์˜ ๊ตฌ์„ฑ ์š”์†Œ(์ด๋ฏธ์ง€, ๋„คํŠธ์›Œํฌ, ๋ณผ๋ฅจ, ์‹คํ–‰ ์ „๋žต)๋“ค์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ์—ฎ์–ด ์‹คํ–‰ํ•˜๋Š” ํ†ตํ•ฉ ์‹คํ–‰ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

 

์ฆ‰ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๋„์ปค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ํˆด ์ค‘์— ํ•˜๋‚˜์ธ๋ฐ, ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฐ„๋‹จํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋จผ์ € docker-compose.yml ํŒŒ์ผ์„ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š”๋ฐ, docker-compose.yml ํŒŒ์ผ์—๋Š” ์•„๋ž˜์˜ ๋‚ด์šฉ์ด ๋‹ด๊ฒจ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

 

  • ์ปจํ…Œ์ด๋„ˆ ์ •๋ณด
  • ๋ณผ๋ฅจ ์ •๋ณด
  • EXPOSE ํฌํŠธ ์ •๋ณด
  • ์†Œ์† ๋„คํŠธ์›Œํฌ ์ •๋ณด

 

๊ธฐ์กด Dockerfile์—์„œ๋Š” ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์–ด๋Š Base ์ด๋ฏธ์ง€์—์„œ ์–ด๋–ค ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์–ด๋–ค ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ด์„œ ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค ๊ฒƒ์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ํŒŒ์ผ์ด์—ˆ๋‹ค๋ฉด docker-compose๋Š” ๊ทธ๋Ÿฐ Dockerfile์„ ์ฝ์–ด์„œ Docker Engine์—์„œ ์ง€์›ํ•˜๋Š” ๋ณผ๋ฅจ, ๋„คํŠธ์›Œํฌ, ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์— ๋Œ€ํ•œ ์ •์˜๋ฅผ ํŒŒ์ผ๋กœ ํ•œ ๋ฒˆ์— ์ฝ์–ด์„œ ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์œผ๋กœ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

 

 

 

 

Kafka๋ฅผ docker-compose๋กœ ๊ตฌ๋™ํ•˜๊ธฐ

์ž ๊ทธ๋Ÿผ ์ด์ œ docker-compose.yml ํŒŒ์ผ ํ•œ ๊ฐœ๋ฅผ ์ž‘์„ฑํ•ด์„œ ๋‹จ์ผ Kafka ๋ธŒ๋กœ์ปค ํ•œ ๊ฐœ๋ฅผ ๋„์›Œ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์œ„์™€ ๊ฐ™์ด docker-compose.yml ํŒŒ์ผ์„ ๋งŒ๋“  ๋‹ค์Œ.

 

$ docker-compose up -d

์œ„ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ •์˜ํ•œ ์ฃผํ‚คํผ์™€ ์นดํ”„์นด ๋‘ ๊ฐœ๊ฐ€ ๋™์‹œ์— Docker Engine์—์„œ ๋„์šฐ๋ ค ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ๋ด์•ผํ•  ์ ์€ ์ฒซ ๋ฒˆ์งธ๋กœ ๋งŒ๋“œ๋Š” ๋„์ปค ๋„คํŠธ์›Œํฌ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” docker-compose.yml์—์„œ ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์„ ์ง€์ •ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ docker-compose๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ€ํ‹ฐ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์ผ ๋•Œ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ๋ณ„๋„๋กœ ๊ตฌ์ถ•ํ•˜๊ณ  ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋“œ๋ผ์ด๋ฒ„๋Š” Default Driver์ธ๋ฐ, Docker Engine์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Bridge ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์€ ํ”„๋กœ์ ํŠธ ํด๋” ์ด๋ฆ„์„ Prefix๋กœ ํ•˜์—ฌ docker-compose.yml์—์„œ ์ •์˜ํ•œ ์ด๋ฆ„์„ Postfix๋กœ ํ•˜์—ฌ ์ด๋ฆ„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

docker ps ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์ƒํ™ฉ์„ ๋ณด๋ฉด Kafka์™€ Zookeeper๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž˜ ์‹คํ–‰๋˜๊ณ  ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

 

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

curl ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ ์ฃผํ‚คํผ์™€ ์นดํ”„์นด๊ฐ€ ์ž˜ ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€๋„ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

connections์— ๋ณด๋‹ค์‹œํ”ผ ํ•œ ๊ฐœ์˜ ์นดํ”„์นด๊ฐ€ ์ž˜ ์—ฐ๊ฒฐ๋˜์—ˆ์Œ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

docker-compose๋กœ Kafka ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์ถ•ํ•˜๊ธฐ

์นดํ”„์นด๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์ฝ”๋””๋„ค์ด์…˜ ์‹œ์Šคํ…œ์œผ๋กœ Zookeeper๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์šฐ๋ฆฌ๊ฐ€ ์ˆ˜ ๋งŽ์€ ๋ฉ”์‹œ์ง€ ํ ์ค‘์—์„œ๋„ ์นดํ”„์นด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

 

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

 

์ด ์—ญ์‹œ docker-compose๋ฅผ ์ด์šฉํ•˜๋ฉด ๋น ๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฃผํ‚คํผ 1๊ฐœ์™€ ์นดํ”„์นด 3๊ฐœ๋ฅผ ๋„์šด๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ ์šฐ๋ฆฌ๋Š” Docker ๋„คํŠธ์›Œํฌ ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค๊ณ , ์ด ๋„คํŠธ์›Œํฌ ์กด์— ์ฃผํ‚คํผ์™€ ์นดํ”„์นด๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ํฌํŠธ๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

docker-compose์—์„œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„๊ณผ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์ง์ ‘ ์ง€์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด hostname, name ํ‚ค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ˜ธ์ŠคํŠธ ์ด๋ฆ„๊ณผ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด Prefix๊ฐ€ ๋˜์ง€ ์•Š๊ณ , ์ง€์ •ํ•œ ์ด๋ฆ„์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์— ๋ณด๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์‹ฑ๊ธ€ ์นดํ”„์นด๋ฅผ ๊ตฌ๋™ํ–ˆ์„ ๋•Œ ์“ฐ์ง€ ์•Š์•˜๋˜ KAFKA_BROKER_ID๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ID๋Š” ํŠน์ • Producer ๋‚ด์ง€ Consumer๊ฐ€ ์นดํ”„์นด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์–ด๋Š ๋ธŒ๋กœ์ปค์— ์ ‘๊ทผํ–ˆ๋Š”์ง€๋ฅผ ์•Œ๊ธฐ ์œ„ํ•œ ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.

 

๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹ค์ˆ˜์˜ ์ฃผํ‚คํผ ํด๋Ÿฌ์Šคํ„ฐ์™€ ๋‹ค์ˆ˜์˜ ์นดํ”„์นด ํด๋Ÿฌ์Šคํ„ฐ๋กœ๋„ ์„œ๋ฒ„๋ฅผ ๊ธฐ๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฃผํ‚คํผ 3๊ฐœ๋ฅผ ๊ทธ๋ฃนํ•‘ํ•˜๊ณ , ์นดํ”„์นด 3๊ฐœ๋ฅผ ๊ทธ๋ฃนํ•‘ํ•˜์—ฌ docker-compose.yml๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

์ •์ƒ์ ์œผ๋กœ 6๊ฐœ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

๋งˆ์น˜๋ฉฐ..

์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ๋Š” Dockerfile์„ ์ด์šฉํ•ด ์ข€ ๋” ๊นŠ๊ฒŒ ๊ณต๋ถ€ํ•˜๋ฉฐ ์นดํ”„์นด๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ณผ์ •์„ ๋‹ค๋ค˜๋‹ค๋ฉด ์ด์ œ๋Š” ๊ฐœ๋…์„ ์–ด๋Š ์ •๋„ ์ตํ˜”์œผ๋‹ˆ ์ข€ ๋” ์‰ฝ๊ฒŒ ์„ค์น˜ํ•ด์„œ ์‹ค์ „์— ์˜ฎ๊ธฐ๋Š” ๋ฒ•์„ ์ตํ˜”์Šต๋‹ˆ๋‹ค.

 

๊ฐœ์ธ์ ์œผ๋กœ ์ €๋Š” Docker๊ฐ€ ๊ต‰์žฅํžˆ ์ข‹์€ ํˆด์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ์ด๋Ÿฌํ•œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด์„œ Virtualbox ๋‚ด์ง€ QEMU๋ฅผ ์„ค์น˜ํ•ด์„œ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ํ•˜๋‚˜ํ•˜๋‚˜ ๊ตฌ์ถ•ํ•˜๊ฑฐ๋‚˜ ์ข€ ๋” ๋จธ๋ฆฌ๋ฅผ ์“ด๋‹ค๋ฉด ansible ๊ฐ™์€ ์ธํ”„๋ผ ์ฝ”๋“œ ํ”Œ๋žซํผ ๋“ฑ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

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

 

๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” CLI์—์„œ Kafka์— ์ง์ ‘ Topic์„ ๋งŒ๋“ค๊ณ , ๋ฉ”์‹œ์ง€๋ฅผ Produceํ•˜๊ณ  Consumeํ•˜๋Š” ๊ธ€์„ ์ž‘์„ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

์ฐธ๊ณ : Kafka ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์ถ• compose.yml

(https://github.com/conduktor/kafka-stack-docker-compose)

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments