티스토리 뷰

Kafka

[Kafka] AWS MSK Install guide

SchoolDevops 2022. 4. 11. 09:35

AWS MSK Install guide

  • AWS에서는 Amazon Managed Streaming for ApacheKafka (MSK)를 제공한다.
  • MSK는 완젼 관리형 Kafka클러스터를 AWS 환경하에서 구성할 수 있도록 해준다.
  • 완전 관리형이기 때문에 Zookeeper나, Cluster의 추가, 운영등의 부담이 적으며, 필요할때 Kafka 툴을 이용하여 오퍼레이션을 수행할 수 있도록 한다.

AWS MSK 구조

  • AW MSK는 다음과 같은 구조를 가지고 있다.
  • 우리가 구성할 대상은 아래 도식과 같은 아키텍처를 구성할 것이다.

  • 위 그림과 같이 msk의 경우 AWS에서 Kafka 클러스터를 실행할 수 있도록 한다.
  • Cluster가 구성되면, EC2, AWS Lambda, Amazon Kinesis Data Analytics 등과 연결하여 메시징 처리를 수행할 수 있다.

  • 위 그림과 같이 msk 아키텍터를 위해서 다음 요소가 필요하다.
    • AWS MSK VPC: MSK설치를 위한 VPC이다.
    • Subnet 1 ~ 3: MSK 브로커가 설치될 Subnet이다.
    • Borker 1 ~ 3: 최소한의 3개의 Broker를 설치한다.
    • Zookeeper 1 ~ 3: 브로커의 상태와, 마스터 노드, 리더 파티션 등의 상태를 관리하기 위한 주키퍼 클러스터를 설치한다.
    • Customer VPC: MSK와 통신하기 위한 클라이언트가 위치할 VPC이다.
    • Subnet A ~ C: 클라이언트를 위한 Subnet이다.
    • Producer: MSK와 통신하는 Producer 인스턴스 (여기서는 kafka 도구를 이용한다.)
    • Consumer: MSK와 통신하는 Consumer 인스턴스 (여기서는 kafka 도구를 이용한다.)
    • Topci Creator: MSK의 토픽을 생성하는 인스턴스이다. (여기서는 kafka 도구를 이용한다.)

VPC 와 Subnet 구성하기.

  • 이제 VPC와 Subnet을 구성하자.
  • VPC를 검색하고, VPC 생성 버튼을 클릭한다.

VPC, Subnet 생성

  • VPC 설정
    • 생성할 리소스에서 "VPC, 서브넷 등" 를 선택한다.
  • 이름 태그 자동 생성 : 이름을 "MSK_VPC"이다.
  • IPv4 CIDR블록은 10.0.0.0/16으로 설정하였다.
  • PIv6 CIDR 블록 없음으로 지정한다.
  • 테넌시: 기본값으로 지정한다.

  • 가용영역:
    • 우리가 필요한 가용영역은 3개로 잡았다. MSK는 3개의 가용영역을 추천하고 있다.
  • 퍼블릭 서브넷 수:
    • 3으로 설정했다. 퍼블릭 서브넷을 각 AZ마다 생성하도록 3으로 설정했다.
  • 프라이빗 서브넷 수:
    • 프라이빗 서브넷 역시 3개로 설정하고, MSK는 Private Subnet에 생성할 것이다.
  • NAT 게이트웨이: 별도로 지정하지 않았다.
    • Private Subnet에서 외부로 통신하려면 NAT G/W가 필요하다.
  • VPC 엔드포인트
    • S3 Gateway로 VPC와 S3를 연결시켜주는 게이트웨이이다.

  • DNS 옵션
    • DNS 호스트 이름 활성화 (체크)
    • DNS 확인 활성화 (체크)

  • 위 그림과 같은 아키텍처로 VPC가 생성이 된다.
  • VPC: MSK_VPC-vpc 를 생성한다.
  • 서브넷 (6개): 3개의 AZ에 private, public 각각 1개 총 6개의 서브넷을 생성한다.
    • ap-northeast-2a
    • ap-northeast-2b
    • ap-northeast-2c
  • 라우팅 테이블 (6개):
    • public subnet을 위한 라우팅 테이블
    • private subnet을 위한 라우팅 테이블
  • 네트워크 연결 (2개)
    • igw는 인터텟 게이트웨이로 외부와 통신을 수행하도록 한다.
    • vpce-s3는 VPC 엔드포인트로 S3연동을 수행한다.
  • 확인이 완료되었다면 "VPC 생성" 을 클릭하여 VPC를 생성한다.

MSK 설치하기

  • 이제 MSK 클러스터를 구헝하기 위해서 MSK를 검색한다.

  • "Create Cluster" 버튼을 클릭한다.

  • 우리는 직접 클러스터를 VPC에 맞게 생성할 것이기 때문에 Custom create를 클릭한다.
  • Cluster Name: MY-MSK로 지정했다.
  • Apache Kafka version: 을 지정한다. (여기서는 recommended 를 선택한다.)

  • Broker type에 사용할 인스턴스 타입을 지정한다. 우리는 테스트용이므로 "kafka.t3.small"를 선택한다.
  • Number of zones: 3으로 지정했다. 우리가 사용할 존은 a, b, c 3개로 사용할 것이기 때문에 3으로 지정한다.
  • Number of broker per zone: 존당 브로커 개수를 지정한다. 우리는 존당 1개만 지정했다. (안정적인 서비스를 위해서 1로 지정하는 것이 좋다. )

  • Storage 는 EBS storage volume per broker 를 2GB로 잡았다.
  • 시스템의 용량에 따라 EBS의 크기를 조정하면 된다.
  • 나머지는 디폴트로 지정한다.

  • Configuration은 MSK default configuration 을 선택하여 "Next" 를 지정한다.

  • 네트워킹을 지정한다.
  • 이전에 생성한 VPC 이름을 클릭하여 MSK가 해당 VPC에 설치될 수 있도록 지정한다.
  • First zone
    • ap-northeast-2a
    • Subnet 은 우리가 생성한 private 으로 지정하여 생성하자.
  • Second zone, Third zone 모두 private 로 생성하자.
  • 나머지 설정은 기본으로 두고 "Next"를 클릭한다.

  • Security는 기본 값을 그대로 둔다.
  • Client, Server 사이에서 TLS 통신을 수행할 수 있도록 기본으로 설정되어 있다.
  • 이 부분은 실제 어플리케이션에서 데이터 암호화를 위한 필수 요건이라고 할 수 있다.

  • Monitoring 역시 기본값으로 둔다.
  • 실제 모니터링이 필요하다면 CloudWatch 로그를 설정하면 된다.

  • 클러스터 태그를 지정하여 사용자가 확인할 수 있도록 하자.

 

  • 모두 작성이 되었다면 리뷰를 하고 "Create cluster"를 선택하고 클러스터를 생성하자.

  • 생성하면 Status 가 Creating으로 지정할 수 있다.

  • 클러스터가 생성이 완료되면, Active로 상태를 확인할 수 있다.

  • "view client information" 버튼을 클릭하면 위와 같이 접속 정보를 확인할 수 있다.
  • Bootstrap servers는 어플리케이션에서 Kafka 클러스터 브로커로 접속할 엔드포인트이다.
  • Zookeeper connection은 상태 관리를 수행하는 zookeeper의 접속 엔드포인트이다.

MSK Bastion Server 생성하기.

  • 이제 EC2를 이용하여 Bastion Server를 구성하자.
  • EC2를 검색한다.

  • "인스턴스 시작" 버튼을 클릭한다.

  • 인스턴스는 Amazon Linux 2 AMI 를 선택한다.

  • 테스트 용이므로 t2.micro 로 선택하자.

  • 네트워크는 MSK의 VPC와 동일하게 설정해준다.
  • Subnet의 경우에는 public 을 선택한다.
  • IP 퍼블릭 할당을 활성화 상태로 두어 퍼블릭 IP를 자동 할당하도록 한다.

  • 태그를 지정하여 EC2를 식별할 수 있도록 한다.

  • 신규 보안그룹을 만들고, SSH 접근은 자신의 IP로 지정하여 안전하게 접근할 수 있도록 한다.

  • 키 페어를 지정하고, 인스턴스 시작 을 클릭한다.

EC2 --> MSK 보안그룹 연결하기.

EC2 인스턴스에 Kafka 도구 설치하고 테스트하기.

  • 신규로 생성한 EC2에 접근하자. 접근을 위해서는 aws인증 키페어를 다운로드 받아둔 디렉토리로 이동하여 접속한다.

Java 설치

  • kafka 도구의 경우 java를 기반으로 동작하므로, java를 설치해야한다.
[ec2-user@ip-10-0-13-xxx ~]$ sudo yum install java -y
... 생략 

[ec2-user@ip-10-0-13-xxx ~]$ java --version

openjdk 17.0.2 2022-01-18 LTS
OpenJDK Runtime Environment Corretto-17.0.2.8.1 (build 17.0.2+8-LTS)
OpenJDK 64-Bit Server VM Corretto-17.0.2.8.1 (build 17.0.2+8-LTS, mixed mode, sharing)
  • 자바 버젼을 확인하여 정상 설치 되었는지 확인한다.

Kafka 다운로드 하기

[ec2-user@ip-10-0-13-XXX ~]$ wget https://archive.apache.org/dist/kafka/2.6.2/kafka_2.12-2.6.2.tgz
  • 다음과 같이 압축을 푼다.
[ec2-user@ip-10-0-13-186 ~]$ ls

kafka_2.12-2.6.2.tgz

[ec2-user@ip-10-0-13-186 ~]$ tar -xvf kafka_2.12-2.6.2.tgz

TLS 보안 설정하기.

  • java key 저장소 복사하기.
  • 사용의 편의를 위해서 자바 key저장소를 임시 디렉토리에 복사한다.
[ec2-user@ip-10-0-13-186 ~]$ cp /usr/lib/jvm/java-17-amazon-corretto.x86_64/lib/security/cacerts /tmp/kafka.client.truststore.jks
  • kafka TLS 설정 파일 생성하기.
[ec2-user@ip-10-0-13-186 ~]$ cd kafka_2.12-2.6.2/
[ec2-user@ip-10-0-13-186 kafka_2.12-2.6.2]$ vim kafka-config.properties
  • 내용을 아래와 같이 작성하고 저장한다.
security.protocol=SSL
ssl.truststore.location=/tmp/kafka.client.truststore.jks
  • 이제 kafka를 이요알때 TLS를 사용할 준비가 되었다.

Topic 생성하기

  • kafka topic 을 생성하기 위해서 다음 명령을 사용한다.
bin/kafka-topics.sh --create \
	--zookeeper <Zookeeper Cluster List> \
	--replication-factor 3 \
	--partitions 1 \
	--topic MYTopic
  • Zookeeper Cluster List를 다음과 View client information에서 복사하여 붙여넣는다.

[ec2-user@ip-10-0-13-xxx kafka_2.12-2.6.2]$ bin/kafka-topics.sh --create --zookeeper z-1.my-msk.kheay9.c2.kafka.ap-northeast-2.amazonaws.com:2181,z-3.my-msk.kheay9.c2.kafka.ap-northeast-2.amazonaws.com:2181,z-2.my-msk.kheay9.c2.kafka.ap-northeast-2.amazonaws.com:2181 --replication-factor 3 --partitions 1 --topic MYTopic
Created topic MYTopic.
  • zookeeper 접속 정보를 활용한 토픽 생성

Producer 실행하기.

bin/kafka-console-producer.sh --broker-list <Bootstrap Server List> --topic MYTopic --producer.config kafka-config.properties
[ec2-user@ip-10-0-13-186 kafka_2.12-2.6.2]$ bin/kafka-console-producer.sh --broker-list b-1.my-msk.kheay9.c2.kafka.ap-northeast-2.amazonaws.com:9094,b-3.my-m.kheay9.c2.kafka.ap-northeast-2.amazonaws.com:9094,b-2.my-msk.kheay9.c2.kafka.ap-northeast-2.amazonaws.com:9094 --topic MYTopic --producer.config kafka-config.properties

>hello
>my name is kafka producer
>안녕하세요

Consumer 실행하기.

bin/kafka-console-consumer.sh --topic MYTopic --from-beginning --bootstrap-server <Bootstrap Server List> --consumer.config kafka-config.properties
  • 아래와 같이 consumer를 실행한다.
[ec2-user@ip-10-0-13-186 kafka_2.12-2.6.2]$ bin/kafka-console-consumer.sh --topic MYTopic --from-beginning --bootstrap-server b-1.my-msk.kheay9.c2.kafka.ap-northeast-2.amazonaws.com:9094,b-3.my-m.kheay9.c2.kafka.ap-northeast-2.amazonaws.com:9094,b-2.my-msk.kheay9.c2.kafka.ap-northeast-2.amazonaws.com:9094  --consumer.config kafka-config.properties

hello 
my name is kafka producer
안녕하세요 

Wrap Up

  • 지금까지 VPC를 생성하고, MSK를 구성한후, Pub/Sub 를 지정하여 사용해 보았다.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함