kafka Cluster 설치

Written on 2023-01-12

환경

kafka version : kafka_2.13-3.4.0
jdk : openjdk-11.0.18
os : centos7

설치정보
총 5대의 cluster로 구성된 kafka cluster를 구성했다.
기본적으로 kafka 설정시 1개의 서버에서 설치 및 setting을 완료하고, 전체서버로 배포한 다음 필요한 설정만 각 서버에서 변경한다.
각 서버별 구성은 다음과 같다.

서버 구성
kafka1 kafka, zookeeper
kafka2 kafka, zookeeper
kafka3 kafka, zookeeper
kafka4 kafka, zookeeper
kafka5 kafka, zookeeper

사전준비

  • jdk가 설치되어 있어야한다.
  • kafka download
    kafka archive download 에서 kafka를 download 한다.

  • /etc/hosts 파일수정
    각 서버별로 /etc/hosts 파일에 hostname을 등록한다.
# vi /etc/hosts
192.168.31.2 kafka1  
192.168.31.3 kafka2
192.168.31.4 kafka3
192.168.31.5 kafka4
192.168.31.6 kafka5

설치

  • zookeeper.properties 수정
    kafka에 내장되어 있는 zookeeper 설정파일을 수정한다.
# vi $KAFKA_HOME/config/zookeeper.properties

#zookeeper data directory로 사용할 위치로 설정한다.
dataDir=/home/kafka/data/kafka/zookeeper

# 클라이언트 연결을 수신할 포트
clientPort=2181 

# 하나의 클라이언트에서 동시접속하는 개수 제한. 0은 무제한
maxClientCnxns=0

# tick 단위 시간을 설정, milliseconds 단위
tickTime=2000

# 처음 주키퍼의 follower가 leader와의 연결 시도 시, tick 제한 횟수. tick 제한 횟수가 넘으면 timeout
initLimit=10

# follower가 leader와 연결된 후,leader와 동기화되기 위한 tick 제한 횟수
syncLimit=5

# zookeeper cluster server리스트를 작성한다.
server.1=kafka1:2888:3888
server.2=kafka2:2888:3888
server.3=kafka3:2888:3888
server.4=kafka4:2888:3888
server.5=kafka5:2888:3888
  • server.properties 수정
    kafka server 설정파일을 수정한다.
# vi $KAFKA_HOME/config/server.properties

# 브로커ID
broker.id=1

# kafka topic log가 저장될 directory를 지정한다.
log.dirs=/home/kafka/data/kafka/kafka-logs

# zookeeper 서버 리스트를 적는다.
# kafka가 cluster 로 동작하기 위해서는 zookeeper 필수로 필요하다.
zookeeper.connect=kafka1:2181,kafka2:2181,kafka3:2181,kafka4:2181,kafka5:2181
  • kafka1 서버에서 작성한 설정파일 및 kafka package 압축 및 배포
[kafka1@localhost]$ tar -cvf ./kafka.tar ./kafka

# 전체 서버로 배포
[kafka1@localhost]$ scp -r ./kafka.tar kafka@kafka1:/home/kafka;
...
[kafka1@localhost]$ scp -r ./kafka.tar kafka@kafka5:/home/kafka;
  • 각 서버에서 패키지 압축 해제
[kafka1@localhost]$ tar -xvf ./kafka.tar;
...
[kafka5@localhost]$ tar -xvf ./kafka.tar;
  • 각 서버에 myid 파일 작성 zookeeper.properties 에서 dataDir로 설정한 디렉토리 위치에 myid 파일을 생성하고,
    server list에서 server.숫자 와 동일하게 각각 myid 파일을 작성한다.
[kafka1@localhost]$ echo 1 > /home/kafka/data/kafka/zookeeper/myid;
...
[kafka5@localhost]$ echo 5 > /home/kafka/data/kafka/zookeeper/myid;
  • 각 서버의 broker.id 변경
# vi $KAFKA_HOME/config/server.properties

# 모든 서버의 broker.id를 각 서버별로 myid파일과 동일한 숫자로 변경한다.
broker.id=1
...
broker.id=5

테스트

  • zookeeper 기동
# kafka1 ~ 5 서버의 zookeeper를 기동한다.
# kafka cluster 일 경우, kafka 기동 전 zookeeper 가 먼저 기동되어 있어야 한다.
[kafka1@localhost]$ zookeeper-server-start.sh  -daemon $KAFKA_HOME/config/zookeeper.properties
...
[kafka5@localhost]$ $KAFKA_HOME/bin/zookeeper-server-start.sh  -daemon $KAFKA_HOME/config/zookeeper.properties
  • kafka 기동
[kafka1@localhost]$ $KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
...
[kafka5@localhost]$ $KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
  • Topic 생성
$ $KAFKA_HOME/bin/kafka-topics.sh --create --bootstrap-server kafka1:2181 kafka2:2181 kafka3:2181 kafka4:2181 kafka5:2181  --replication-factor 3 --partitions 50 --topic test;
  • Topic 리스트 확인
 $ $KAFKA_HOME/bin/kafka-topics.sh --list --bootstrap-server kafka1:2181 kafka2:2181 kafka3:2181 kafka4:2181 kafka5:2181;
  • producer 실행
 $ $KAFKA_HOME/bin/kafka-console-producer.sh --broker-list kafka1:9092 kafka2:9092 kafka3:9092 kafka4:9092 kafka5:9092 --topic test;
  • consumer 실행
$  $KAFKA_HOME/bin/kafka-console-consumer.sh --from-beginning --bootstrap-server kafka1:9092 kafka2:9092 kafka3:9092 kafka4:9092 kafka5:9092 --topic test;
  • kafka 종료
[kafka1@localhost]$ $KAFKA_HOME/bin/kafka-server-stop.sh;
...
[kafka5@localhost]$ $KAFKA_HOME/bin/kafka-server-stop.sh;
  • zookeeper 종료
[kafka1@localhost]$ $KAFKA_HOME/bin/zookeeper-server-stop.sh;
...
[kafka5@localhost]$ $KAFKA_HOME/bin/zookeeper-server-stop.sh;

Experience


카프카(Kafka)를 설치(Install)해보자
zookeeper getting started guide
kafka documentation