AWS에 Kafka 클러스터 설치

김민형·2022년 9월 5일
0

빅데이터

목록 보기
10/13

kafka 클러스터를 만들기 위해 Amazon Linux 인스턴스 3대를 생성해준다.

kafka를 설치하는 아주 좋은 블로그 글들이 많지만 무지한 상태에서 무작정 설치해본 과정을 담았고 사소한 트러블 슈팅 과정도 모두 포함되어있다.

테스트의 편의를 위해 이번에 만든 3개의 인스턴스의 이름은 kafka1,2,3으로 지정하여 진행했다.
이를 위해 각 host별로 /etc/hosts를 설정해줘야 하는데, 자기자신의 host는 0.0.0.0으로 설정하고 나머지 host는 ip로 할당되록 설정해줄 것이다.
/etc/hosts

Zookeeper 설치

kafka 클러스터를 설치하기 위해선 kafka 관련 정보를 저장하는 역할을 하는 주키퍼도 설치해줘야 한다.

zookeeper는 2181 2888 3888포트를 사용하므로 보안그룹에서 해당 포트를 열어줘야하고 kafka 클러스터 내부의 통신을 위해 9092 포트도 열어줘야 한다.

zookeeper 설치

wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz

tar xvf zookeeper-3.4.12.tar.gz

이제 zookeeper의 configuration을 설정해야 한다.
zookeeper 폴더 내부의 conf폴더에 zoo.cfg파일을 생성하여 아래와 같이 configuration을 넣어준다.
zoo.cfg

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=20
syncLimit=5
server.1=kafka1:2888:3888
server.2=kafka2:2888:3888
server.3=kafka3:2888:3888

zookeeper마다 앙상블을 만들기 위해 각 zookeeper마다 /var/lib에 zookeeper 폴더를 만들고 myid라는 파일을 생성해준다.
kafka1에는 1, 2에는 2, 3에는 3을 넣어준다.

압축 해제한 zookeeper 폴더로 가서 zookeeper 실행

./bin/zkServer.sh start

하지만 에러가 뜰 것이다. -> JAVA 필요

JAVA는 뒤에 나올 kafka를 설치하고 실행할 때에도 필요하다.

자바 설치

wget https://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.tar.gz

jdk를 받은 후 압축을 해제한다.
본래 알던 방식대로 /etc/profile에 JAVA_HOME 변수를 등록해줬는데 인식을 하지 못했었다.

zookeeper JAVA_HOME ERROR 트러블 슈팅 참고

이유는 zookeeper 내부의 bin/zKEnv.sh 설정파일에서 선언을 따로 해줘야 했었다.

zkEnv.sh

다시 zookeeper 실행

성공

kafka 설치

wget으로 kafka 설치

wget https://archive.apache.org/dist/kafka/2.1.0/kafka_2.11-2.1.0.tgz

tar xvf kafka_2.11-2.1.0.tgz

kafka 실행을 위해서 broker.id 설정, zookeeper에 대한 설정과 listener설정을 아래와 같이 설정해준다.
파일은 kafka 폴더 내부에 config/server.properties

server.properties
kafka1의 경우 아래와 같이 설정

broker.id=0
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://kafka1:9092
zookeeper.connect=kafka1:2181,kafka2:2181,kafka3/test

2,3에도 broker.id와 advertised.listeners에 hosts 이름만 바꿔서 그대로 넣어준다.

하지만 이 설정만 한다고 해서 kafka가 실행되지 않는다.

이런 에러가 뜰 것이다.

kafka 메모리 ERROR 트러블 슈팅 참고

KAFKA_HEAP_OPTS 관련 설정을 zoopkeeper-server-start.sh와 kafka-run-class.sh, kafka-server-start.sh에서 해주고 JAVA_HOME관련 설정을 kafka-run-class.sh에서 해줘야 한다.

아래 코드를 위에 말한 스크립트들에 모두 추가해준다.

export KAFKA_HEAP_OPTS="Xmx256M -Xms128M"

JAVA_HOME 변수 설정도 kafka-run-class.sh에 추가해준다.

kafka 실행

./bin/kafka-server-start.sh ./config/server.properties

하지만 kafka, zookeeper 사이의 connection에서 또 에러가 날 것이다.

원인은 JDK 버전이었다.

(에러가 났을 때 로그를 보면 hosts에서 등록해준 kafka 노드들을 인식하지 못하는 것 같았다.)

kafka unresolved:2181 ERROR 트러블 슈팅 참고

이 링크에서 보면 zookeeper 3.4.x버전에선 JDK 14버전 이상일 시 에러가 난다고 유추할 수 있었다.

현재 내 JDK는 아래 링크를 통해 받아왔는데 이는 JDK 18버전이다.

wget https://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.tar.gz

zookeeper를 종료한 후 JAVA를 다시 깔고 JAVA 관련 설정을 다시 해준다.

아래 링크는 JDK 1.8버전

wget --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie" https://javadl.oracle.com/webapps/download/GetFile/1.8.0_281-b09/89d678f2be164786b292527658ca1605/linux-i586/jdk-8u281-linux-x64.tar.gz
  
tar xvzf jdk-8u281-linux-x64.tar.gz

zookeeper를 start하고 kafka 클러스터 실행

성공적으로 깔린 것을 확인할 수 있다.

profile
Solutions Architect (rlaalsgud97@gmail.com)

0개의 댓글