🔵 카프카 로깅 애플리케이션 초기 설정
Kafka는 대용량 데이터를 빠르게 처리하고 실시간으로 분석할 수 있는 분산 메시징 시스템이다.
이번 글에서는 Kafka를 활용한 로깅 애플리케이션을 설정하는 방법을 단계별로 알아볼 것이다.
실습은 AWS EC2 인스턴스 환경에서 진행되었으며, Kafka 설치부터 메시지 전송 및 수신 테스트까지 다룬다.
1) EC2 인스턴스 생성 및 연결
먼저, EC2 인스턴스를 생성하고 연결한다.
카프카를 실행하기 위해서는 메모리가 4GB 이상이어야 하기 때문에, t2.medium으로 생성했다.
권장 시스템 요구 사항
- 최소 메모리: 4GB 이상 (작은 규모의 클러스터 및 낮은 트래픽)
- 권장 메모리: 8GB 이상 (중간 규모의 클러스터 및 트래픽 처리 시)
- 대형 클러스터/고용량 처리 시: 16GB 이상 또는 더 많은 메모리 필요
Kafka와 같은 분산 시스템은 메모리를 많이 사용하므로, 더 많은 메시지를 처리하고 더 많은 클러스터를 운영할수록 더 큰 메모리가 필요하다.
카프카를 위한 포트 개방
Kafka는 9092와 2181번 포트를 사용하기 때문에, EC2 인스턴스에서 보안그룹의 인바운드 규칙에서 해당 포트를 허용해줘야 한다.
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