๊ณต๋ถ€

์•„ํŒŒ์น˜ ์นดํ”„์นด ์„ค์น˜(kraft)

ํฌ๋ฆฌ๋„ฅ์Šค์„๋ผ์ด์Šค 2023. 12. 29. 18:27

์•ˆ๋…•ํ•˜์„ธ์š” ํฌ๋ฆฌ๋„ฅ์Šค์„๋ผ์ด์Šค์ž…๋‹ˆ๋‹ค.

 

๋ณดํ†ต ์•„ํŒŒ์น˜ ์นดํ”„์นด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์ฃผํ‚คํผ์™€ ๊ฐ™์ด ์„ค์น˜๋ฅผ ๋งŽ์ด ํ•˜๋Š”๋ฐ

 

์ด๋ฒˆ์—๋Š” ์ฃผํ‚คํผ ์—†์ด ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•œ ์•„ํŒŒ์น˜ ์นดํ”„์นด 3๋ฒ„์ „์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ์„ค์น˜์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๊ธ€๋กœ ๋‹ด์•„๋ดค์Šต๋‹ˆ๋‹ค.

 

๋จผ์ € ์ €๋Š” ec2 ์ธ์Šคํ„ด์Šค(t2.medium) 3๊ฐœ๋ฅผ ์ด์šฉํ•ด ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

1. ํ˜ธ์ŠคํŠธ ๋“ฑ๋ก  

๋จผ์ € 3๊ฐœ์˜ ec2 ์ธ์Šคํ„ด์Šค ์„œ๋ฒ„์— ๊ฐ๊ฐ ํ˜ธ์ŠคํŠธ ๋‚ด์šฉ์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

 

์ €๋Š” ec2 ์ธ์Šคํ„ด์Šค์—์„œ ํ”„๋ผ์ด๋น— IPv4 ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ•ด ํ˜ธ์ŠคํŠธ๋กœ ๋“ฑ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค์˜ ํ”„๋ผ์ด๋น— IPv4 ์ฃผ์†Œ

 

ํ˜น์€ ์ธ์Šคํ„ด์Šค์— ์ ‘์† ํ›„ ํ„ฐ๋ฏธ๋„์— ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

hostname -i

 

/etc/hosts ํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋“ฑ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.

// ํ˜ธ์ŠคํŠธ ํŒŒ์ผ ์—ด๊ธฐ
sudo vi /etc/hosts

// ๋‹ค์Œ ์ •๋ณด๋“ค์„ ์ž…๋ ฅ ํ›„ ์ €์žฅ
์ธ์Šคํ„ด์Šค1_ip์ฃผ์†Œ kafka01
์ธ์Šคํ„ด์Šค2_ip์ฃผ์†Œ kafka03
์ธ์Šคํ„ด์Šค3_ip์ฃผ์†Œ kafka02

 

kafka01, kafka02, kafka03 ๊ฐ™์€ ์ด๋ฆ„์€ ๊ตฌ๋ถ„์ง“๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— 

 

kafka-01 / kafka001 / kafka1  ๋“ฑ ๋ง˜์— ๋“œ๋Š” ๋‹ค์–‘ํ•œ ํ˜•์‹์œผ๋กœ ์ด์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ด์–ด์„œ ์ €๋Š” ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

(์•„๋งˆ ์„ค์ • ํ›„ ์žฌ์ ‘์†์„ ํ•ด์•ผ ๋ณ€๊ฒฝ๋œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.)

// ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ์„ค์ • (๊ฐ๊ฐ ์„œ๋ฒ„์—์„œ ๋ช…๋ น์–ด ์‹คํ–‰)
hostnamectl set-hostname kafka01
hostnamectl set-hostname kafka02
hostnamectl set-hostname kafka03

 

2. ์ž๋ฐ” ์„ค์น˜

๋จผ์ € ์„ค์น˜ ๊ฐ€๋Šฅํ•œ ์ž๋ฐ” ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

sudo yum list | grep jdk 

// ํ˜น์€ ๋‹ค์Œ ๋ช…๋ น์–ด๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 
yum list java*

ํ•„์š”ํ•œ ์ž๋ฐ” ๋ฒ„์ „์„ ์„ค์น˜ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

(์ €๋Š” 17๋ฒ„์ „์„ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.)

// corretto jdk ์„ค์น˜
sudo yum install java-17-amazon-corretto.x86_64

// java -version
sudo yum install java-17-amazon-corretto-devel.x86_64

 

์ œ๋Œ€๋กœ ์„ค์น˜๊ฐ€ ๋˜์—ˆ๋Š”์ง€ --version ์„ ์ด์šฉํ•ด ํ™•์ธํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

java --version
javac --version

 

์ดํ›„ Path ๋“ฑ๋ก์„ ์œ„ํ•ด ์ž๋ฐ”๊ฐ€ ์„ค์น˜๋œ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
(์ €๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ๋กœ์— ์ž๋ฐ”๊ฐ€ ์„ค์น˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.)

which java

 

๋‹ค์Œ ๋ช…๋ น์–ด๋กœ Path๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

# ์ž์‹ ์˜ ์ž๋ฐ” ๊ฒฝ๋กœ๋กœ ์„ค์ •
export JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto.x86_64
export PATH=$PATH:$JAVA_HOME/bin

 

3. ์•„ํŒŒ์น˜ ์นดํ”„์นด 3๋ฒ„์ „ ์„ค์น˜

์ €๋Š” ์•„ํŒŒ์น˜ ์นดํ”„์นด 3.5.1 ๋ฒ„์ „(์Šค์นผ๋ผ๋Š” 2.1.3 ๋ฒ„์ „)์„ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

(์ •ํ™•ํžˆ ๊ธฐ์–ต์€ ์ž˜ ์•ˆ๋‚˜๋Š”๋ฐ source ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์œผ๋ฉด ์‹คํ–‰ ์‹œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.) 

 

์•„ํŒŒ์น˜ ์นดํ”„์นด๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์••์ถ•์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

// ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ
wget https://dlcdn.apache.org/kafka/3.5.1/kafka_2.13-3.5.1.tgz

// ์••์ถ• ํ’€๊ธฐ
tar -xvf kafka_2.13-3.5.1.tgz

 

์••์ถ•์„ ํ•ด์ œํ•œ ํด๋”๋ฅผ ์›ํ•˜๋Š” ๊ฒฝ๋กœ๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.

(์ €๋Š” /opt ํด๋”๋กœ ์ด๋™ํ•œ ํ›„ ํด๋”๋ช…์„ kafka ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.)

sudo mv kafka_2.13-3.5.1 /opt/

 

kafka_2.13-3.5.1 ํด๋” ์•ˆ์— ์žˆ๋Š” config ํด๋”๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์—ฌ๋Ÿฌ ํŒŒ์ผ๋“ค์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ ๋‹ค์‹œ kraft ๋ผ๋Š” ํด๋”๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด ํด๋” ์•ˆ์—๋Š” server.properties ๋ผ๋Š” ํŒŒ์ผ์ด ์žˆ๋Š”๋ฐ ํ•ด๋‹น ํŒŒ์ผ์— ํ•„์š”ํ•œ ์„œ๋ฒ„ ์ •๋ณด๋“ค์„ ์ž‘์„ฑํ•ด ์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

(์•„๋งˆ ์„œ๋ฒ„๋งˆ๋‹ค ๋ธŒ๋กœ์ปค / ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ์ด ๋‚˜๋‰œ๋‹ค๋ฉด ๊ฐ๊ฐ broker.properties, controller.properties ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค, ๋‹ค๋งŒ ์ €๋Š” ๊ฐ๊ฐ ์„œ๋ฒ„๊ฐ€ ๋ชจ๋‘ ๋ธŒ๋กœ์ปค-์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•  ์˜ˆ์ •์ด๋ผ server.properties ํŒŒ์ผ์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.)

server.properties ์—์„œ ์„ค์ •ํ•  ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณ  ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • node.id
  • controller.quorum.voters
  • listeners
  • advertised.listeners

server.properties ํŒŒ์ผ์„ ์—ด์–ด์ค๋‹ˆ๋‹ค.

vi server.properties
# ๊ฐ ์„œ๋ฒ„๋งˆ๋‹ค 1๋ถ€ํ„ฐ ์ˆซ์ž๋ฅผ ์ง€์ •. kafka01 > 1, kafka02 > 2, ...
node.id=1

# node.id@ํ˜ธ์ŠคํŠธ์ด๋ฆ„:9093 ํ˜•ํƒœ๋กœ ๋ชจ๋“  ์„œ๋ฒ„ ๋‚ด์šฉ์„ ๊ธฐ์ž…
controller.quorum.voters=1@kafka01:9093,2@kafka02:9093,3@kafka03:9093

# localhost > ๊ฐ ์„œ๋ฒ„์˜ ํ˜ธ์ŠคํŠธ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝ(kafka02 ์„œ๋ฒ„๋ผ๋ฉด kafka02๋กœ ์ˆ˜์ •)
listeners=PLAINTEXT://kafka01:9092,CONTROLLER://kafka01:9093

advertised.listeners=PLAINTEXT://kafka01:9092

 

kafka ํด๋” ์•ˆ์˜ bin ํด๋”๋กœ ์ด๋™ํ•˜๋ฉด ๋งŽ์€ ํŒŒ์ผ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋žœ๋ค uuid ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

./kafka-storage.sh random-uuid

์ €์˜ ๊ฒฝ์šฐ,  ์ด ๋žœ๋ค uuid ๊ฐ’์„ ์ƒ์„ฑํ•˜๊ณ  ๋“ฑ๋กํ•˜๋Š” ๊ณผ์ •์—์„œ ๋งŽ์ด ํ—ท๊ฐˆ๋ ธ๋Š”๋ฐ์š”.

 

๊ฐ๊ฐ ์ธ์Šคํ„ด์Šค ์„œ๋ฒ„์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ๋ชจ๋‘ ๋™์ผํ•œ ๋žœ๋ค uuid ๊ฐ’์„ ๋“ฑ๋กํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

(์ €๋Š” ๊ฐ๊ฐ ์„œ๋ฒ„๋งˆ๋‹ค ๋žœ๋ค uuid๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋“ฑ๋กํ–ˆ๋Š”๋ฐ, ์ด๋Ÿฌ๋‹ˆ ํด๋Ÿฌ์Šคํ„ฐ ์—ฐ๊ฒฐ์ด ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.)

./kafka-storage.sh format -t ๋žœ๋ค_uuid -c /opt/kafka_2.13-3.5.1/config/kraft/server.properties

 

4. ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ์ˆ˜์ •

์ดํ›„ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์—์„œ ๊ฐ๊ฐ 9092, 9093 ํฌํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ค๋‹ˆ๋‹ค.

 

5. ์‹คํ–‰

๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ์นดํ”„์นด๋ฅผ ์‹คํ–‰/์ข…๋ฃŒ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

## ์‹œ์ž‘
/opt/kafka_2.13-3.5.1/bin/kafka-server-start.sh -daemon ./config/kraft/server.properties

## ์ข…๋ฃŒ
/opt/kafka_2.13-3.5.1/bin/kafka-server-stop.sh -daemon ./config/kraft/server.properties