네트워크 공부 & 실습/네트워크 실습

[Network] Kafka 클러스터를 두 대의 PC에 나눠 설치해보기

강_토발즈 2025. 6. 27. 23:31

 

 

 

kafka 에 대한 개념은 이전에 한 번 포스팅 한 적이 있다. 설치를 하면서 하나의 인프라에 클러스터를 구성하는 방법으로 설치를 (간단하게) 진행 해봤는데, 조금 더 효율적인 인프라 구축을 위해 클러스터를 분리하여 설치하는 방법도 알아보도록 하자.

 

1. Kafka 클러스터란 무엇인가?

Kafka를 복습해 보자면, 대용량 데이터를 빠르게 처리할 수 있도록 설계된 분산 메시징 시스템이다. 이 카프카에 있는  "클러스터"라는 것은 여러 개의 Kafka 서버(브로커)가 하나의 팀처럼 협력하여 동작하는 구조를 말한다.

 

- 클러스터의 기본 구성

  • Broker: Kafka 서버, 메시지를 저장하고 전달하는 역할을 한다.
  • Topic: 데이터를 분류하기 위한 논리적인 단위이다.
  • Partition: Topic을 나눈 물리적인 단위로, 병렬 처리를 가능하게 해준다.
  • Leader & Follower: Partition을 복제하고 관리하기 위한 역할 구분이다.

즉, 클러스터를 구성하면 여러 서버가 하나의 Kafka처럼 동작하면서, 장애에 강하고, 부하 분산이 잘 되는 시스템을 만들 수 있다.

 

2. Zookeeper 모드와 KRaft 모드의 차이점은 무엇일까?

 

Kafka는 Zookeeper라는 외부 시스템에 의존하여 클러스터의 메타데이터를 관리해왔다.
하지만 Kafka 2.8 이후부터는 KRaft 모드가 도입되었고, Zookeeper 없이 Kafka 자체만으로 클러스터를 운영할 수 있게 되었다.

간단히 이해하기 위해 비유적인 표현을 사용하자면,  Zookeeper 모드 -> 회사 관리만 전문으로 하는 외부 관리자, KRaft 모드는 직원들끼리 모여 스스로 리더를 뽑고 관리를 맡기는 모드이다.


구분 Zookeeper 모드 KRaft 모드
메타데이터 저장소 Zookeeper 사용 Kafka 내부 저장
리더 선출 방식 Zookeeper가 결정 Kafka 내부에서 Raft 알고리즘 사용
운영 복잡도 Kafka + Zookeeper 둘 다 관리해야 함 Kafka만 관리하면 됨
고가용성 고려 요소 Zookeeper 장애도 고려해야 함 Kafka 자체로 가능
최신 Kafka 기준 아직 지원되지만 구식 Kafka 3.x 이상에서 적극 권장됨
KRaft는 Kafka + Raft의 합성어로, 분산 합의 알고리즘인 Raft를 Kafka에 통합한 구조라고 보면 된다.
 
 
 
 

 

3. 클러스터를 두 대의 PC로 분리해서 구성하면 좋은 점은?

 

이번 구성에서는 Kafka 클러스터를 두 대의 (가상)컴퓨터에 나눠서 설치해보았다. 이렇게 구성하면 단순히 설치하고 실행만 해보는 것보다 훨씬 많은 것을 배울 수 있다.

  • 실제 장애 상황을 테스트할 수 있다
    → 한 PC를 끄더라도 다른 노드가 계속 동작하는 모습을 볼 수 있다.
  • 실제 네트워크 환경을 구성해볼 수 있다
    → 포트 충돌, IP 통신, 방화벽 등 실전에서 겪을 문제들을 연습할 수 있다.
  • 리더 선출과 데이터 복제 구조를 직접 체험할 수 있다
    → 단일 머신에서는 알기 힘든 Kafka의 동작 원리를 이해하게 된다.
  • 확장성과 분산 시스템 구조를 체득할 수 있다
    → 노드 수가 늘어날수록 Kafka가 데이터를 어떻게 분산 처리하는지 직접 볼 수 있다.

 

4. 설치 구조와 설정 방법 정리

 

4-1. 전체 구성도

노드 설치PC - ip 노드 id 역할 Controller port Broker 포트
server-1 192.168.0.98 1 broker + controller 9093 9096
server-2 192.168.0.98 2 broker + controller 9094 9097
server-3 192.168.0.99 3 broker + controller 9095 9098
 
  • 클러스터 UUID는 한 번만 생성해서 세 노드가 함께 공유해야 한다. 
  • 각 노드는 controller.quorum.voters에 모든 노드의 IP와 포트를 포함해야 한다.
  • listeners, log.dirs 등도 각 노드에 맞게 다르게 설정해야 한다.

4-2. server-1.properties 예시

process.roles=broker,controller 
node.id=1 
controller.quorum.voters=1@localhost:9093,2@localhost:9094,3@192.168.0.99:9095 
listeners=PLAINTEXT://localhost:9096,CONTROLLER://localhost:9093 
inter.broker.listener.name=PLAINTEXT 
listener.security.protocol.map=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT 
controller.listener.names=CONTROLLER 
log.dirs=/product/software/kafka/logs/kraft-combined-logs-1

 

  • ip 입력 시 햇갈리지 않기 위해 localhost 를 이용하였고, 직접 ip 가 입력된 노드와 포트는 다른 클러스터의 노드임을 주의해서 입력해야 한다.
  • 2번째 클러스터(server-2.properties) 역시 server-1 과 같은 (가상)PC 에 설치 할 예정이기 때문에 node.id 만 2 로 변경해주면 된다.

4-3 server-3.properties 예시

process.roles=broker,controller 
node.id=3
controller.quorum.voters=1@192.168.0.98:9093,2@192.168.0.98:9094,3@localhost:9095 
listeners=PLAINTEXT://localhost:9096,CONTROLLER://localhost:9093 
inter.broker.listener.name=PLAINTEXT 
listener.security.protocol.map=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT 
controller.listener.names=CONTROLLER 
log.dirs=/product/software/kafka/logs/kraft-combined-logs-3
  • 노드 id 를 3으로 변경한다.
  • 해당 PC에서 사용하는 노드의 IP는 localhost 로 작성하고, 다른 노드의 IP 는 직접 입력해준다.

 

 

5. UUID 생성과 적용 과정

 

모든 클러스터는 하나의 UUID 로 적용해야 한다. 설치 진행시 하나의 PC에 UUID 를 생성하고 적용한 뒤. 이 UUID 를 알아내서 다음 PC에 설치 시 적용해주면 된다.

UUID 가 나와있는 위치는 $KAFKA_HOME//kafka/logs/kraft-combined-logs-1 경로에 위치한 meta.properties 파일에서 확인할 수 있다.

 

cluster.id 를 사용하면 된다.

 

# UUID는 최초 1회만 생성
uuid=$KAFKA_HOME/bin/kafka-storage.sh random-uuid

# 생성된 UUID를 1번 PC에 적용
$KAFKA_HOME/bin/kafka-storage.sh format -t $uuid -c config/server-1.properties
$KAFKA_HOME/bin/kafka-storage.sh format -t $uuid -c config/server-2.properties

# 생성된 UUID를 2번 PC에 적용
$KAFKA_HOME/bin/kafka-storage.sh format -t $uuid -c config/server-3.properties
 

 

6. 실행 하기

#1번 PC에서 실행
$KAFKA_HOME/bin/kafka-server-start.sh -daemon config/server-1.properties
$KAFKA_HOME/bin/kafka-server-start.sh -daemon config/server-2.properties

#2번 PC에서 실행
$KAFKA_HOME/bin/kafka-server-start.sh -daemon config/server-3.properties
 

 

7. 마무리

단순히 레퍼런스대로 설치를 진행하고 실행하는 것을 넘어, 효율적인 사용을 위해 소프트웨어를 분리하여 설치하고, 제대로 동작할 수 있도록 설정을 구성해 본 것에 대해 큰 보람을 느꼇다. 그리고 설치 시 각 노드들의 IP 가 햇갈리지 않도록 주의해서 입력하도록 하자!