본문 바로가기

공부/Apache Kafka

[Apache Kafka] Kafka 설치하기 - KRaft Cluster (No Zookeeper)

728x90
반응형

KRaft 기본 설명

KRaft 는 Apache Kafka Raft의 줄임말입니다.

기존 Apache Kafka는 메타데이터 관리를 위해 Zookeeper에 의존해 왔지만,

KRaft는 Zookeeper 없이 독립적으로 클러스터 메타데이터를 관리할 수 있게 해줍니다.

 

Zookeeper mode 에서 1개였던 controller가 KRaft mode 에서는 3개로 늘어나고, 
이들 중 하나의 controller가 active controller이면서 leader 역할을 담당합니다.
leader 역할을 하는 controller가 write 하는 역할도 하게 됩니다.


KRaft 를 사용했을때의 장점?

✔ Zookeeper 제거 → Kafka 운영이 더 간단해짐
✔ 메타데이터 관리 성능 향상 → 트랜잭션 속도 개선
✔ 리더 선출 및 장애 복구 속도 향상 → 높은 가용성 확보
✔ 클러스터 확장성 증가 → 대규모 Kafka 환경에 적합
✔ 운영 및 유지보수 비용 절감


KRaft 적용 버전

Kafka 2.8 버전부터 KRaft를 테스트모드로 사용할 수 있으며, 
Kafka 3.3부터 정식으로 사용가능합니다.
Kafka 4.0 부터는 zookeeper 기능을 제거하여 KRaft만 지원 예정되어있습니다.

 


 

KRaft 설치 & 실행

 

Apache Kafak 공식 홈페이지에서 다운로드 받습니다.

https://kafka.apache.org/downloads

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

 

현재 최신 버전인 kafka_2.13-3.9.0.tgz 를 다운받아 설치하겠습니다.

 

설치 환경은 windows에 가상OS ubuntu를 설치하여 docker 환경에서 진행하였습니다.

https://bab-dev-study.tistory.com/20

 

[Windows10] 윈도우10에서 ubuntu 설치 ( WSL )

Windows 10에서 개발을 할때 우분투 환경이 필요할때가 있습니다. 가상OS를 사용하지 않고 우분투를 설치해보겠습니다. ○ Windows 설정 windows 설정에서 검색창에 "Windwos 기능 켜기/끄기" 를 입력합니

bab-dev-study.tistory.com

 

압축을 풀고 해당 폴더명을 변경하였습니다.

tar -xvf kafka_2.12-2.7.0.tgz

mv kafka_2.13-3.9.0 kraft_2.13-3.9.0

 

 

안정성 및 가용성을 위해 최소 3개의 broker 및 controller Node를 실행합니다.

(다중 서버를 구성할 환경이 없어서 로컬에 3개의 node 를 실행합니다)

 

kafka 설정 전에 data 폴더를 만듭니다.

# node1
mkdir /data/kraft/data1

# node2
mkdir /data/kraft/data2

# node3
mkdir /data/kraft/data3

 

 

Kraft server 설정 ( controller + broker 노드 3개의 구성 )

 

각 노드의 설정파일 생성

cp config/kraft/server.properties config/kraft-server1.properties
cp config/kraft/server.properties config/kraft-server2.properties
cp config/kraft/server.properties config/kraft-server3.properties

 

 - config/kraft-server1.properties

process.roles=controller,broker
node.id=1

# Raft Quorum 설정 (3개 노드의 정보)
controller.quorum.voters=1@localhost:9093,2@localhost:9095,3@localhost:9097

# 리스너 설정
listeners=PLAINTEXT://localhost:9092,CONTROLLER://localhost:9093
controller.listener.names=CONTROLLER

advertised.listeners=PLAINTEXT://localhost:9092,CONTROLLER://localhost:9093

# 데이터 저장 경로
log.dirs=/data/kraft/data1

 

 - config/kraft-server2.properties

process.roles=controller,broker
node.id=2

# Raft Quorum 설정 (3개 노드의 정보)
controller.quorum.voters=1@localhost:9093,2@localhost:9095,3@localhost:9097

# 리스너 설정
listeners=PLAINTEXT://localhost:9094,CONTROLLER://localhost:9095
controller.listener.names=CONTROLLER

advertised.listeners=PLAINTEXT://localhost:9094,CONTROLLER://localhost:9095

# 데이터 저장 경로
log.dirs=/data/kraft/data2

 

 - config/kraft-server3.properties

process.roles=controller,broker
node.id=3

# Raft Quorum 설정 (3개 노드의 정보)
controller.quorum.voters=1@localhost:9093,2@localhost:9095,3@localhost:9097

# 리스너 설정
listeners=PLAINTEXT://localhost:9096,CONTROLLER://localhost:9097
controller.listener.names=CONTROLLER

advertised.listeners=PLAINTEXT://localhost:9096,CONTROLLER://localhost:9097

# 데이터 저장 경로
log.dirs=/data/kraft/data3

 

Kraft 를 사용하기 위해서는 UUID를 생성해야한다.

# 실행
bin/kafka-storage.sh random-uuid

# 출력결과
yhU8IJYMRJ61Skr9ILrrRw

 

각 노드 초기화 ( 생성한 UUID 를 각 노드에 동일하게 입력한다)

# node1  
bin/kafka-storage.sh format -t yhU8IJYMRJ61Skr9ILrrRw -c config/kraft-server1.properties

# node2
bin/kafka-storage.sh format -t yhU8IJYMRJ61Skr9ILrrRw -c config/kraft-server2.properties

# node3
bin/kafka-storage.sh format -t yhU8IJYMRJ61Skr9ILrrRw -c config/kraft-server3.properties

 

각 노드 실행 ( 백그라운드로 실행하기 위해 nohup 사용)

# node1  
nohup bin/kafka-server-start.sh -daemon config/kraft-server1.properties &

# node2
nohup bin/kafka-server-start.sh -daemon config/kraft-server2.properties &

# node3
nohup bin/kafka-server-start.sh -daemon config/kraft-server3.properties &

 

 


KRaft 클러스터 상태 확인

# 브로커 목록 확인
bin/kafka-broker-api-versions.sh --bootstrap-server localhost:9092

# topic 확인
bin/kafka-topics.sh --list --bootstrap-server localhost:9092

 

정상적으로 출력되는지 확인

 

 

728x90
반응형

'공부 > Apache Kafka' 카테고리의 다른 글