Skip to main content

Kafka를 통한 메시지 처리

카카오클라우드 Advanced Managed Kafka 서비스의 클러스터 생성 후 Kafka 환경을 구축하여 메시지를 송수신하는 과정을 설명합니다.

기본 정보

시작하기 전에

카카오클라우드 Advanced Managed Kafka 서비스는 Kafka 클러스터를 완전 관리형으로 제공하여 고성능 데이터 스트리밍과 이벤트 처리 시스템을 손쉽게 구축할 수 있게 합니다. 이 튜토리얼에서는 Advanced Managed Kafka 서비스의 클러스터를 생성하고 Kafka 환경을 구축하여 메시지를 송수신하는 과정을 상세히 설명합니다.

시나리오 소개

  • Advanced Managed Kafka 클러스터 생성
  • Kafka 사용 환경 설정
  • 토픽 생성
  • 프로듀서와 컨슈머 실행 후 메시지 송수신

사전 작업

사전 작업 단계에서는 Advanced Managed Kafka를 생성하고 접근하기 위해 필요한 리소스를 생성합니다. 우선 카카오클라우드 네트워크 구성하고, Kafka 클러스터에 접근하기 위한 보안 그룹을 설정해 보겠습니다.

1. 네트워크 구성

  1. 카카오클라우드 콘솔 > Beyond Networking Service > VPC 메뉴로 이동합니다.

  2. 우측의 [VPC 생성] 버튼을 클릭하여 새로운 VPC를 생성합니다.

    VPC: tutorial-amk-vpc
    1. VPC 생성 정보를 아래와 같이 입력합니다.

      구분항목입력값
      VPC 정보VPC 이름tutorial-amk-vpc
      VPC IP CIDR 블록10.0.0.0/16
      Availability Zone가용 영역 개수2
      첫 번째 AZkr-central-2-a
      두 번째 AZkr-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. 하단의 [생성] 버튼을 클릭합니다.

2. 보안 그룹 설정

  1. 카카오클라우드 콘솔 > Beyond Networking Service > VPC 메뉴에서 보안 그룹을 선택합니다.

  2. 우측의 [보안 그룹 생성] 버튼을 클릭하여 새로운 보안 그룹을 생성합니다.

    보안 그룹: tutorial-amk-sg
    1. 보안 그룹 이름과 설명을 아래와 같이 입력합니다.

      이름설명(선택)
      tutorial-amk-sgKafka 클러스터 보안정책
    2. 하단의 [추가] 버튼을 클릭 후, 인바운드 규칙을 아래와 같이 설정하고 [생성] 버튼을 클릭합니다.

      항목설정값비고
      프로토콜TCP
      출발지0.0.0.0/0⚠️ 전체 접근 가능한 출발지입니다. 실 사용 시 사용자 설정에 맞게 변경합니다.
      포트 번호9092Kafka 기본 포트값입니다.
      정책 설명(선택)cluster inbound policy 1
    보안 그룹: tutorial-vm-sg
    1. 보안 그룹 이름과 설명을 아래와 같이 입력합니다.

      이름설명(선택)
      tutorial-vm-sgKafka용 VM 인스턴스 보안정책
    2. 하단의 [추가] 버튼을 클릭 후, 인바운드 조건을 아래와 같이 설정하고 [생성] 버튼을 클릭합니다.

      나의 퍼블릭 IP 확인하기

      다음 버튼을 클릭하면 현재 사용 중인 나의 퍼블릭 IP를 확인할 수 있습니다.

      항목설정값비고
      프로토콜TCP
      출발지{사용자 퍼블릭 IP}/32
      포트 번호22SSH 접근을 위한 포트 번호
      정책 설명(선택)kafka inbound policy 1

3. Advanced Managed Kafka 클러스터 생성

Advanced Managed Kafka 클러스터를 생성합니다. 클러스터 생성 시 네트워크 및 보안 그룹 설정, 가용 영역 설정, 브로커 설정 등이 포함됩니다.

  1. 카카오클라우드 콘솔 > Analytics > Advanced Managed Kafka 메뉴로 이동합니다.

  2. 우측의 [클러스터 생성] 버튼을 클릭한 후, 다음과 같이 클러스터를 생성합니다.

    기본 설정

    항목설정값
    클러스터 이름tutorial-amk-cluster
    Kafka 버전3.7.1
    포트9092

    인스턴스 유형

    항목설정값
    인스턴스 유형r2a.2xlarge

    네트워크 설정

    항목설정값비고
    VPCtutorial-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
    최대 IOPS3000- 볼륨 크기에 따라 최대 IOPS 자동 지정
    - 볼륨 크기 50GB인 경우 최대 IOPS는 3000
    세부 설정기본값 확인이 문서에서는 기본 설정값을 변경하지 않고 클러스터를 생성합니다.
    원하는 경우 설정값을 자유롭게 변경할 수 있습니다.
  3. [생성] 버튼을 클릭합니다.

  4. 생성한 클러스터의 상태가 Starting, Creating을 거쳐 Active로 변경된 것을 확인합니다.
    - 클러스터가 Active 되기 전이라도 클러스터 이름을 클릭하여 클러스터 상세 페이지의 브로커 탭에서 브로커 생성 상태를 확인할 수 있습니다.

4. Kafka 부트스트랩 서버 접근용 VM 생성

Advanced Managed Kafka 클러스터를 생성했다면 Kafka 부트스트랩 서버에 접근하기 위한 VM을 생성합니다.

  1. 카카오클라우드 콘솔 > Virtual Machine 메뉴로 이동합니다.

  2. 우측의 [인스턴스 생성] 버튼을 클릭한 후, 다음과 같이 VM 인스턴스를 생성합니다.

    caution
    • 키 페어는 최초 1회 생성하여 잘 저장해두세요. 잃어버린 키는 복구할 수 없습니다.
    구분항목설정값비고
    기본 정보이름tutorial-amk-vm
    개수1
    이미지기본Ubuntu 24.04
    인스턴스 유형m2a.large
    볼륨루트 볼륨10GB / SSD
    키 페어{USER_KEYPAIR}키 페어 생성 또는 사용한 키 페어를 선택
    네트워크VPCtutorial-amk-vpc사전 작업에서 생성한 VPC
    서브넷main (10.0.0.0/20)사전 작업에서 생성한 서브넷
    보안 그룹tutorial-vm-sg사전 작업에서 설정한 보안 그룹

작업 순서

본격적인 Kafka 사용 환경 구성 및 메시지 송수신을 위한 세부 작업은 다음과 같습니다.

Step 1. VM 인스턴스 접근 설정

앞서 생성한 VM 인스턴스에 접근할 수 있도록 퍼블릭 IP를 부여해야 합니다.

안내

키 페어 파일 권한 문제로 bad permissions 오류가 발생할 경우, sudo 명령어를 추가하여 문제를 해결할 수 있습니다.

이미지 퍼블릭 IP 확인

  1. 카카오클라우드 콘솔 > Virtual Machine 메뉴로 이동합니다.

  2. 인스턴스 탭에서 위에서 생성했던 tutorial-amk-vm 인스턴스 이름을 클릭합니다.

  3. 우측의 [인스턴스 작업] 버튼을 클릭 후 [퍼블릭 IP 연결] 버튼을 클릭합니다.

  4. 퍼블릭 IP 연결 창에서 별도 수정 없이 [확인] 버튼을 클릭합니다.

    • 연결된 퍼블릭 IP는 인스턴스 목록 또는 인스턴스 이름을 클릭하여 이동한 인스턴스 상세 페이지의 네트워크 탭에서 확인할 수 있습니다.
  5. 로컬 환경에서 터미널 실행 후 cd 명령어를 사용하여 키 페어 파일을 다운로드 받은 폴더로 이동합니다.

    • 키 파일을 최초 생성해서 사용했다면 기본적으로 다운로드 폴더에 저장됩니다.
    cd ~/Downloads
  6. 키 페어 읽기 권한을 부여하기 위해 다음 명령어를 실행하고 비밀번호를 입력합니다.

    sudo chmod 400 ${PRIVATE_KEY}.pem
    환경변수설명
    PRIVATE_KEY🖌키 페어 파일명
  7. 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 확인

  1. 터미널에서 이어서 cd 명령어를 사용하여 Kafka 폴더로 이동합니다.

    cd kafka_2.13-3.7.1
  2. 이동한 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` 클릭 후 부트스트랩 서버 정보 복사 가능
  3. 토픽이 생성되었으면 토픽 상세 조회를 위해 아래 명령어를 실행합니다.

    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. 컨슈머 클라이언트 실행

프로듀서와 컨슈머 간 메시지 송수신을 확인할 수 있도록 컨슈머 클라이언트 실행은 새로운 터미널 창에서 진행합니다.

  1. 새 터미널 창을 열어 cd 명령어를 사용하여 키 페어 파일을 다운로드 받은 폴더로 이동합니다.

    cd ~/Downloads
  2. SSH 접근을 위해 다음 명령어를 실행합니다.

    ssh -i ${PRIVATE_KEY}.pem ubuntu@${TUTORIAL-AMK-VM_PUBLIC_IP}
    환경변수설명
    PRIVATE_KEY🖌키 페어 파일명
    TUTORIAL-AMK-VM_PUBLIC_IP🖌VM > 인스턴스 탭에서 생성해 둔 `tutorial-amk-vm` 인스턴스 클릭 후, 네트워크 탭에서 확인 가능
  3. cd 명령어를 사용하여 Kafka 폴더로 이동합니다.

    cd kafka_2.13-3.7.1
  4. 컨슈머 클라이언트 실행을 위해 아래 명령어를 실행합니다.

    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. 프로듀서와 컨슈머 간 메시지 송수신

  1. 프로듀서 클라이언트를 실행한 터미널에서 >뒤에 hello kafka 메시지를 입력하고 실행합니다.

  2. 컨슈머 클라이언트를 실행한 터미널에 hello kafka 메시지가 수신된 것을 확인합니다.