AWS

AWS MSK 구축

KK_Ryong 2023. 2. 28. 11:49

■■■VPC 생성 (coco-VPC)
    - 20.0.0.0/16

■■■ Subnet 생성 (coco-dev-subnet)
    - 20.0.0.0/24 public1
    - 20.0.1.0/24 public2
    - 20.0.2.0/24 private1
    - 20.0.3.0/24 private2
■■■ 보안그룹 생성
    - coco-MSK-sg
■■■ MSK Cluster 생성 (coco-MSK-cluster-02)
    - kafka 2.8.1 (권장) 버전
    - 영역 수 2 (테스트용)
    - 영역당 브로커 1
    - 스토리지 20G
    - AWS MSK 기본 구성
    - 서브넷 private1,private2 에 생성
    - 액세스 IAM 방식
    - AWS 관리형 키 사용
    - 기본 모니터링 + Prometheus 사용 가능
    - CloudWatch 로그 전송
■■■ IAM 역할 생성(액세스 IAM 방식 일 경우 생성)

■■■ 정책 생성
        {
        "Version": "2012-10-17",
        "Statement": [
        {
        "Effect": "Allow",
        "Action": [
        "kafka-cluster:Connect",
        "kafka-cluster:AlterCluster",
        "kafka-cluster:DescribeCluster"
        ],
        "Resource": [
        "arn:aws:kafka:ap-northeast-2:[AccountID]:cluster/[클러스터 이름]/*"
        ]
        },
        {
        "Effect": "Allow",
        "Action": [
        "kafka-cluster:Topic",
        "kafka-cluster:WriteData",
        "kafka-cluster:ReadData"
        ],
        "Resource": [
        "arn:aws:kafka:ap-northeast-2:[AccountID]:topic/[클러스터 이름]/*"
        ]
        },
        {
        "Effect": "Allow",
        "Action": [
        "kafka-cluster:AlterGroup",
        "kafka-cluster:DescribeGroup"
        ],
        "Resource": [
        "arn:aws:kafka:ap-northeast-2:[AccountID]:group/[클러스터 이름]/*"
        ]
        }
        ]
        }
        
    ■■■역할 생성
        - EC2 역할로 생성 (생성한 정책 연결)

 

■■■ 테스트용 EC2 생성(위 해당 VPC 에 생성) (위 IAM role을 EC2 생성 후 IAM 역할에 넣어주기)

 

■■■ 테스트 EC2 설정 
1. 클라이언트 머신에 Java 설치
sudo yum install java-1.8.0
 
2. Apache Kafka를 다운로드(웹으로 접속 해서 버전 확인)
wget https://archive.apache.org/dist/kafka/2.8.1/kafka_2.13-2.8.1.tgz
 
3. kafka 압축 풀기
tar -xzf kafka_2.13-2.8.1.tgz

4.kafka_2.12-2.8.1/libs 디렉토리 이동 후 IAM JAR 파일 다운로드 (웹으로 접속해서 버전 확인)
https://github.com/aws/aws-msk-iam-auth/releases/download/v1.1.6/aws-msk-iam-auth-1.1.6-all.jar
 
5.카프카 설치 디렉토리로 이동
cd /home/ec2-user/kafka_2.13-2.8.1/bin

6.client.properties 생성(vi로 새로 생성 한 뒤 아래 내용 넣고 저장)

security.protocol=SASL_SSL
sasl.mechanism=AWS_MSK_IAM
sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required;
sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler
 
7.클러스터 프라이빗 엔드포인트 복사

8.보안그룹
인바운드 모든 트레픽 설정(차후 특정 트래픽만 오픈)

네트워크 인터페이스로 IP 찾아 넣을 수 있지만  VPC 대역으로 9098 오픈

9.카프카 토픽(MSKTutorialTopic) 생성
./kafka-topics.sh --create --bootstrap-server [부트스트랩 앤드포인트] --command-config client.properties --replication-factor 2 --partitions 1 --topic [토픽 이름]

10.카프카 프로듀서 및 컨슈머 테스트 (아래 명령어 후 텍스트 입력)
./kafka-console-producer.sh --broker-list [부트스트랩 앤드포인트] --producer.config client.properties --topic [토픽 이름]

11.프로듀서 및 컨슈머 내용 확인 (위에서 입력했던 메시지 나옴)
./kafka-console-consumer.sh --bootstrap-server [부트스트랩 앤드포인트] --consumer.config client.properties --topic [토픽 이름] --from-beginning

12.성능 테스트
./kafka-producer-perf-test.sh --topic [토픽 이름] --record-size 100  --num-records 200000 --producer-props acks=1 bootstrap.servers=[부트스트랩 앤드포인트] --throughput -1

13.주키퍼로 생성 및 테스트
./kafka-topics.sh --create --zookeeper [주키퍼 앤드포인트] --replication-factor 2 --partitions 1 --topic MSKTutorialTopic
./kafka-console-producer.sh --broker-list [부트스트랩 앤드포인트] --producer.config client.properties --topic [토픽 이름]
./kafka-console-consumer.sh --bootstrap-server [부트스트랩 앤드포인트] --consumer.config client.properties --topic [토픽 이름] --from-beginning