Kafka를 통한 메시지 처리
카카오클라우드 Advanced Managed Kafka 서비스의 클러스터 생성 후 Kafka 환경을 구축하여 메시지를 송수신하는 과정을 설명합니다.
시나리오 소개
카카오클라우드 Advanced Managed Kafka 서비스는 Kafka 클러스터를 완전 관리형으로 제공하여 고성능 데이터 스트리밍과 이벤트 처리 시스템을 손쉽게 구축할 수 있게 합니다. 이 튜토리얼에서는 Advanced Managed Kafka 서비스의 클러스터를 생성하고 Kafka 환경을 구축하여 메시지를 송수신하는 과정을 상세히 설명합니다.
주요 내용은 아래와 같습니다.
- Advanced Managed Kafka 클러스터 생성
- Kafka 사용 환경 설정
- 토픽 생성
- 프로듀서와 컨슈머 실행 후 메시지 송수신
시작하기 전에
사전 작업 단계에서는 Advanced Managed Kafka를 생성하고 접근하기 위해 필요한 리소스를 생성합니다. 우선 카카오클라우드 네트워크 구성하고, Kafka 클러스터에 접근하기 위한 보안 그룹을 설정해 보겠습니다.
1. 네트워크 구성
-
카카오클라우드 콘솔 > Beyond Networking Service > VPC 메뉴로 이동합니다.
-
우측의 [VPC 생성] 버튼을 클릭하여 새로운 VPC를 생성합니다.
VPC: tutorial-amk-vpc
-
VPC 생성 정보를 아래와 같이 입력합니다.
구분 항목 입력값 VPC 정보 VPC 이름 tutorial-amk-vpc VPC IP CIDR 블록 10.0.0.0/16 Availability Zone 가용 영역 개수 2 첫 번째 AZ kr-central-2-a 두 번째 AZ kr-central-2-b 서브넷 설정 가용 영역당 퍼블릭 서브넷 개수 1 가용 영역당 프라이빗 서브넷 개수 0 kr-central-2-a 퍼블릭 서브넷 IPv4 CIDR 블록 10.0.0.0/20 kr-central-2-b 퍼블릭 서브넷 IPv4 CIDR 블록 10.0.16.0/20 -
하단의 [생성] 버튼을 클릭합니다.
-
2. 보안 그룹 설정
-
카카오클라우드 콘솔 > Beyond Networking Service > VPC 메뉴에서 보안 그룹을 선택합니다.
-
우측의 [보안 그룹 생성] 버튼을 클릭하여 새로운 보안 그룹을 생성합니다.
보안 그룹: tutorial-amk-sg
-
보안 그룹 이름과 설명을 아래와 같이 입력합니다.
이름 설명(선택) tutorial-amk-sg Kafka 클러스터 보안정책 -
하단의 [추가] 버튼을 클릭 후, 인바운드 규칙을 아래와 같이 설정하고 [생성] 버튼을 클릭합니다.
항목 설정값 비고 프로토콜 TCP 출발지 0.0.0.0/0 ⚠️ 전체 접근 가능한 출발지입니다. 실 사용 시 사용자 설정에 맞게 변경합니다. 포트 번호 9092 Kafka 기본 포트값입니다. 정책 설명(선택) cluster inbound policy 1
보안 그룹: tutorial-vm-sg
-
보안 그룹 이름과 설명을 아래와 같이 입력합니다.
이름 설명(선택) tutorial-vm-sg Kafka용 VM 인스턴스 보안정책 -
하단의 [추가] 버튼을 클릭 후, 인바운드 조건을 아래와 같이 설정하고 [생성] 버튼을 클릭합니다.
나의 퍼블릭 IP 확인하기다음 버튼을 클릭하면 현재 사용 중인 나의 퍼블릭 IP를 확인할 수 있습니다.
항목 설정값 비고 프로토콜 TCP 출발지 {사용자 퍼블릭 IP}/32
포트 번호 22 SSH 접근을 위한 포트 번호 정책 설명(선택) kafka inbound policy 1
-
3. Advanced Managed Kafka 클러스터 생성
Advanced Managed Kafka 클러스터를 생성합니다. 클러스터 생성 시 네트워크 및 보안 그룹 설정, 가용 영역 설정, 브로커 설정 등이 포함됩니다.
-
카카오클라우드 콘솔 > Analytics > Advanced Managed Kafka 메뉴로 이동합니다.
-
우측의 [클러스터 생성] 버튼을 클릭한 후, 다음과 같이 클러스터를 생성합니다.
기본 설정
항목 설정값 클러스터 이름 tutorial-amk-cluster Kafka 버전 3.7.1 포트 9092 인스턴스 유형
항목 설정값 인스턴스 유형 r2a.2xlarge 네트워크 설정
항목 설정값 비고 VPC tutorial-amk-vpc 사전 작업에서 생성한 VPC 서브넷 main (10.0.0.0/20)
-{VPC_ID}
_sn_1 (10.0.16.0/20)사전 작업에서 생성한 서브넷 보안 그룹 tutorial-amk-sg 사전 작업에서 설정한 보안 그룹 브로커 구성 설정
항목 설정값 비고 지정된 가용 영역 수 2 네트워크 설정 시 선택한 서브넷의 가용 영역에 기반 브로커 수 2 - 가용 영역당 배포되는 브로커 수
- 가용 영역이 2개이므로, 총 브로커 수는 4개볼륨 타입 / 크기 - 볼륨 타입: SSD
- 볼륨 크기 : 50 GB- 각 브로커에 할당되는 볼륨 크기
- 브로커 수가 4개이므로, 총 볼륨 크기는 200GB최대 IOPS 3000 - 볼륨 크기에 따라 최대 IOPS 자동 지정
- 볼륨 크기 50GB인 경우 최대 IOPS는 3000세부 설정 기본값 확인 이 문서에서는 기본 설정값을 변경하지 않고 클러스터를 생성합니다.
원하는 경우 설정값을 자유롭게 변경할 수 있습니다. -
[생성] 버튼을 클릭합니다.
-
생성한 클러스터의 상태가
Starting
,Creating
을 거쳐Active
로 변경된 것을 확인합니다.
- 클러스터가Active
되기 전이라도 클러스터 이름을 클릭하여 클러스터 상세 페이지의 브로커 탭에서 브로커 생성 상태를 확인할 수 있습니다.
4. Kafka 부트스트랩 서버 접근용 VM 생성
Advanced Managed Kafka 클러스터를 생성했다면 Kafka 부트스트랩 서버에 접근하기 위한 VM을 생성합니다.
-
카카오클라우드 콘솔 > Virtual Machine 메뉴로 이동합니다.
-
우측의 [인스턴스 생성] 버튼을 클릭한 후, 다음과 같이 VM 인스턴스를 생성합니다.
주의- 키 페어는 최초 1회 생성하여 잘 저장해두세요. 잃어버린 키는 복구할 수 없습니다.
구분 항목 설정값 비고 기본 정보 이름 tutorial-amk-vm 개수 1 이미지 기본 Ubuntu 24.04 인스턴스 유형 m2a.large 볼륨 루트 볼륨 10GB / SSD 키 페어 {USER_KEYPAIR}
키 페어 생성 또는 사용한 키 페어를 선택 네트워크 VPC tutorial-amk-vpc 사전 작업에서 생성한 VPC 서브넷 main (10.0.0.0/20) 사전 작업에서 생성한 서브넷 보안 그룹 tutorial-vm-sg 사전 작업에서 설정한 보안 그룹
시작하기
본격적인 Kafka 사용 환경 구성 및 메시지 송수신을 위한 세부 작업은 다음과 같습니다.
Step 1. VM 인스턴스 접근 설정
앞서 생성한 VM 인스턴스에 접근할 수 있도록 퍼블릭 IP를 부여해야 합니다.
키 페어 파일 권한 문제로 bad permissions
오류가 발생할 경우, sudo
명령어를 추가하여 문제를 해결할 수 있습니다.
퍼블릭 IP 확인
-
카카오클라우드 콘솔 > Virtual Machine 메뉴로 이동합니다.
-
인스턴스 탭에서 위에서 생성했던
tutorial-amk-vm
인스턴스 이름을 클릭합니다. -
우측의 [인스턴스 작업] 버튼을 클릭 후 [퍼블릭 IP 연결] 버튼을 클릭합니다.
-
퍼블릭 IP 연결 창에서 별도 수정 없이 [확인] 버튼을 클릭합니다.
- 연결된 퍼블릭 IP는 인스턴스 목록 또는 인스턴스 이름을 클릭하여 이동한 인스턴스 상세 페이지의 네트워크 탭에서 확인할 수 있습니다.
-
로컬 환경에서 터미널 실행 후
cd
명령어를 사용하여 키 페어 파일을 다운로드 받은 폴더로 이동합니다.- 키 파일을 최초 생성해서 사용했다면 기본적으로 다운로드 폴더에 저장됩니다.
cd ~/Downloads
-
키 페어 읽기 권한을 부여하기 위해 다음 명령어를 실행하고 비밀번호를 입력합니다.
sudo chmod 400 ${PRIVATE_KEY}.pem
환경변수 설명 PRIVATE_KEY🖌︎ 키 페어 파일명 -
SSH 접근을 위해 다음 명령어를 실행합니다.
ssh -i ${PRIVATE_KEY}.pem ubuntu@${TUTORIAL-AMK-VM_PUBLIC_IP}
환경변수 설명 PRIVATE_KEY🖌︎ 키 페어 파일명 TUTORIAL-AMK-VM_PUBLIC_IP🖌︎ VM > 인스턴스 탭에서 생성해 둔 `tutorial-amk-vm` 인스턴스 클릭 후, 네트워크 탭에서 확인 가능
Step 2. Kafka 사용 환경 설정
접근한 VM 인스턴스에 Kafka를 사용할 수 있는 환경을 설정하는 작업을 진행합니다. 터미널에서 이어서 다음 명령어들을 실행합니다.
1. Java 설치 및 환경 변수 설정
Kafka는 Java로 작성되었기 때문에 JDK가 필요합니다. 이 문서에서는 임의로 OpenJDK 21 버전을 설치합니다.
sudo apt update
sudo apt install -y openjdk-21-jdk
cat << EOF | sudo tee -a /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
export PATH=\$JAVA_HOME/bin:\$PATH
export CLASSPATH=\$CLASSPATH:\$JAVA_HOME/lib/ext:\$JAVA_HOME/lib/tools.jar
EOF
source /etc/profile
2. Kafka 다운로드 및 압축 해제
Kafka 다운로드와 관련된 자세한 설명이 필요한 경우 Kafka 공식 홈페이지의 APACHE KAFKA QUICKSTART를 참고하세요.
curl
명령어를 사용하여 Apache 공식 사이트에서 Kafka를 다운로드합니다. 이 문서에서는 임의로 Kafka 3.7.1 버전을 설치합니다.
Advanced Managed가 지원하고 권장하는 Kafka 버전은 지원 중인 Apache Kafka 버전을 참고해 주세요
curl https://dlcdn.apache.org/kafka/3.7.1/kafka_2.13-3.7.1.tgz -o kafka_2.13-3.7.1.tgz
tar -xzf kafka_2.13-3.7.1.tgz
Step 3. 토픽 생성 및 조회
Kafka 설치가 완료되었다면, 설치한 Kafka 폴더로 이동하여 토픽을 생성하고 조회할 수 있습니다.
부트스트랩 서버 IP 확인
-
터미널에서 이어서
cd
명령어를 사용하여 Kafka 폴더로 이동합니다.cd kafka_2.13-3.7.1
-
이동한 Kafka 폴더에서 토픽을 생성하기 위해 아래 명령어를 실행합니다.
bin/kafka-topics.sh --create --topic ${TOPIC_NAME} --bootstrap-server ${HOST:PORT}
환경변수 설명 TOPIC_NAME🖌︎ 토픽 이름 지정 / 예시: tutorial-topic HOST:PORT🖌︎ Advanced Managed Kafka > 클러스터 메뉴에서 생성해 둔 `tutorial-amk-cluster` 클릭 후 부트스트랩 서버 정보 복사 가능 -
토픽이 생성되었으면 토픽 상세 조회를 위해 아래 명령어를 실행합니다.
bin/kafka-topics.sh --describe --topic ${TOPIC_NAME} --bootstrap-server ${HOST:PORT}
환경변수 설명 TOPIC_NAME🖌︎ 조회할 토픽 이름 / 예시: tutorial-topic HOST:PORT🖌︎ Advanced Managed Kafka > 클러스터 메뉴에서 생성해 둔 `tutorial-amk-cluster` 클릭 후 부트스트랩 서버 정보 복사 가능
Step 4. 프로듀서 클라이언트 실행
토픽을 생성했다면 메시지를 생성하는 프로듀서를 클라이언트 실행을 위해 터미널에서 이어서 아래 명령어를 실행합니다. 실행 결과로 >
가 출력되었다면 다음 단계를 진행해 주세요.
bin/kafka-console-producer.sh --topic ${TOPIC_NAME} --bootstrap-server ${HOST:PORT}
환경변수 | 설명 |
---|---|
TOPIC_NAME🖌︎ | 프로듀서가 데이터를 송신할 토픽 이름 / 예시: tutorial-topic |
HOST:PORT🖌︎ | Advanced Managed Kafka > 클러스터 메뉴에서 생성해 둔 `tutorial-amk-cluster` 클릭 후 부트스트랩 서버 정보 복사 가능 |
Step 5. 컨슈머 클라이언트 실행
프로듀서와 컨슈머 간 메시지 송수신을 확인할 수 있도록 컨슈머 클라이언트 실행은 새로운 터미널 창에서 진행합니다.
-
새 터미널 창을 열어
cd
명령어를 사용하여 키 페어 파일을 다운로드 받은 폴더로 이동합니다.cd ~/Downloads
-
SSH 접근을 위해 다음 명령어를 실행합니다.
ssh -i ${PRIVATE_KEY}.pem ubuntu@${TUTORIAL-AMK-VM_PUBLIC_IP}
환경변수 설명 PRIVATE_KEY🖌︎ 키 페어 파일명 TUTORIAL-AMK-VM_PUBLIC_IP🖌︎ VM > 인스턴스 탭에서 생성해 둔 `tutorial-amk-vm` 인스턴스 클릭 후, 네트워크 탭에서 확인 가능 -
cd
명령어를 사용하여 Kafka 폴더로 이동합니다.cd kafka_2.13-3.7.1
-
컨슈머 클라이언트 실행을 위해 아래 명령어를 실행합니다.
bin/kafka-console-consumer.sh --topic ${TOPIC_NAME} --bootstrap-server ${HOST:PORT}
환경변수 설명 TOPIC_NAME🖌︎ 컨슈머가 데이터를 수신할 토픽 이름 / 예시: tutorial-topic HOST:PORT🖌︎ Advanced Managed Kafka > 클러스터 메뉴에서 생성해 둔 `tutorial-amk-cluster` 클릭 후 부트스트랩 서버 정보 복사 가능
Step 6. 프로듀서와 컨슈머 간 메시지 송수신
-
프로듀서 클라이언트를 실행한 터미널에서
>
뒤에hello kafka
메시지를 입력하고 실행합니다. -
컨슈머 클라이언트를 실행한 터미널에
hello kafka
메시지가 수신된 것을 확인합니다.