AWS MSK 구축
■■■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