카프카(Kafka) 이용하여 메시지 주고받기

728x90
반응형

🔵 카프카 로깅 애플리케이션 초기 설정

Kafka는 대용량 데이터를 빠르게 처리하고 실시간으로 분석할 수 있는 분산 메시징 시스템이다.
이번 글에서는 Kafka를 활용한 로깅 애플리케이션을 설정하는 방법을 단계별로 알아볼 것이다.
실습은 AWS EC2 인스턴스 환경에서 진행되었으며, Kafka 설치부터 메시지 전송 및 수신 테스트까지 다룬다.

 

1) EC2 인스턴스 생성 및 연결

먼저, EC2 인스턴스를 생성하고 연결한다.

카프카를 실행하기 위해서는 메모리가 4GB 이상이어야 하기 때문에, t2.medium으로 생성했다.

 

권장 시스템 요구 사항

  1. 최소 메모리: 4GB 이상 (작은 규모의 클러스터 및 낮은 트래픽)
  2. 권장 메모리: 8GB 이상 (중간 규모의 클러스터 및 트래픽 처리 시)
  3. 대형 클러스터/고용량 처리 시: 16GB 이상 또는 더 많은 메모리 필요

Kafka와 같은 분산 시스템은 메모리를 많이 사용하므로, 더 많은 메시지를 처리하고 더 많은 클러스터를 운영할수록 더 큰 메모리가 필요하다. 

t2.medium - 메모리 4GiB

카프카를 위한 포트 개방

Kafka는 9092와 2181번 포트를 사용하기 때문에, EC2 인스턴스에서 보안그룹의 인바운드 규칙에서 해당 포트를 허용해줘야 한다.

9092, 2181 포트 개방

 

2) 인스턴스에 카프카 설치

Kafka 나 ELK Stack 등은 Java로 만들어진 애플리케이션이라서 Docker나 Kubernetes와 같은 컨테이너를 이용하지 않을 경우에는 JVM(JRE)이 설치되어 있어야 한다.

JVM 설치

아래 명령어로 JVM을 설치한다.

JDK: 17
sudo apt update
sudo apt install -y openjdk-17-jdk
  • 설치 확인: java, javac 버전 확인
ubuntu@ip-<ip>:~$ java -version
openjdk version "17.0.13" 2024-10-15
OpenJDK Runtime Environment (build 17.0.13+11-Ubuntu-2ubuntu124.04)
OpenJDK 64-Bit Server VM (build 17.0.13+11-Ubuntu-2ubuntu124.04, mixed mode, sharing)
ubuntu@ip-<ip>:~$ javac -version
javac 17.0.13

 

카프카 설치

Kafka 바이너리 파일을 다운로드하고 설치한다.

  • 바이너리 파일 다운로드
wget https://archive.apache.org/dist/kafka/3.6.0/kafka_2.13-3.6.0.tgz

카프카 바이너리 파일 다운로드

압축 해제

tar xvf kafka_2.13-3.6.0.tgz

압축이 잘 해제되었는지 확인할 때는 `ll` 명령어를 사용한다.

ll

 

3) 애플리케이션 사용을 편리하게 하기 위한 작업

환경 변수를 추가하여 kafka 명령어를 어디서나 실행할 수 있도록 설정한다.

파일 경로 이동

다운로드 받은 카프카 바이너리 파일의 경로를 이동시킨다.

sudo mv kafka_2.13-3.6.0 /opt/kafka

 

환경 변수 추가

nano ~/.bashrc
export KAFKA_HOME=/opt/kafka
export PATH=$PATH:$KAFKA_HOME/bin

 

수정한 파일 적용

source ~/.bashrc

 

4) 카프카 환경 설정

카프카 환경 설정 파일을 열어서, 아래의 코드를 추가해준다.

nano /opt/kafka/config/server.properties

<public-ip> 부분에는 EC2 인스턴스의 퍼블릭 ip 주소를 적는다.

0.0.0.0은 모든 네트워크 인터페이스에서 수신할 수 있게 하므로, 외부에서 접근이 가능하다.

listerners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://<pulic-ip>:9092

delete.topic.enable=true
auto.create.topics.enable=true
log.retention.minutes=10

 

🤔 프로젝트 시 고려해야 할 점

  • 바이너리 파일로 다운로드 받아서 설치:
    • 특정 소프트웨어의 바이너리 파일을 직접 다운로드하고 이를 설치
    • 고려사항: 파일 위치와 실행 경로 - 설치 후 실행 파일의 경로를 환경 변수(PATH)에 추가하거나, 프로젝트 실행 시 명확하게 해당 경로를 지정해야 한다.
  • 도커나 쿠버네티스를 사용한 컨테이너 기반 설치:
    • 도커 이미지를 활용해 소프트웨어를 컨테이너로 실행
    • 고려사항: 동일한 기반 이미지를 사용하는지.
    • 예: Java는 JVM가 있어야 하고, 컨테이너에서 JVM과 같이 작동한다.
  • 패키지 관리 도구(apt, yum) 이용:
    • Linux 시스템에서 apt나 yum 같은 패키지 관리 도구를 사용해 소프트웨어 설치
    • 고려사항: 버전 고정
    • 업그레이드하면 문제가 될 수 있기 때문에, 필요한 경우 특정 버전을 고정하여 설치하는 것이 중요

 

실행

zookeeper 실행

/opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
jps -vm

Kafka 실행

 /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
 jps -m

 

5) 메시지 전송과 수신

메시지를 전송하고 수신할 때는 토픽이 필요하다. 사용자는 원하는 토픽으로 메시지를 전송하고 수신할 수 있다.

토픽 생성

kafka-topics.sh --create –bootstrap-server localhost:9092 --topic 토픽이름
/opt/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --topic log-topic

토픽 리스트 조회

kafka-topics.sh --bootstrap-server localhost:9092 --list 
/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --list

토픽 생성 및 리스트 조회

 

📤 메시지 전송

kafka-console.producer.sh --bootstrap-server localhost:9092 --topic 토픽이름
> 메시지 작성

/opt/kafka/bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic log-topic

메시지 전송

📥 메시지 수신

새로운 터미널 창을 열어서, 메시지가 정상적으로 왔는지 확인한다.

/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic log-topic --from-beginning

메시지 수신 성공

728x90
반응형