본문 바로가기

Programming/Apache Kafka

아파치 카프카 실습 (Apache Kafka) / EC2 서버 구축, 카프카, 주키퍼 설치하기

반응형

평소에 대용량 시스템이나 분산화 시스템 말만 많이 들어봤지,

현재 내가 속해있는 현업에서조차 경험하지 못해 고민하여 독학으로 진행하기로 했다.

평소에 아파치 카프카(Apache Kafka) 에 대하여 관심이 많았던 나여서

유튜브로 카프카에 대해 찾아보다가 데브원영님의 채널을 알게되고

그 이후로 채널 구독까지 하여 카프카에 대한 전반적인 영상을 보았다.

그러던 어느날 데브원영님께서 아파치 카프카 애플리케이션 프로그래밍 with 자바 라는 교재를 출판하셨고,

이소식을 들은 나는 '아! 이제 나도 진짜 공부를 시작해야겠다!' 라는 마음이 들어 책을 구입하였다.

카프카에 대한 전반적인 구조 및 예제 실습등을 포스팅 하며 복습할 예정이다.

 

아파치 카프카 애플리케이션 프로그래밍 with 자바

 

 

개념 설명에 관한 포스팅은 내가 정확히 이해를 했을 때 포스팅을 할 예정이고,

바로 설치부터 실습까지 기록하겠다.

 

 

실습용 카프카 브로커 설치

AWS를 통해 실습용 카프카 브로커를 설치하고 실행한다.

 

https://aws.amazon.com/ko/ec2/pricing/

 

Amazon EC2 - 크기 조정이 가능한 안전한 컴퓨팅 용량 - Amazon Web Services

초당 결제에서는 사용한 만큼만 비용을 지불합니다. EC2 초당 결제를 사용하면 사용하지 않은 시간에 대한 요금이 발생하지 않습니다. 개발 및 테스트, 데이터 처리, 분석, 배치 처리 및 게이밍

aws.amazon.com

 

EC2 프리티어는 한 계정당 1년 무료이며, 이 기간을 넘어갈 시 요금이 추가될 수 있으니 주의하자.

(이미 1~2년전에 서버 구축해놓고 깜빡해서 2만원이나 청구된적이있다...)

 

 

AWS 로그인 후 EC2 대시보드로 이동한 모습이다.

여기서 인스턴스 시작을 눌러주자.

EC2 대시보드

 

 

AMI를 선택해야 하는데 프리티어로 사용가능한 Amazon Linux 2 AMI (HVM) - SSD Volume Type을 선택하자

 

 

 

 

인스턴스 유형도 프리 티어 사용 가능한 인스턴스로 설정해주고 서버 접속을 위한 키 페어를 생성하자.

kafka-test-server-key 와 같은 이름으로 다운로드 받을 수 있다.

 

인스턴스가 생성되고 대시보드에서 생성된 인스턴스를 클릭하면 IPv4 퍼블릭 IP가 있는데 이 주소를 기억해야한다.

추후 인스턴스 접속 IP로 사용되며, 카프카 브로커가 설치된 이후 통신을 하기 위한 IP로 사용된다.

 

인바운드 규칙에서 기본 포트들을 정해줘야 하는데 카프카 브로커의 기본 포트는 9092, 주키퍼는 2181이다. 

 

 

인스턴스에 접속하기

필자는 맥OS를 사용하기 때문에 기본 터미널을 이용하겠다.

키페어 파일이 read 권한만 가지고 있어야 하므로 권한 변경 명령어인 chmod를 사용하여 400으로 설정한다.

ssh 명령어로 키 페어, 유저명, 인스턴스 IP를 입력 후 접속한다.

 

EC2 환경에 접속했다면 자바를 설치해준다.

자바 설치 가능 버전 확인 $sudo yum list | grep jdk

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

 

 

 

주키퍼 / 카프카 브로커 실행

 

카프카 브로커를 실행하기 위해서 카프카 바이너리 패키지를 다운로드한다.

해당 패키지는 카프카 공홈에서 다운가능하다.

여기서는 스칼라 2.12로 컴파일된 패키지를 다운로드 한다.

 

https://kafka.apache.org/downloads

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

 

EC2 인스턴스에서 wget 명령어로 다운로드 가능하다.

wget https://archive.apache.org/dist/kafka/2.5.0/kafka_2.12-2.5.0.tgz

 

 

카프카 브로커 힙 메모리 설정

카프카 브로커를 실행하기 위해서는 힙 메모리 설정이 필요하다. 

카프카 브로커는 레코드의 내용은 페이지 캐시로 시스템 메모리를 사용하고 나머지 객체들은 힙 메모리에 저장하여 사용한다.

일반적으로 5GB이상으로 설정하지 않는다.

실습용으로 생성한 인스턴스는 1G 메모리를 가지고 있으므로, 1G인 카프카 브로커와 512MB의 주키퍼를 동시에 실행하면 에러가 출력된다. 이를 해결하귀 위해 export 명령으로 힙 메모리 사이즈를 변경해주자.

 

 

 

환경변수는 터미널 세션이 종료되고 나면 다시 초기화되어 재사용이 불가하니 ~./bashrc 파일에 환경변수 선언문을 넣으면된다.

vi 로 오픈한 파일은 esc를 누르고 :wq를 입력하면 저장이 된다.

 

 

카프카 브로커 실행 시 메모리를 설정하는 부분은 kafka-server-start.sh 스크립트 내부에서 확인할 수 있다.

 

 

 

카프카 브로커 실행 옵션 설정

config 폴더에 있는 server.properties 파일에는 카프카 브로커가 클러스터 운영에 필요한 옵션들을 지정할 수 있다.

실습용 브로커를 실행할 것이므로 advertised.listener만 설정하면 된다.

adverised.listener는 카프카 클라이언트 또는 커맨드 라인 툴을 브로커와 연결할 때 사용된다.

 

 

IP, port, 프로토콜 설정을 하고

카프카 클라이언트, 커맨드 라인 툴에서 접속할 때 사용하는 IP와 port 정보는

인스턴스 생성할 때 발급받은 퍼블릭 IPv4 값을 IP에 넣고 port에는 카프카 기본 포트인 9092를 넣고 설정하면 된다.

주키퍼 실습을 위해 localhost:2181로 설정한다.

 

주키퍼 실행

앞서 다운받은 카프카 바이너리 패키지에는 브로커와 같이 실행할 주키퍼도 포함되어 있다.

분산 코디네이션 서비스를 제공하는 주키퍼는 카프카의 클러스터 설정 리더 정보, 컨트롤러 정보를 담고 있어 카프카를 실행하는 데에 필요한 필수 애플리케이션이다. 

 

.

 

 

아프카 브로커 실행 및 로그 확인

-daemon 옵션과 함께 카프카 브로커를 백그라운드 모드로 실행할 수 있다. 

kafka-server-start.sh 명령어를 통해 브로커를 실행한 뒤 jps 명령어를 통해 주키퍼와 브로커 프로세스의 동작 여부를 알 수 있다.

그리고 tail 명령어를 통해 실시간으로 작동하고 있는지 확인할 수 있다.

 

 

로컬 컴퓨터에서 카프카와 통신 확인

 

AWS EC2 인스턴스에서 카프카 브로커를 실행했고 이제 로컬 컴퓨터에서 원격으로 카프카 브로커로 명령을 내려 정상적으로 통신하는지 확인한다. 

카프카 동작을 확인하는 가장 쉬운 방법은 브로커 정보를 요청하는 것이다.

 

로컬에서

$ curl https://archive.apache.org/dist/kafka/2.5.0/kafka_2.12-2.5.0.tgz --output kafka.tgz 

tar -xvf kafka.tgz

로 다운받은 후 tgz를 풀어주고 kafka 폴더로 이동후 --bootstrap-server에 인스턴스 IP와 9092 포트를 넣으면 원격으로 카프카의 버전과 broker.id, rack 정보 등 브로커의 옵션들을 확인할 수 있다.

 

 

테스트 편의를 위해 IP를 매번 입력하여 접속하기 번거로우니 hosts 설정을 통해 설정해준다.

$ vi /etc/hosts

퍼블릭 IPv4 IP my-kafka

 

이렇게 설정해주면 IP대신 my-kafka 를 사용하여 접속이 가능하다.

 

 

 

다음 포스팅에선 토픽 생성과 전송, 컨슈머와 관련된 내용으로 포스팅 하겠다.

반응형