[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
'Middleware > Kafka' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Kafka] ์ปจํ ์ด๋๋ฅผ ์ด์ฉํ Kafka ์ค์น (0) | 2022.10.09 |
---|---|
[Kafka] ์นดํ์นด์ ์ฝ๋๋ค์ดํฐ Zookeeper (0) | 2022.07.31 |
[Kafka] Apache Kafka๋ ๋ฌด์์ด๊ณ ์ ์ฑ๋ฅ์ด ๋น ๋ฅผ๊น? (0) | 2022.07.30 |