๋ฐ๋ธŒ์ฝ”์Šค_๋ฐ์ดํ„ฐ์—”์ง€๋‹ˆ์–ด๋ง

[Week15 ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ : Kafka] TIL 63์ผ์ฐจ Docker๋ฅผ ์ด์šฉํ•œ Kafka ํ™˜๊ฒฝ ๊ตฌ์ถ•(Feat. Google Cloud)

๐Ÿช„ํ•˜๋ฃจ๐Ÿช„ 2024. 1. 25. 19:42
728x90

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” yamlํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ Docker์—์„œ Kafka๋ฅผ ์‹คํ–‰ํ•ด ๋ณด์ž.

โ… . GCP์— Docker์ปจํ…Œ์ด๋„ˆ๋กœ Kafka ํ™˜๊ฒฝ ๊ตฌ์ถ•ํ•˜๊ธฐ

1. GCP VM ์ธ์Šคํ„ด์Šค ์„ค์ •

์ด์ „์˜ airflow์™€ ๋น„์Šทํ•œ ๊ณผ์ •์ด๋‹ค.

full-stack Kafka yamlํŒŒ์ผ์„ ์‹คํ–‰ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ปดํ“จํŒ… ์ž์›์ด ๋งŽ์€ vm์—”์ง„์„ ์„ ํƒํ•˜์˜€๋‹ค.

  • c2-standard-4
  • Ubuntu-20.04 30GB

 

2. ์„œ๋ฒ„์— Docker ์„ค์น˜

โ‘  ์‹œ์Šคํ…œ์˜ ํŒจํ‚ค์ง€ ๋ชฉ๋ก์„ ์ตœ์‹  ์ƒํƒœ๋กœ ์—…๋ฐ์ดํŠธ

โ‘ก Docker๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ถ”๊ฐ€์ ์ธ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜(apt-transport-https, ca-certificates, curl, software-properties-common)

โ‘ข Docker์˜ ๊ณต์‹ GPG ํ‚ค๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ APT ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์— ์ถ”๊ฐ€

โ‘ฃ Docker ํŒจํ‚ค์ง€๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ €์žฅ์†Œ๋ฅผ ์‹œ์Šคํ…œ์— ์ถ”๊ฐ€

โ‘ค ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ Docker ์ €์žฅ์†Œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์—ฌ ํŒจํ‚ค์ง€ ๋ชฉ๋ก์„ ์—…๋ฐ์ดํŠธ

โ‘ฅ ์„ค์น˜ ๊ฐ€๋Šฅํ•œ Docker ๋ฒ„์ „์˜ ๋ชฉ๋ก์„ ํ‘œ์‹œ โ‘ฆ ์•ž์„œ ์„ค์ •ํ•œ ์ €์žฅ์†Œ๋ฅผ ํ†ตํ•ด Docker Community Edition (CE)๋ฅผ ์„ค์น˜ + Docker ์—”์ง„ ํ™œ์„ฑํ™”

sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce

 

3. ์„œ๋ฒ„์— Docker-compose ์„ค์น˜

โ‘  Docker compose ํŒจํ‚ค์ง€ ๋‹ค์šด๋กœ๋“œ (2 ๋ฒ„์ „ ์ด์ƒ์„ ๋‹ค์šด๋กœ๋“œํ•˜์ž. 1 ๋ฒ„์ „์€ ์˜ค๋ฅ˜๊ฐ€ ๋งŽ์ด ๋‚œ๋‹ค)

โ‘ก ๋‹ค์šด๋กœ๋“œํ•œ Docker Compose ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์— ์‹คํ–‰ ๊ถŒํ•œ์„ ๋ถ€์—ฌ

โ‘ข ํ˜„์žฌ ์‚ฌ์šฉ์ž๋ฅผ Docker ๊ทธ๋ฃน์— ์ถ”๊ฐ€

sudo curl -L https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo usermod -aG docker $USER

 

4. Docker image๋กœ ํ™˜๊ฒฝ ๊ตฌ์ถ•ํ•˜๊ธฐ

1) ๋„์ปค ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋Š” ๊นƒํ—ˆ๋ธŒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ํด๋ก 

git clone https://github.com/conduktor/kafka-stack-docker-compose

 

2) Kafka ๋„์ปค ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

kafka-stack-docker-compose ํด๋”๋กœ ์ด๋™ํ•œ ๋’ค, ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.

cd kafka-stack-docker-compose
docker-compose -f full-stack.yml pull
docker compose -f full-stack.yml up

 

 

โ…ก. Kafka ์›นํŽ˜์ด์ง€ ์ ‘์†ํ•˜๊ธฐ

gcp-vm๋จธ์‹  ์™ธ๋ถ€ ip:8080 ์ฃผ์†Œ๋กœ ์ ‘์†ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด kafka conduktor๋ฅผ ์›น์œผ๋กœ ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋กœ๊ทธ์ธ ์•„์ด๋””, ํŒจ์Šค์›Œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

login: admin@admin.io password: admin

 

โ…ข. python์„ ์ด์šฉํ•ด Kafka ์ž‘์—…์ˆ˜ํ–‰ํ•˜๊ธฐ

1. python ๋ชจ๋“ˆ ์„ค์น˜ํ•˜๊ธฐ

pip3 install kafka-python

 

2. Producer ๋งŒ๋“ค๊ธฐ ์˜ˆ์ œ

๋กœ์ปฌ Kafka ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” KafkaProducer ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ

์ „์†กํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ json ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ ๋‹ค์Œ UTF-8๋กœ ์ธ์ฝ”๋”ฉํ•˜์—ฌ ์ง๋ ฌํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜

from json import dumps
from kafka import KafkaProducer

producer = KafkaProducer(
   bootstrap_servers=[Broker์˜ ๋ชฉ๋ก],
   value_serializer=lambda x: dumps(x).encode('utf-8')
)
data={key:value}
producer.send('topic ์ด๋ฆ„', value=data)

 

Topic์ด ์ž˜ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์„ ์›น UI์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Producer๊ฐ€ ์ƒ์„ฑํ•œ Topic

3. Consumer ๋งŒ๋“ค๊ธฐ

consumer = KafkaConsumer(
 '์†Œ๋น„ํ•  topic์ด๋ฆ„',
 bootstrap_servers=[brokerip:8080์˜ ์ง‘ํ•ฉ],
 auto_offset_reset='earliest',
 enable_auto_commit=True,
 group_id='๋™์ผํ•œ ์ž์›์„ ์†Œ๋น„ํ•˜๋Š” consumer์„ ๊ทธ๋ฃน์œผ๋กœ ์ง€์ •',
 value_deserializer=lambda x: loads(x.decode('utf-8'))
)

- auto_offset_reset

  • earlist : ํ์— ์ €์žฅ๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฒ ๋‹ค
  • latest : ํ์— ์ƒˆ๋กœ ์ƒ๊ธด ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ ์ฝ๊ฒ ๋‹ค 

- enable_auto_commit

  • True : kafka consumer object๊ฐ€ ์•Œ์•„์„œ offset๊ฐ’์„ ๊ธฐ๋ก
  • False : kafka consumer object๊ฐ€ ์•Œ์•„์„œ offset๊ฐ’์„ ๊ธฐ๋กํ•˜์ง€ ์•Š์Œ(๋ณดํ†ต ํ˜„์—…์—์„œ๋Š” ์œ„ํ—˜ํ•ด์„œ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ. ๋Œ€์‹ , Kafka consumer ํ•จ์ˆ˜์ค‘ commit์„ ์‚ฌ์šฉํ•ด์„œ ๋ช…์‹œ์ ์œผ๋กœ ์œ„์น˜๋ฅผ ๊ธฐ๋ก)

 

728x90