본문 바로가기
🌿 Data with AI/Study

[kafka 기초] AWS에 카프카 클러스터(kafka,zookeeper) 구축하기

by 카프리썬_ 2021. 3. 26.
728x90

역시 나는 똒똑하지 않아서 그냥 글로만 보고서 이해할 수 없다. 직접 해봐야한다.

아래의 내용 및 이미지는 [데브원영] 아파치 카프카 for begineers 강의 요약 및 추가 공부한 내용입니다. 감사합니다.


Kafka 아키텍쳐

전체적인 kafka 아키텍쳐는 아래와 같다고 한다.

즉, 개념상 브로커 1대일 경우를 표현하는 일반적인 구조랄까 (테스트할때 그냥 개인컴퓨터 1대에서 설치하는 정도?)

그래도 대부분은 앞에서 용어로 들어본 것들이지만, '주키퍼'는 처음 보았다. (개인적으로 이름이 귀여웠다)

그림에서 보는 것 처럼 카프카와 주피커는 서로 별도의 어플리케이션이다. 별도이다. 

그래서 카프카 환경을 구축하기 위해서는 카프카도 설치하고, 주키퍼도 설치해야한다.

Zookeeper

ZooKeeper는 Kafka 브로커를 관리하고 조정하는데 사용하는 분산 코디네이터.

즉, 카프카는 분산어플리케이션이기 떄문에 이를 통제해주는 솔루션이 필요한데 이게 주키퍼

 

- Kafka Message Broker와 1:1로 구성된다.

- 즉 3 Node Message Broker를 구성할 경우 마찬가지로 3 Node Zookeeper를 구성한다.

- 주로 프로듀셔와 컨슈머에게
Kafka Message Broker의 신규 생성 여부 또는 Kafka Message Broker의 실패를 알리는데 사용된다

 

브로커의 존재 또는 실패와 관련하여 Zookeeper가 받은 알림에 따라

생산자와 소비자는 결정을 내리고 다른 브로커와 작업을 조정

 

Kafka 클러스터 구성

구조는 위에 보던 사진과 같지만, 실제 운영시에는 카프카는 3개 이상의 브로커로 이루어진 클러스터로 구성해야한다.

즉,카프카 브로커를 위해 3대의 서버가 필요하다 -> 그래서 aws ec2를 사용한다

 

그리고 강의 제공자의 블로그를 통해 카프카 클러스터 설치방법을 하나씩 해볼 수 있었다.

역시 IT는 직접 해봐야해...역시 하나씩 하니까 재밋다..


카프카 클러스터를 위해 아래와 같은 단계를 진행한다.

1. EC2 3대 생성 및 설정 (방화벽, hostname) <- 통신이 가능한 3개의 브로커가 필요하니까

2. 주키퍼 설치 및 설정 

3. 카프카 설치 및 설정 

4. 카프카실행 -> 이건 다음에..

-TEST_LOG 토픽설정

-console producer로 데이터 넣음

-console consumer로 데이터 확인

=> local 컴퓨터에서 카프카 클러스터로 연동하는 실습

 

1. EC2 3대 생성 

1-1. 구성 : 간단하게 하려고 기본VPC 및 기본서브넷에 생성함

1-2. 타입 :  프리티어니까 t2.micro

1-3. 방화벽 : zookeeper랑 카프카클러스터가 통신하기 위해서 inbound 규칙 추가

  (열어야하는 포트번호 : 2888, 3888, 2181, 9092)

1-4. 호스트명 : 각 서버마다 vi etc/hosts에서 Public ip 및 host명을 지정한다.

퍼블릭ip는 인스턴스를 껏다킬떄마다 바뀌니까, 자신은 0.0.0.0 으로하고,

나머지 서버들은 AWS의 Public ip로 지정한다.

대신 public ip는 서버를 끄고 킬떄마다 바뀐다. 그래서 매번 설정해줘야함..

3개 Node의 /etc/hosts는 똑같은 내용을 copy&paste해서 넣으면 안된다.
1번 Node에서는 0.0.0.0에 1번 Node의 이름을, 2번 Node에서는 0.0.0.0에 2번 Node의 이름을 넣어야한다.

 

 

2. 주키퍼 설치

2-1. 패키지 설치 및 압축풀기 : 3대의 인스턴스에 접속해서 주키퍼 패키지 install

 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

2-2. config 생성 : zookeeper내부폴더/conf폴더/zoo.cfg 파일생성 

2-3. myid 생성

각 zookeepr마다 myid라는 파일생성 (위치 : /var/lib/zookeeper/myid)

나는 루트경로에 zookeeper가 없어서 디렉토리도 생성하고, myid 파일도 생성함 

각 서버마다 식별자 생성함

(test-broker2서버는 2, test-broker3서버는 3 출력하도록 3대의 서버에 모두작업)

2-4. zookeeper실행 : zookeeper내부폴더/bin/zkServer.sh start 

실행명령어 : ./bin/zkServer.sh start 
상태확인 :  ./bin/zkServer.sh status

세대의 서버(ec2)에서 모두 실행한다. 

나는 broker3 서버가 리더다.


 

 

 

Zookeeper: FAILED TO WRITE PID

So I'm trying to to get started with Accumulo. I installed Hadoop and it runs w/o problems but when I try to start Zookeeper I get: JMX enabled by default Using config: /opt/zookeeper/bin/../conf...

stackoverflow.com


3. 카프카 설치

3-1.패키지 설치 및 압축풀기 : 3대의 인스턴스에 접속해서 카프카 패키지 install

[root@ip-172-31-15-248 ec2-user] wget https://archive.apache.org/dist/kafka/2.1.0/kafka_2.11-2.1.0.tgz
[root@ip-172-31-15-248 ec2-user] tar xvf kafka_2.11-2.1.0.tgz

./3-2.config 수정 : kafka내부폴더/config/server.properties

Kafka config 내부폴더

+주의!! 내가 계속 해멨던 부분이다. 처음엔 사이사이에 있는 코드들의 주석을 풀으라는 뜻으로 이해했다.

그래서 한 몇일간 헤매고, 카프카에 너무 화가 많이 난 상태...그런데 알고보니 한번에 쓰는 것이였다.!!!진짜 어이없음

server03일 경우, server basics로 시작하는 주석부분에 저렇게 써주면 된다.
server02일 경우
server01일 경우도 마찬가지다. 한번에 다 써주는 것이다

3-3. kafka 실행 

실행명령어 : ./bin/kafka-server-start.sh ./config/server.properties

[root@ip-172-31-15-248 kafka_2.11-2.1.0]# ./bin/kafka-server-start.sh ./config/server.properties

 

이렇게 최종적으로 3개의 클러스터 구성이 완료되었따!!


오류모음

대체적으로 나올만한 카프카 설치시 오류모음집 관련자료 

 

(참고) 주키퍼 실행이슈 -> 원인 : /var/lib/zookeeper 권한없음

-> 권한추가(sudo chmod o+w /var/lib/zookeeper)로 해결

 

 

(참고) 카프카 실행 이슈 -> 원인 : java 미설치 ->자바설치

자바확인해보니 미설치상태

해결 : 자바설치

sudo yum install -y java-1.8.0-openjdk-devel.x86_64

자바설치 확인

(참고) 자바 설치 후 실행이슈 -> 원인 : JVM 메모리부족 

해결 : kafka-server-startup.sh 파일에서 힙메모리 사이즈 조절

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" --> export KAFKA_HEAP_OPTS="-Xmx256M -Xms128M"


 

다음엔 카프카에 데이터request를 보낼 클라이언트(컨슈머, 프로듀셔)를 만들보자.

그럼 프로듀셔 -> 카프카클러스터 ->컨슈머 이렇게 되서

프로듀셔가 보낸 데이터를 컨슈머가 가지고 오는지 확인하면 될듯 

 

 

카프카는 3개의 클러스터로 이루어져 있어서 고가용성 만족 -> 테스트할방법업나

반응형