Linux 환경에서 Kafka 및 Zookeeper 의사 분산 클러스터 구축하기

Apache Kafka는 분산 코디네이션 서비스인 Zookeeper를 활용하여 프로듀서, 컨슈머, 브로커 간의 상태 정보를 관리합니다. Zookeeper를 통해 각 컴포넌트는 무상태(Stateless) 조건을 유지하면서도 구독 관계를 형성하고 부하 분산을 실현할 수 있습니다. 본 가이드에서는 단일 머신에서 여러 노드를 실행하는 의사 분산(Pseudo-distributed) 모드 구축 과정을 다룹니다.

1. 시스템 환경 준비

설치에 필요한 기본 구성 요소는 다음과 같습니다.

  • 운영체제: Linux (Ubuntu/CentOS 등)
  • Java: JDK 1.8 이상
  • Zookeeper: 3.4.10 버전
  • Kafka: 2.11 버전

JDK 환경 변수 설정

Linux 시스템에서 Java 실행 환경을 구축하기 위해 /etc/profile 파일 하단에 다음과 같은 경로 설정을 추가합니다.

export JAVA_HOME=/usr/local/lib/jdk1.8.0_11
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

수정된 내용을 반영하려면 source /etc/profile 명령어를 실행하고, java -version을 통해 정상 설치 여부를 확인합니다.

2. Zookeeper 의사 분산 클러스터 구성

단일 서버에서 3개의 Zookeeper 노드를 구동하기 위해 각각 독립된 작업 디렉터리를 생성합니다.

디렉터리 구조 생성

mkdir -p /opt/zookeeper-cluster/node1
mkdir -p /opt/zookeeper-cluster/node2
mkdir -p /opt/zookeeper-cluster/node3

각 노드 디렉터리 내부에 데이터와 로그를 저장할 data 및 dataLog 폴더를 추가로 생성합니다.

설정 파일(zoo.cfg) 수정

각 노드의 conf/zoo.cfg 파일을 다음과 같이 수정합니다. 클라이언트 접속 포트와 통신 포트가 겹치지 않도록 주의해야 합니다.

# node1의 zoo.cfg 예시
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper-cluster/node1/data
dataLogDir=/opt/zookeeper-cluster/node1/dataLog
clientPort=2181

server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

이후 각 노드의 data 디렉터리에 myid 파일을 생성하고 각 서버의 식별 번호(1, 2, 3)를 입력합니다.

echo "1" > /opt/zookeeper-cluster/node1/data/myid

실행 환경 최적화

만약 실행 시 JAVA_HOME 관련 오류가 발생한다면, bin/zkEnv.sh 파일 상단에 직접 JDK 경로를 명시하여 경로 인식 문제를 해결할 수 있습니다.

3. Kafka 의사 분산 클러스터 구성

Zookeeper가 준비되었다면 Kafka 브로커 3개를 설정합니다.

브로커 속성 파일 정의

config/server.properties 파일을 복사하여 server-1.properties, server-2.properties, server-3.properties를 만듭니다. 주요 수정 사항은 다음과 같습니다.

# server-1.properties 기준
broker.id=1
listeners=PLAINTEXT://:9092
log.dirs=/tmp/kafka-logs-1
zookeeper.connect=localhost:2181,localhost:2182,localhost:2183

두 번째와 세 번째 설정 파일에서는 broker.id를 각각 2, 3으로 변경하고, listeners의 포트를 9093, 9094로 차별화해야 충돌을 방지할 수 있습니다.

4. 서비스 구동 및 확인

먼저 Zookeeper 노드들을 순차적으로 실행합니다.

/opt/zookeeper-cluster/node1/bin/zkServer.sh start
/opt/zookeeper-cluster/node2/bin/zkServer.sh start
/opt/zookeeper-cluster/node3/bin/zkServer.sh start

Zookeeper가 정상 작동하면 Kafka 브로커를 백그라운드에서 실행합니다.

./bin/kafka-server-start.sh -daemon ./config/server-1.properties
./bin/kafka-server-start.sh -daemon ./config/server-2.properties
./bin/kafka-server-start.sh -daemon ./config/server-3.properties

로그 파일 하단에 started (kafka.server.KafkaServer) 메시지가 출력되면 의사 분산 클러스터 구축이 완료된 것입니다. 이 방식은 개발 환경에서 실제 운영 환경과 유사한 분산 테스트를 진행할 때 매우 효율적입니다.

태그: Apache Kafka ZooKeeper Distributed Systems linux Broker Configuration

9월 25일 10:09에 게시됨