Amazon Web Services 한국 블로그

Amazon MSK Replicator 출시 – 리전간 MSK 클러스터 완전 관리형 복제 기능

Amazon Managed Streaming for Apache Kafka(Amazon MSK)은 스트리밍 데이터를 처리하는 방식을 단순화하는 완전관리형 고가용성 Apache Kafka 서비스를 제공합니다. Apache Kafka 사용 시 일반적인 아키텍처 패턴은 한 클러스터에서 다른 클러스터로 데이터를 복제하는 것입니다.

클러스터 간 복제는 종종 AWS 리전 전역에서 비즈니스 연속성 및 재해 복구 계획을 구현하고 애플리케이션 복원력을 높이는 데 사용됩니다. 다중 리전 애플리케이션 구축 시의 또 다른 사용 사례는 액세스 지연 시간 절감을 위해 여러 지역의 스트리밍 데이터 사본을 최종 소비자와 가까운 곳에 저장하는 것입니다. 분석을 위해 여러 클러스터의 데이터를 하나의 중앙 집중식 클러스터로 집계해야 할 수도 있습니다.

이러한 요구 사항을 해결하려면 사용자 지정 코드를 작성하거나 버전 2.4부터 Apache Kafka에 포함되어 제공되는 MirrorMaker 2.0과 같은 오픈 소스 도구를 설치 및 관리해야 합니다. 그러나 이러한 도구는 안정적인 복제를 위한 설정이 복잡하고 시간이 많이 소요될 수 있으며 지속적인 모니터링과 확장을 필요로 합니다.

오늘 Amazon MSK의 새로운 기능인 MSK Replicator를 소개합니다. MSK Replicator를 사용하면 MSK 클러스터 간에 리전 간동일 리전 복제를 안정적으로 설정하고 워크로드 처리에 맞게 자동으로 확장할 수 있습니다. MSK Replicator는 프로비저닝된 MSK 클러스터와 서버리스 MSK 클러스터 유형 모두에서 사용할 수 있으며 계층형 스토리지를 사용하는 클러스터를 포함합니다.

MSK Replicator를 사용하면 액티브-패시브 및 액티브-액티브 클러스터 토폴로지를 모두 설정하여 리전 간 Kafka 애플리케이션의 복원력을 높일 수 있습니다.

  • 액티브-액티브 설정에서는 두 MSK 클러스터 모두 읽기 및 쓰기를 적극적으로 제공합니다.
  • 액티브-패시브 설정에서는 한 번에 하나의 MSK 클러스터만 스트리밍 데이터를 적극적으로 제공하고 다른 클러스터는 대기 상태입니다.

이제 실제 작동 방식을 살펴보겠습니다.

AWS 리전 전역에 MSK Replicator 생성
서로 다른 리전에 두 개의 MSK 클러스터를 배포했습니다. MSK Replicator를 사용하려면 클러스터에 IAM 인증이 활성화되어 있어야 합니다. 다른 클라이언트에 대해 mTLS 또는 SASL과 같은 다른 인증 방법을 계속 사용할 수 있습니다. 또한 소스 클러스터는 다중 VPC 프라이빗 연결 활성화를 필요로 합니다.

MSK Replicator 리전 간 아키텍처 다이어그램

네트워크 관점에서 클러스터의 보안 그룹은 클러스터와 Replicator에서 사용하는 보안 그룹 간의 트래픽을 허용합니다. 예를 들어 동일한 보안 그룹에서 들어오고 나가는 트래픽을 허용하는 자체 참조 인바운드 및 아웃바운드 규칙을 추가할 수 있습니다. 단순화를 위해 두 클러스터 모두에 기본 VPC기본 보안 그룹을 사용합니다.

복제기를 만들기 전에 MSK 서비스(Replicator 포함)가 클러스터를 찾아 연결할 수 있도록 소스 클러스터의 클러스터 정책을 업데이트합니다. Amazon MSK 콘솔에서 소스 리전을 선택합니다. 탐색 창에서 클러스터를 선택한 다음 소스 클러스터를 선택합니다. 먼저 맨 위에 있는 소스 클러스터 ARN을 복사합니다. 그런 다음 속성 탭에서, 클러스터 정책 편집보안 설정에서 선택합니다. 여기에서 다음 JSON 정책(소스 클러스터 ARN 대체)을 사용하고 변경 사항을 저장합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "kafka.amazonaws.com"
            },
            "Action": [
                "kafka:CreateVpcConnection",
                "kafka:GetBootstrapBrokers",
                "kafka:DescribeClusterV2"
            ],
            "Resource": "<SOURCE_CLUSTER_ARN>"
        }
    ]
}

콘솔에서 대상 리전을 선택합니다. 탐색 창에서 Replicators를 선택한 다음 Replicator 생성을 선택합니다. 여기에 Replicator의 이름과 설명을 입력합니다.

콘솔 스크린샷.

소스 클러스터 섹션에서 소스 MSK 클러스터의 리전을 선택합니다. 그런 다음 탐색을 선택하여 목록에서 소스 MSK 클러스터를 선택합니다. 클러스터 정책이 설정된 클러스터에 대해서만 Replicator를 생성할 수 있음을 기억하십시오.

콘솔 스크린샷.

서브넷 보안 그룹을 기본값으로 두고 기본 VPC 및 기본 보안 그룹을 사용합니다. 이 네트워크 구성을 사용하여 클러스터와의 원활한 통신을 위해 탄력적 네트워크 인터페이스(EIN)를 배치할 수 있습니다.

소스 클러스터의 액세스 제어 방법IAM 역할 기반 인증으로 설정됩니다. 선택적으로 여러 인증 방법을 동시에 활성화하여 Replicator에서 IAM을 사용하는 동안 mTLS 또는 SASL과 같은 다른 인증 방법이 필요한 클라이언트를 계속 사용할 수 있습니다. 지역 간 복제의 경우 소스 클러스터에 다중 VPC를 사용하여 소스 클러스터에 액세스하므로, 소스 클러스터에 인증되지 않은 액세스를 활성화할 수 없습니다.

콘솔 스크린샷.

대상 클러스터 섹션에서 클러스터 리전은 콘솔을 사용하는 리전으로 설정되어 있습니다. 탐색을 선택하여 목록에서 대상 MSK 클러스터를 선택합니다.

콘솔 스크린샷.

소스 클러스터에서 수행한 것과 마찬가지로 서브넷보안 그룹을 기본값으로 유지합니다. 이 네트워크 구성은 대상 클러스터와 통신하는 데 필요한 ENI를 배치하는 데 사용됩니다. 대상 클러스터의 액세스 제어 방법IAM 역할 기반 인증으로 설정됩니다.

콘솔 스크린샷.

Replicator 설정 섹션에서는 모든 주제가 복제되도록 기본 주제 복제 구성을 사용합니다. 복제하거나 복제에서 제외할 항목의 이름을 나타내는 쉼표로 구분된 정규 표현식 목록을 지정할 수도 있습니다. 추가 설정에서 주제 구성, 액세스 제어 목록(ACL)을 복사하고 새 주제를 검색 및 복사하도록 선택할 수 있습니다.

콘솔 스크린샷.

소비자 그룹 복제를 사용하면 전환 후 사용 중인 애플리케이션이 기본 클러스터에서 중단된 지점부터 처리를 재개할 수 있도록 소비자 그룹 오프셋을 복제할지 여부를 지정할 수 있습니다. 복제하거나 복제에서 제외할 고객 그룹의 이름을 나타내는 쉼표로 구분된 정규 표현식 목록을 지정할 수도 있습니다. 또한 새로운 소비자 그룹을 발견하고 모방할 수도 있습니다. 모든 소비자 그룹을 복제하는 기본 설정을 사용합니다.

콘솔 스크린샷.

압축에서는 복제 중인 데이터에 사용할 수 있는 압축 유형 목록에서 없음을 선택합니다.

콘솔 스크린샷.

Amazon MSK 콘솔은 Replicator가 작동하는 데 필요한 권한을 가진 서비스 실행 역할을 자동으로 생성할 수 있습니다. 이 역할은 MSK 서비스에서 소스 및 대상 클러스터에 연결하고, 소스 클러스터에서 읽으며, 대상 클러스터에 쓰는 데 사용됩니다. 하지만 제 역할을 직접 만들어 제공할 수도 있습니다. 액세스 권한에서 IAM 역할 생성 또는 업데이트를 선택합니다.

콘솔 스크린샷.

마지막으로 Replicator에 태그를 추가합니다. 태그를 사용하여 리소스를 검색 및 필터링하거나 비용을 추적할 수 있습니다. Replicator 태그 섹션에서 키로 환경을 입력하고 값으로 AWS 뉴스 블로그를 입력합니다. 그런 다음 생성을 선택합니다.

콘솔 스크린샷.

몇 분 후에 커넥터가 실행됩니다. 사용해 봅시다!

AWS 리전 전역에서의 MSK Replicator 테스트
소스 및 대상 클러스터에 연결하기 위해 이미 두 리전에 두 개의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 설치했습니다. MSK 설명서의 지침에 따라 Apache Kafka 클라이언트 도구를 설치했습니다. IAM 인증을 사용하고 있기 때문에 두 인스턴스에는 클러스터에서 데이터를 연결, 전송 및 수신할 수 있는 IAM 역할이 연결되어 있습니다. 네트워킹을 단순화하기 위해 EC2 인스턴스와 MSK 클러스터의 기본 보안 그룹을 사용했습니다.

먼저 소스 클러스터에서 새 주제를 생성하고 몇 가지 메시지를 보냅니다. Amazon EC2 인스턴스 연결을 사용하여 원본 리전의 EC2 인스턴스에 로그인합니다. 디렉토리를 Kafka 클라이언트 실행 파일이 설치된 경로로 변경합니다 (경로는 사용하는 버전에 따라 다름).

cd /home/ec2-user/kafka_2.12-2.8.1/bin

소스 클러스터에 연결하려면 해당 부트스트랩 서버를 알아야 합니다. 소스 리전의 MSK 콘솔을 사용하여 탐색 페이지에서 클러스터를 선택한 다음 목록에서 소스 클러스터를 선택합니다. 클러스터 요약 섹션에서 클라이언트 정보 보기를 선택합니다. 그런 다음 부트 스트랩 서버 목록을 복사합니다. EC2 인스턴스가 클러스터와 동일한 VPC에 있기 때문에 프라이빗 엔드포인트(단일 VPC) 열의 목록을 복사합니다.

콘솔 스크린샷.

다시 EC2 인스턴스로 돌아가서 SOURCE_BOOTSTRAP_SERVERS 환경 변수에 부트스트랩 서버 목록을 넣었습니다.

export SOURCE_BOOTSTRAP_SERVERS=b-2.uscluster.esijym.c9.kafka.us-east-1.amazonaws.com:9098,b-3.uscluster.esijym.c9.kafka.us-east-1.amazonaws.com:9098,b-1.uscluster.esijym.c9.kafka.us-east-1.amazonaws.com:9098

이제 소스 클러스터에 주제를 생성합니다.

./kafka-topics.sh --bootstrap-server $SOURCE_BOOTSTRAP_SERVERS --command-config client.properties --create --topic my-topic --partitions 6

새 주제를 사용하여 소스 클러스터에 몇 가지 메시지를 전송합니다.

./kafka-console-producer.sh --broker-list $SOURCE_BOOTSTRAP_SERVERS --producer.config client.properties --topic my-topic
>Hello from the US
>These are my messages

대상 클러스터에서 어떤 일이 발생하는지 살펴보겠습니다. 대상 리전의 EC2 인스턴스에 연결합니다. 다른 인스턴스에서 수행한 것과 마찬가지로 대상 클러스터의 부트스트랩 서버 목록을 가져와서 TARGET_BOOTSTRAP_SERVERS 환경 변수에 넣습니다.

대상 클러스터에서 소스 클러스터 별칭은 복제된 주제 이름에 접두사로 추가됩니다. 소스 클러스터 별칭을 찾기 위해 MSK 콘솔 탐색 창에서 Replicators를 선택합니다. 거기서 방금 만든 Replicator를 선택합니다. 속성 탭에서, 클러스터 별칭소스 클러스터에서 찾습니다.

콘솔 스크린샷.

대상 클러스터의 주제 목록(출력 목록의 마지막 항목)을 보고 복제된 주제의 이름을 확인합니다.

./kafka-topics.sh --list --bootstrap-server $TARGET_BOOTSTRAP_SERVERS --command-config client.properties
. . .
us-cluster-c78ec6d63588.my-topic

이제 대상 클러스터에서 복제된 주제의 이름을 알았으므로 소비자는 원본 클러스터로 원래 전송된 메시지를 수신하기 시작합니다.

./kafka-console-consumer.sh --bootstrap-server $TARGET_BOOTSTRAP_SERVERS --consumer.config client.properties --topic us-cluster-c78ec6d63588.my-topic --from-beginning
Hello from the US
These are my messages

참고로 주제 구독에는 와일드카드를 사용하여(예:.*my-topic) 접두사를 자동으로 처리하고 소스 및 대상 클러스터에서 동일한 구성을 갖게 할 수 있습니다.

예상대로 소스 클러스터로 전송한 모든 메시지는 대상 클러스터에 연결된 소비자가 복제하고 수신했습니다.

모니터링 탭을 사용하여 MSK Replicator 지연 시간, 처리량, 오류 및 지연 지표를 모니터링할 수 있습니다. Amazon CloudWatch를 통해 작동하기 때문에 손쉽게 자체 경보를 생성하고 대시보드에 이러한 지표를 포함할 수 있습니다.

구성을 액티브-액티브 설정으로 업데이트하기 위해 비슷한 단계에 따라 다른 리전에 Replicator를 생성하고 다른 방향으로 클러스터 간에 스트리밍 데이터를 복제합니다. 장애 조치 및 페일백을 관리하는 방법에 대한 자세한 내용은 MSK Replicator 설명서를 참조하십시오.

가용성 및 요금
MSK Replicator는 현재 미국 동부(오하이오), 미국 동부(버지니아 북부), 미국 서부(오레곤), 아시아 태평양(싱가포르), 아시아 태평양(시드니), 유럽(프랑크푸르트), 유럽(아일랜드)에서 사용 가능합니다.

MSK Replicator를 사용하면 복제된 데이터의 GB당 비용을 지불하고 각 Replicator에 대해 시간당 요금을 지불합니다. 또한 소스 및 대상 MSK 클러스터에 대한 Amazon MSK의 일반 요금과 리전 간 데이터 전송에 대한 표준 AWS 요금을 지불합니다. 자세한 내용은 MSK 요금을 참조하십시오.

MSK 리플리케이터를 사용하면 리전 간 및 동일 리전 복제를 신속하게 구현하여 아키텍처의 복원력을 개선하고, 파트너 및 최종 사용자와 가까운 곳에 데이터를 저장할 수 있습니다. 또한 이 새로운 기능을 사용하면 분석을 더 쉽게 실행할 수 있는 단일 중앙 집중식 클러스터로 스트리밍 데이터를 복제하여 더 나은 인사이트를 얻을 수 있습니다.

Amazon MSK Replicator를 사용하여 데이터 스트림 아키텍처를 간소화하십시오.

Danilo