์ด ๊ธ์์๋ Apache Kafka๋ฅผ ๋ก์ปฌ ํ๊ฒฝ์ ๋์ฐ๊ณ , CLI๋ฅผ ์ฌ์ฉํ์ฌ ํ ํฝ ์์ฑ, ๋ฉ์์ง ๋ฐ์ ๋ฐ ๊ตฌ๋ ์ ์ง์ ์ค์ตํ๋ ๋ฐฉ๋ฒ์ ์ ์ด๋ณด๋ ค๊ณ ํ๋ค.
(์ด ๊ฐ์ด๋๋ Docker Descktop์ด ์ค์น๋ MacOS ํ๊ฒฝ์ ๊ธฐ์ค์ผ๋ก ์์ฑ๋์ด์๋ค.)
์นดํ์นด๋ ์์ ์ ์ธ ์คํ์ ์ํด ๋ฉํฐ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ Zookeper์ ํจ๊ป ๊ตฌ๋๋๋ค. Docker๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๋ ์๋ฒ๋ฅผ ๋์์ ์คํํ๋ค.
docker-compose.yml ํ์ผ ์์ฑ์์
ํด๋๋ฅผ ์์ฑํ ํ, ์๋ ๋ด์ฉ์ docker-compose.yml ํ์ผ์ ์์ฑํ๋ค. ์ด ์ค์ ์ ์นดํ์นด ๋ธ๋ก์ปค๋ฅผ localhost:9092 ํฌํธ๋ก ์ธ๋ถ์ ๋
ธ์ถํ๋ค.
services:
zookeeper:
image: confluentinc/cp-zookeeper:7.5.0
container_name: zookeeper
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
kafka:
image: confluentinc/cp-kafka:7.5.0
container_name: kafka
depends_on:
- zookeeper
ports:
- "9092:9092" # ํธ์คํธ ํฌํธ: ์ปจํ
์ด๋ ํฌํธ
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
ํฐ๋ฏธ๋์์ docker-compose.yml ํ์ผ์ด ์๋ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ์ฌ ์คํํ๋ค.
# ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ปจํ
์ด๋ ์คํ
docker-compose up -d
# ์คํ ์ํ ํ์ธ
docker ps
๐ก ํ์ธ:
kafka์zookeeper๋ ์ปจ๋ค์ดํฐ ์ํ๊ฐUp์ผ๋ก ํ์๋๋ฉด ์ฑ๊ณต.
์ปจํ ์ด๋๊ฐ ์ ์์ ์ผ๋ก ์คํ๋์๋ค๋ฉด, ์ด์ ์นดํ์นด์ ๊ธฐ๋ณธ ๋ช ๋ น์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์์ง ํ๋ฆ์ ์์๋ณด๋๋กํ์. ๋ชจ๋ ๋ช ๋ น์ ์นดํ์นด ์ปจํ ์ด๋ ๋ด๋ถ์์ ์คํ๋๋ค.
๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด study-topic์ด๋ผ๋ ์ด๋ฆ์ ํ ํฝ์ ๋จผ์ ์์ฑํ๋ค.
# ์นดํ์นด ์ปจํ
์ด๋ ๋ด๋ถ ์ ์ ์
docker exec -it kafka /bin/bash
# ํ ํฝ ์์ฑ ๋ช
๋ น์ด
kafka-topics --create --topic study-topic --bootstrap-server localhost:9092 --replication-factor 1
์๋ก์ด ํฐ๋ฏธ๋ ํญ์ ์ด๊ณ , ์ปจํ
์ด๋์ ๋ค์ ์ ์ํ ๋ค Consumer๋ฅผ ์คํํ๋ค. Consumer๋ --from-beginnig ์ต์
์ผ๋ก ๊ธฐ์กด์ ์ ์ฅ๋ ๋ฉ์์ง๋ถํฐ ์ฝ๊ธฐ ์์ํ๋ค.
# ์ ํฐ๋ฏธ๋ ํญ์์ ์นดํ์นด ์ปจํ
์ด๋ ์ ์
docker exec -it kafka /bin/bash
# Consumer ์คํ (๊ตฌ๋
์์)
kafka-console-consumer --topic study-topic --from-beginning --bootstrap-server localhost:9092
# ์ด์ ์ด ์ฐฝ์ ๋ฉ์์ง๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ํ๊ฐ ๋๋ค.
๋ ๋ค๋ฅธ ์๋ก์ด ํฐ๋ฏธ๋ ํญ์ ์ด๊ณ , Producer๋ฅผ ์คํํ์ฌ ๋ฉ์์ง๋ฅผ ๋ฐํํ๋ค.
# ์ธ ๋ฒ์งธ ํฐ๋ฏธ๋ ํญ์์ ์นดํ์นด ์ปจํ
์ด๋ ์ ์
docker exec -it kafka /bin/bash
# Producer ์คํ (๋ฉ์์ง ๋ฐํ ์์)
kafka-console-producer --topic study-topic --bootstrap-server localhost:9092
๐ ์ค์ต ๋ฐ ํ์ธ
1. Producer ํฐ๋ฏธ๋์ ๋ฉ์์ง๋ฅผ ์
๋ ฅํ๊ณ Enter.
2. ๋ฉ์์ง๋ฅผ ์
๋ ฅํ๋ ์ฆ์ Consumer ํฐ๋ฏธ๋์ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธ.
3. Consumper ํฐ๋ฏธ๋์ ์ข
๋ฃํ์ง ์์ ์ฑ Producer๋ก ๋ฉ์์ง๋ฅผ ๊ณ์ ๋ณด๋ด๋ณด๋ฉด ์ด๊ฒ์ด ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ์ ํต์ฌ์ด๋ผ๊ณ ์ ์ ์๋ค.
Consumper๋ฅผ ์ข ๋ฃํ ํ, Producer๋ก ๋ฉ์์ง๋ฅผ 5๊ฐ ๋ ๋ณด๋ด๋ณธ๋ค. ๊ทธ๋ฆฌ๊ณ Consumper๋ฅผ ๋ค์ ์คํํ๋ค.
# Consumer๋ฅผ ๋ค์ ์คํ (์๋ก์ด Consumer)
docker exec -it kafka /bin/bash
kafka-console-consumer --topic study-topic --from-beginning --bootstrap-server localhost:9092
๐ก ํ์ธ: Consumer๊ฐ ๊บผ์ ธ์์ ๋ ์ ์กํ๋ 5๊ฐ์ ๋ฉ์์ง๋ฅผ ํฌํจํ์ฌ ๋ชจ๋ ๋ฉ์์ง๊ฐ ๋ค์ ์ถ๋ ฅ๋๋ค.
์ด๋ ์นดํ์นด๊ฐ ๋ฉ์์ง๋ฅผ ๋์คํฌ์ ์์ ํ๊ฒ ์ ์ฅ(์์์ฑ) ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ค์ต์ ๋ง์ณค๋ค๋ฉด, ๋ถํ์ํ ๋ฆฌ์์ค ์ฌ์ฉ์ ๋ง๊ธฐ ์ํด ์ปจํ ์ด๋๋ฅผ ์ข ๋ฃํ๋ค.
# docker-compose.yml์ด ์๋ ํด๋์์ ์คํ
docker-compose down
์ด์ ์นดํ์นด์ ๊ธฐ๋ณธ์ ์ธ ๋ฉ์์ง ๋ฐ์/๊ตฌ๋ ํ๋ฆ์ ์ดํดํ๊ฒ ๋๋ค. ์ค์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์นดํ์นด๋ฅผ ์ ์ฉํ์ฌ ์ฌ์ฉํด๋ณด๋ฉด์ ์ฌํ์ ์ธ ๊ณผ์ ์ ๋ฐฐ์ฐ๋ฉด ๋ ๊ฑฐ ๊ฐ๋ค.