Kafka, Zookeeper 설치 및 설정
1. 필수 요구사항 확인
1.1. Java 설치 확인
Kafka는 Java 기반으로 동작합니다. Java 8 이상이 필요하며, 설치 여부를 확인하세요.
java -version
- 설치되지 않은 경우, OpenJDK 또는 Oracle JDK를 설치합니다.
brew update
brew install openjdk@11
1.2. 디스크 공간 확인
Kafka는 로그 데이터를 저장하므로 충분한 디스크 공간이 필요합니다. 기본적으로 /tmp/kafka-logs
에 저장됩니다.
2. ZooKeeper 설치 및 실행
2.1. ZooKeeper 설치
ZooKeeper는 Kafka가 의존하는 분산 코디네이션 도구입니다. 아래 명령어로 설치합니다.
brew install zookeeper
2.2. ZooKeeper 실행
ZooKeeper를 시작하려면 다음 명령어를 사용합니다.
brew services start zookeeper
2.3. ZooKeeper 실행 상태 확인
ZooKeeper 실행 상태를 확인하려면 아래 명령어를 사용하세요.
brew services list
2.4. ZooKeeper 설정 파일 주요 항목
ZooKeeper 설정 파일은 일반적으로 /etc/zookeeper/conf/zoo.cfg
에 위치합니다. 아래는 주요 설정 항목입니다
dataDir=/var/lib/zookeeper
clientPort=2181
maxClientCnxns=60
initLimit=10
syncLimit=5
server.1=localhost:2888:3888
-
dataDir
:- ZooKeeper 데이터(스냅샷과 트랜잭션 로그)가 저장되는 디렉터리입니다
- ZooKeeper가 실행 중인 서버의 디스크 경로를 지정합니다
- 예:
/usr/local/var/run/zookeeper
-
clientPort
:- 클라이언트가 ZooKeeper에 연결하기 위한 네트워크 포트 번호입니다
- 기본값은
2181
이며, 클라이언트가 ZooKeeper에 요청을 보내는 진입점 역할을 합니다
-
maxClientCnxns
:- ZooKeeper에 연결할 수 있는 클라이언트의 최대 연결 수를 제한합니다
- 하나의 클라이언트(또는 IP 주소)에서 과도한 연결을 방지하는 역할을 합니다
-
initLimit
:- ZooKeeper 클러스터에서 팔로워(follower)가 리더(leader)와 초기 데이터 동기화를 완료하는 데 필요한 시간을 설정합니다
- 이 시간이 초과되면 동기화가 실패로 간주됩니다
-
syncLimit
:- ZooKeeper 팔로워가 리더와 데이터 동기화를 유지할 수 있는 시간(틱 수)을 설정합니다
- 리더와의 동기화가 이 시간보다 오래 중단되면 팔로워가 재시작됩니다
-
server.x
:- ZooKeeper 서버가 클러스터 모드로 동작할 때, 각 서버의 정보를 설정합니다
- 형식:
server.<ID>=<호스트>:<follower-to-leader>:<leader-to-follower>
<ID>
: ZooKeeper 서버 ID<호스트>
: ZooKeeper 서버의 호스트 이름 또는 IP<follower-to-leader>
: 팔로워가 리더에게 요청을 보낼 때 사용하는 포트<leader-to-follower>
: 리더가 팔로워와 연결할 때 사용하는 포트
3. Kafka 다운로드 및 설치
3.1. Kafka 다운로드
brew install kafka
3.2. Kafka 실행
Kafka 브로커를 실행하려면 ZooKeeper가 실행 중인지 확인한 후 아래 명령어를 실행
brew services start kafka
4. 환경변수 설정
4.1. 환경변수 설정
~/.bashrc
또는 ~/.zshrc
파일을 열고 아래 내용을 추가합니다.
export KAFKA_HOME=/usr/local/opt/kafka
export PATH=$PATH:$KAFKA_HOME/bin
4.2. 환경변수 적용
source ~/.bashrc
5. Kafka 설정 파일 예제
5.1. 설정 파일 위치
Kafka 설정 파일은 보통 /usr/local/etc/kafka/server.properties
에 위치합니다.
5.2. 주요 설정 항목
broker.id=0
log.dirs=/tmp/kafka-logs
zookeeper.connect=localhost:2181
num.partitions=1
default.replication.factor=1
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://localhost:9092
broker.id
: 브로커 ID를 설정합니다. 클러스터에서 고유해야 합니다log.dirs
: Kafka 로그 데이터가 저장될 디렉터리 경로zookeeper.connect
: ZooKeeper 주소 및 포트 정보num.partitions
: 새로 생성되는 토픽의 기본 파티션 수default.replication.factor
: 새로 생성되는 토픽의 기본 복제본 수advertised.listeners
:- 역할: Kafka 브로커가 클라이언트에게 자신을 알릴 때 사용하는 주소를 설정합니다. 클라이언트는 이 주소를 통해 브로커와 통신
- 값:
PLAINTEXT://localhost:9092
localhost
: 브로커가 클라이언트에게 공개하는 IP 주소입니다. 보통 외부 네트워크에서 접근 가능하도록 구성합니다.9092
: 클라이언트와 통신할 포트 번호입니다.PLAINTEXT
: 클라이언트가 이 브로커와 일반 텍스트 프로토콜로 통신함을 나타냅니다.
listners
:- 역할: Kafka 브로커가 요청을 수신할 때 사용할 네트워크 주소를 설정합니다.
- 값:
PLAINTEXT://0.0.0.0:9092
PLAINTEXT
: 이 브로커가 클라이언트와 통신할 때 암호화되지 않은 일반 텍스트 프로토콜을 사용함을 나타냅니다.0.0.0.0
: 브로커가 모든 네트워크 인터페이스에서 연결을 수락하도록 설정합니다. 즉, 외부에서 접근할 수 있도록 열려 있는 상태입니다.9092
: 브로커가 사용할 포트 번호입니다.