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
정상적으로 출력되는지 확인
'공부 > Apache Kafka' 카테고리의 다른 글
[Apache Kafka] 설치 & 실행 & 명령어 (0) | 2021.04.05 |
---|