[데브원영] 아파치 카프카 for beginner - 실전편

의혁·2025년 2월 13일
0

[Kafka] 카프카 학습

목록 보기
5/6
post-thumbnail

💡 Kafka 적용을 위해서 Kafka 환경 세팅 및 실행해보려고 한다!

1. Local 환경에 homebrew로 설치 & Topic 생성

1) 설치 및 설정

// homebrew로 kafka 설치
brew install kafka

// zookeeper 실행
brew services start zookeeper

// kafka 실행
brew services start kafka
  • kafka는 kafka를 관리하는 zookeeper 기반이므로, zookeeper를 먼저 실행해야 kafka를 실행 할 수 있다.
  • 설치 및 실행을 진행한 후 info를 통해서 설치된 경로를 확인하고, 해당 경로의 bin파일로 들어가 Topic을 생성할 준비를 한다.

2) Topic 생성 및 데이터 삽입 후 조회

 // localhost:2021 주소로 replication이 1이고 partition이 1"Test"라는 이름의 토픽 생성
 
 // 위 방식은 Kafka 3.0 이후 부터 지원하지 않는다.
#  ./kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 -partitions 1 --topic test

  • 위와 동일한 방식으로 실행하였지만, 오류가 발생하였고 이 오류를 분석해본 결과, Kafka 3.0이후부터는 zooKeeper를 사용하지 않고, KRaft를 사용하기 때문에 위와 같은 오류가 발생하였다.
 // localhost:2021 주소로 replication이 1이고 partition이 1"Test"라는 이름의 토픽 생성
 
 // KRaft는 bootstrap-server를 사용한다.
./kafka-topics --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test

  • 위와 같이 명령어를 KRaft에 맞게 진행하였더니 Topic이 잘 생성되는 것을 알 수 있다.
// kafka 브로커 주소인 localhost:9092에 있는 Test라는 topic으로 Producer가 메시지를 생성
./kafka-console-producer --broker-list localhost:9092 --topic test
>hello
>kafka

// consumer로 브로커에 Test라는 Toic에 저장되어 있는 메시지를 처음부터 읽어오기
// --form-beginning: 처음부터 
./kafka-console-consumer --bootstrap-server localhost:9092 --topic test --from-beginning

  • 위와 같은 명령어를 통해서 Producer는 브로커의 Topic을 지정하여 메시지를 보내어 저장한, Consumer는 Topic에 저장되어 있는 메시지를 가져와서 출력한다.

2. AWS에 카프카 클러스터 설치 및 실행

일단 이부분은 AWS를 통해 EC2환경을 만들고, 로그인 하여 파일 설치를 통해서 진행하기 때문에 개인적으로 EC2환경을 만들어 로그인까지 진행된 상태이다.
기존에 공부할 때 만들어 뒀던 인스턴스, vpc, 인터넷 게이트웨이등 대부분의 것을 지워뒀기 때문에 하나하나씩 만들고 보안 그룹까지 만들어서 진행하여 로그인까지는 성공하였다. ( vpc -> 인터넷 게이트 웨이 -> 라우팅 테이블 -> 인스턴스 -> 그룹)

+) 카프카 브로커에 접속하기 위해서는 EC2 보안 그룹의 Inbound 설정에서 9092와 2181 포트를 열어야 한다.

1) 인스턴스 로그인 (SSH 환경이므로, Iterm에서 진행)

// Ec2환경에 로그인
ssh -i "{키페어 이름}.pem" ec2-user@{퍼블릭 IP}
  • 카프카 설치 및 실습 진행을 위해서 EC2 환경에 로그인한다.

2) 자바 설치

$ sudo yum install -y java-1.8.0-openjdk-devel.x86_64
  • 카프카 Broker는 스칼라 & 자바 기반이여서 JVM 환경 위에서 실행되므로 Jdk 설치가 필요하다.

3) 주키퍼 & 카프카 Broker 실행

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

// 압축 풀기
$ tar xvf kafka_2.12-2.5.0.tgz

// 전체 확인
$ ll

<결과>
합계 60164
drwxr-xr-x 6 ec2-user ec2-user       89  48  2020 kafka_2.12-2.5.0
-rw-rw-r-- 1 ec2-user ec2-user 61604633  76  2020 kafka_2.12-2.5.0.tgz
  • 카프카 Broker 실행을 위해 바이너리 패키지를 다운하여, 압축을 푼다. (wget사용)

4) 카프카 Broker 힙 메모리 설정

// Heap 메모리 변경
$ export KAFKA_HEAP_OPTS="-Xmx400m -Xms400m"

// 조회
$ echo $KAFKA_HEAP_OPTS
-Xmx400m -Xms400m
  • 카프카 Broker 실행을 위해서는 힙 메모리 설정이 필요하다.
  • Broker는 "Record"의 내용은 페이지 캐시로 시스템 메모리를 사용한다.
  • Broker는 Record를 제외한 나머지 객체들을 HEAP 메모리에 저장해서 사용한다.
    => 힙 Memory는 주로 5GB 이상으로 설정하지 X
  • 카프카 패키지의 HEAP 메모리는 Broker에 1GB, 주키퍼에 512MB가 설정되어있다.
    => 실습용 EC2는 t2.micro로 1G 메모리를 가지고 있음으로, 설정의 변경이 필요하다.
    ( 기본값은 1.5GB이기 때문에, allocate memory오류가 발생한다.)
// KAFKA_HEAP_OPTS 환경변수 설정
$ vi ~/.bashrc

  • 터미널 세션이 종료되면 자동으로 아까 설정한 KAFKA_HEAP_OPTS가 초기화 되기 때문에 설정파일로 추가하였다.

5) 카프카 Broker 실행 옵션 설정

cd kafka_2.12-2.5.0

// config의 server.properties파일 수정
vi config/server.properties

  • config 폴더에 포함된 server.properties 파일에서 카프카 Broker가 클러스터 운영에 필요한 옵션들을 지정할 수 있다.
  • 실습용 카프카 Broker 설정을 위해서 "advertiesd.listeners" 특성을 수정한다.
    ( 현재 접속 중인 인스턴스의 퍼블릭 IP 추가)
  • advertiesd.listeners : 카프카 클라이언트 or 커맨드 라인 툴을 브로커와 연결할 떄 사용

+) log.retention.hours: 카프카 Broker가 저장한 파일이 삭제되기까지 걸리는 시간
=> 상용 환경에서는 log.retention.ms으로 설정하는 것을 추천
=> -1로 설정하면 영원히 삭제되지 않는다.

6) 주키퍼 실행

// 주키퍼 실행 
$ bin/zookeeper-server-start.sh -daemon config/zookeeper.properties

// 주키퍼의 동작 프로세스 상태를 보기 위함
$ jps -vm

  • 주키퍼는 분산 코디네이션 서비스를 제공하며, 카프카의 클러스터, 리더, 컨트롤러 정보들을 포함하는 필수적인 애플리케이션이다.
  • 출력을 보아 주키퍼가 잘 실행됨을 볼수 있다.

7) 카프카 Broker 실행 & 로그 확인

// kafka server 실행 
$ bin/kafka-server-start.sh -daemon config/server.properties

// 카프카의 동작 프로세스 상태를 보기 위함
$ jps -m

<실행결과>
26568 Kafka config/server.properties
22127 QuorumPeerMain config/zookeeper.properties

// server log로 카프카 동작 성공 여부 찍어보기
$ tail -f logs/server.properties

  • "kafka-server-start.sh" 명렁어를 통해 카프카 Broker를 실행한 후, jps 와 Log를 찍어본 결과 정상적으로 동작하는 것을 확인 할 수 있다.

8) Local PC에서 카프카와 통신 확인

AWS EC2에서는 카프카 Broker 설치를 완료하였음으로, 로컬 터미널에서 "원격"으로 카프카 브로커로 명령을 내려 통신을 확인해보고자 한다.
로컬 터미널에 카프카 바이너리 패키지를 다운받아 진행해보았다.

// 로컬 터미널에서 카프카 바이너리 패키지 설치
$ curl https://archive.apache.org/dist/kafka/2.5.0/kafka_2.12-2.5.0.tgz 
--output kafka.tgz

// 압축풀기
$ tar -xvf kafka.tgz

  • 로컬 터미널에 카프카 바이너리 패키지를 설치하여 진행한다.
// 카프카 브로커 정보 확인
$ cd kafka_2.12-2.5.0
$ bin/kafka=broker-api-versions.sh --bootstrap-server {퍼블릭IP}:9092

  • local 환경에서 카프카 Broker 정보를 확인해본 결과 카프카의 Broker id, rack 정보등 카프카의 옵션들을 확인할 수 있다. ( 연동이 잘되었음을 확인하였다.)

카프카 서버에서 Topic을 등록하고, 실제 채팅을 돌려서 다중 서버에서 사용하는 부분은 Kafka-채팅-구현에서 추가적으로 진행하겠다.


참고 블로그
https://developer-been.tistory.com/58

profile
매일매일 차근차근 나아가보는 개발일기

0개의 댓글