

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon MSK Replicator란 무엇인가요?
<a name="msk-replicator"></a>

Amazon MSK Replicator는 서로 다른 리전 또는 동일한 AWS 리전의 Amazon MSK 클러스터 전반에서 데이터를 안정적으로 복제할 수 있게 해주는 Amazon MSK의 기능입니다. 단, 소스 및 대상 클러스터가 모두 동일한 AWS 계정에 있어야 합니다. MSK Replicator를 사용하면 가용성과 비즈니스 연속성을 높이기 위해 지역적으로 탄력적인 스트리밍 애플리케이션을 쉽게 구축할 수 있습니다. MSK Replicator는 MSK 클러스터 전반에 걸쳐 자동 비동기 복제 기능을 제공하므로 사용자 지정 코드를 작성하거나 인프라를 관리하거나 리전 간 네트워킹을 설정할 필요가 없습니다.

MSK Replicator는 기본 리소스를 자동으로 확장하므로 용량을 모니터링하거나 확장할 필요 없이 온디맨드 방식으로 데이터를 복제할 수 있습니다. 또한 MSK Replicator는 주제 구성, 액세스 제어 목록(ACL), 소비자 그룹 오프셋 등 필요한 Kafka 메타데이터를 복제합니다. 리전에서 예기치 않은 이벤트가 발생하면 다른 AWS 리전으로 장애 조치하고 처리를 원활하게 재개할 수 있습니다.

MSK Replicator는 리전 간 복제(CRR)와 동일 리전 복제(SRR)를 모두 지원합니다. 교차 리전 복제에서 소스 및 대상 MSK 클러스터는 서로 다른 AWS 리전에 있습니다. 동일 리전 복제에서는 소스 MSK 클러스터와 대상 MSK 클러스터가 모두 동일한 AWS 리전에 있습니다. 소스 및 대상 MSK 클러스터를 생성한 후 MSK Replicator에서 사용해야 합니다.

**참고**  
MSK Replicator는 다음 AWS 리전을 지원합니다. 미국 동부(us-east-1, 버지니아 북부) 미국 동부(us-east-2, 오하이오) 미국 서부(us-west-2, 오레곤) 유럽(eu-west-1, 아일랜드) 유럽(eu-central-1, 프랑크푸르트) 아시아 태평양(ap-southeast-1, 싱가포르) 아시아 태평양(ap-southeast-2, 시드니) 유럽(eu-north-1, 스톡홀름) 아시아 태평양(ap-south-1, 뭄바이) 유럽(eu-west-3, 파리) 남아메리카(sa-east-1, 상파울루) 아시아 태평양(ap-northeast-2, 서울) 유럽(eu-west-2, 런던) 아시아 태평양(ap-northeast-1, 도쿄) 미국 서부(us-west-1, 캘리포니아 북부) 캐나다(ca-central-1, 중앙) 중국(베이징)(cn-north-1) 중국(닝샤)(cn-northwest-1) 아시아 태평양(하이데라바드)(ap-south-2), 아시아 태평양(말레이시아)(ap-southeast-5), 아시아 태평양(태국)(ap-southeast-7), 멕시코(중부)(mx-central-1), 아시아 태평양(타이베이)(ap-east-2), 캐나다 서부(캘거리)(ca-west-1), 유럽(스페인)(eu-south-2), 중동(바레인)(me-south-1), 아시아 태평양(자카르타)(ap-southeast-3), 아프리카(케이프타운)(af-south-1), 중동(UAE)(me-central-1), 아시아 태평양(홍콩)(ap-east-1), 아시아 태평양(오사카)(ap-northeast-3), 아시아 태평양(멜버른)(ap-southeast-4), 유럽(밀라노)(eu-south-1), 이스라엘(텔아비브)(il-central-1), 유럽(취리히)(eu-central-2) 및 아시아 태평양(뉴질랜드)(ap-southeast-6)

다음은 Amazon MSK Replicator의 몇 가지 일반적인 용도입니다.
+ 다중 리전 스트리밍 애플리케이션 빌드: 사용자 지정 솔루션을 설정하지 않고도 복원력을 높이기 위해 가용성이 높고 내결함성이 뛰어난 스트리밍 애플리케이션을 빌드합니다.
+ 데이터 액세스 지연 시간 단축: 다양한 지리적 리전의 소비자에게 지연 시간이 더 짧은 데이터 액세스를 제공합니다.
+ 파트너에게 데이터 배포: 하나의 Apache Kafka 클러스터에서 여러 Apache Kafka 클러스터로 데이터를 복사하여 여러 팀/파트너가 각자의 데이터 복사본을 가질 수 있도록 합니다.
+ 분석을 위한 데이터 집계: 여러 Apache Kafka 클러스터의 데이터를 하나의 클러스터로 복사하여 집계된 실시간 데이터에 대한 인사이트를 간편하게 생성할 수 있습니다.
+ 로컬에서 쓰기, 전역적으로 데이터에 액세스: 한 AWS 리전에서 수행된 쓰기를 다른 리전으로 자동 전파하도록 다중 활성 복제를 설정하여 더 짧은 지연 시간과 비용으로 데이터를 제공합니다.

# Amazon MSK Replicator 작동 방식
<a name="msk-replicator-how-it-works"></a>

MSK Replicator를 시작하려면 대상 클러스터의 AWS 리전에 새 Replicator를 생성해야 합니다. MSK Replicator는 *소스*라는 기본 AWS 리전의 클러스터에서 *대상*이라는 대상 리전의 클러스터로 모든 데이터를 자동으로 복사합니다. 소스 클러스터와 대상 클러스터는 동일하거나 다른 AWS 리전에 있을 수 있습니다. 대상 클러스터가 아직 존재하지 않는 경우 이를 생성해야 합니다.

복제기를 생성하면 MSK Replicator는 대상 클러스터의 AWS 리전에 필요한 모든 리소스를 배포하여 데이터 복제 지연 시간을 최적화합니다. 복제 지연 시간은 MSK 클러스터의 AWS 리전 간 네트워크 거리, 소스 및 대상 클러스터의 처리량 용량, 소스 및 대상 클러스터의 파티션 수 등 여러 요인에 따라 달라집니다. MSK Replicator는 기본 리소스를 자동으로 확장하므로 용량을 모니터링하거나 확장할 필요 없이 온디맨드 방식으로 데이터를 복제할 수 있습니다.

## 데이터 복제
<a name="msk-replicator-data-replication"></a>

기본적으로 MSK Replicator는 소스 클러스터 주제 파티션의 최신 오프셋에서 모든 데이터를 대상 클러스터로 비동기적으로 복사합니다. ‘새 주제 감지 및 복사’ 설정이 켜져 있으면 MSK Replicator에서 새로운 주제 또는 주제 파티션을 자동으로 감지하여 대상 클러스터에 복사합니다. 하지만 Replicator가 대상 클러스터에서 새로운 주제 또는 주제 파티션을 감지하고 생성하는 데 최대 30초가 걸릴 수 있습니다. 대상 클러스터에서 주제가 생성되기 전까지는 소스 주제에 생성된 메시지는 복제되지 않습니다. 또는 주제의 기존 메시지를 대상 클러스터에 복제하려는 경우 소스 클러스터 주제 파티션의 가장 빠른 오프셋에서 복제를 시작하도록 [생성 중 Replicator를 구성할](msk-replicator-prepare-cluster.md) 수 있습니다.

MSK Replicator는 데이터를 저장하지 않습니다. 데이터는 소스 클러스터에서 소비되고, 인메모리로 버퍼링되고, 대상 클러스터에 작성됩니다. 버퍼는 데이터가 성공적으로 작성되거나 재시도 후 실패할 때 자동으로 지워집니다. MSK Replicator와 클러스터 간의 모든 통신 및 데이터는 항상 전송 중에 암호화됩니다. `DescribeClusterV2`, `CreateTopic`와 같은 모든 MSK Replicator API 호출`DescribeTopicDynamicConfiguration`은 AWS CloudTrail에서 캡처됩니다. MSK 브로커 로그도 동일하게 반영합니다.

MSK Replicator는 Replicator Factor가 3인 대상 클러스터에 주제를 생성합니다. 필요한 경우 대상 클러스터에서 직접 복제 인수를 수정할 수 있습니다.

## 메타데이터 복제
<a name="msk-replicator-metadata-replication"></a>

MSK Replicator는 소스 클러스터에서 대상 클러스터로의 메타데이터 복사도 지원합니다. 메타데이터에는 주제 구성, 액세스 제어 목록(ACL), 소비자 그룹 오프셋이 포함되어 있습니다. 데이터 복제와 마찬가지로 메타데이터 복제도 비동기적으로 이루어집니다. 성능을 높이기 위해 MSK Replicator는 메타데이터 복제보다 데이터 복제에 우선순위를 둡니다.

다음 표는 MSK Replicator에서 복사하는 액세스 제어 목록(ACL) 목록입니다.


| 연산 | 연구 | 허용되는 API | 
| --- | --- | --- | 
|  Alter  |  Topic  |  CreatePartitions  | 
|  AlterConfigs  |  Topic  |  AlterConfigs  | 
|  생성  |  Topic  |  CreateTopics, Metadata  | 
|  Delete  |  Topic  |  DeleteRecords, DeleteTopics  | 
|  설명  |  Topic  |  ListOffsets, Metadata, OffsetFetch, OffsetForLeaderEpoch  | 
|  DescribeConfigs  |  Topic  |  DescribeConfigs  | 
|  읽기  |  Topic  |  Fetch, OffsetCommit, TxnOffsetCommit  | 
|  쓰기(거부만 해당)  |  Topic  |  Produce, AddPartitionsToTxn  | 

MSK Replicator는 리소스 유형 주제에 대해서만 LITERAL 패턴 유형 ACL을 복사합니다. PREFIXED 패턴 유형 ACL 및 기타 리소스 유형 ACL은 복사되지 않습니다. 또한 MSK Replicator는 대상 클러스터에서 ACL을 삭제하지 않습니다. 소스 클러스터에서 ACL을 삭제하는 경우 대상 클러스터에서도 동시에 삭제해야 합니다. Kafka ACL 리소스, 패턴 및 작업에 대한 자세한 내용은 [https://kafka.apache.org/documentation/\$1security\$1authz\$1cli](https://kafka.apache.org/documentation/#security_authz_cli)를 참조하세요.

MSK Replicator는 IAM 액세스 제어에서 사용하지 않는 Kafka ACL만 복제합니다. 클라이언트가 IAM 액세스 제어를 사용하여 MSK 클러스터를 읽고 쓰는 경우 원활한 장애 조치를 위해 대상 클러스터에서 관련 IAM 정책을 구성해야 합니다. 이는 접두사 및 동일한 주제 이름 복제 구성 모두에 대해서도 마찬가지입니다.

소비자 그룹 오프셋 동기화의 일환으로 MSK Replicator는 스트림의 팁(주제 파티션의 끝)에 가까운 위치에서 읽고 있는 소스 클러스터의 소비자를 위해 최적화합니다. 소비자 그룹이 소스 클러스터에서 지연되는 경우 소스에 비해 대상의 해당 소비자 그룹 지연이 더 높을 수 있습니다. 즉, 대상 클러스터로의 장애 조치 후 소비자는 더 많은 중복 메시지를 재처리합니다. 이 지연을 줄이려면 소스 클러스터의 소비자가 스트림의 팁(주제 파티션의 끝)을 파악하여 이 팁에서 소비를 시작해야 합니다. 소비자가 소비를 시작하면 MSK Replicator가 지연을 자동으로 줄입니다.

![\[MSK Replicator 소스 및 대상 클러스터\]](http://docs.aws.amazon.com/ko_kr/msk/latest/developerguide/images/msk-replicator-diagram.png)


## 주제 이름 구성
<a name="msk-replicator-topic-name-configuration"></a>

MSK Replicator에는 *접두사*(기본값) 또는 *동일한* 주제 이름 복제라는 두 가지 주제 이름 구성 모드가 있습니다.

**접두사 주제 이름 복제**  
기본적으로 MSK Replicator는 소스 클러스터 주제 이름에 자동 생성된 접두사(예: `<sourceKafkaClusterAlias>.topic`)를 추가하여 대상 클러스터에 새로운 주제를 생성합니다. 이는 대상 클러스터의 복제된 주제를 다른 주제와 구분하고 클러스터 간에 데이터가 순환 복제되는 것을 방지하기 위한 것입니다.

예를 들어 MSK Replicator는 소스 클러스터에서 ‘topic’ 이름이 들어간 주제의 데이터를 <sourceKafkaClusterAlias >.topic이라는 대상 클러스터의 새로운 주제로 복제합니다. `DescribeReplicator` API 또는 MSK 콘솔의 **Replicator 세부 정보 페이지**를 사용하여 **sourceKafkaClusterAlias** ​​필드 아래에서 대상 클러스터의 주제 이름에 추가되는 접두사를 찾을 수 있습니다. 대상 클러스터의 접두사는 <sourceKafkaClusterAlias>입니다.

소비자가 대기 클러스터에서 처리를 안정적으로 다시 시작할 수 있도록 하려면 와일드카드 연산자 `.*`를 사용하여 주제의 데이터를 읽도록 소비자를 구성해야 합니다. 예를 들어 소비자는 두 AWS 리전 모두에서 `*topic1`를 사용하여를 사용해야 합니다. 이 예에는 `footopic1`과 같은 주제도 포함되므로 필요에 따라 와일드카드 연산자를 조정하세요.

활성-활성 클러스터 설정과 같이 대상 클러스터의 별도의 주제에 Replicator 데이터를 유지하려는 경우 접두사를 추가하는 MSK Replicator를 사용해야 합니다.

**동일한 주제 이름 복제**  
기본 설정의 대안으로 Amazon MSK Replicator를 사용하면 주제 복제가 동일한 주제 이름 복제로 설정된 Replicator를 생성할 수 있습니다(콘솔에 **동일한 주제 이름 유지**). 대상 MSK 클러스터가 있는 AWS 리전에서 새 Replicator를 생성할 수 있습니다. 이름이 동일한 복제된 주제를 사용하면 복제된 주제를 읽도록 클라이언트를 재구성하지 않아도 됩니다.

동일한 주제 이름을 복제(콘솔에서 **동일한 주제 이름 유지**)하면 다음과 같은 이점이 있습니다.
+ 복제 프로세스 중에 동일한 주제 이름을 유지하면서 무한 복제 반복의 위험을 자동으로 방지할 수 있습니다.
+ 복제된 주제에서 읽도록 클라이언트를 재구성하지 않아도 되므로 다중 클러스터 스트리밍 아키텍처를 더 간단하게 설정하고 운영할 수 있습니다.
+ 액티브-패시브 클러스터 아키텍처의 경우 동일한 주제 이름 복제 기능은 장애 조치 프로세스도 간소화하므로 주제 이름 변경이나 클라이언트 재구성 없이 애플리케이션이 대기 클러스터로의 장애 조치를 원활하게 수행할 수 있습니다.
+ 데이터 집계 또는 중앙 집중식 분석을 위해 여러 MSK 클러스터의 데이터를 단일 클러스터로 더 쉽게 통합하는 데 사용할 수 있습니다. 이렇게 하려면 각 소스 클러스터와 동일한 대상 클러스터에 대해 별도의 Replicator를 생성해야 합니다.
+ 대상 클러스터에서 동일한 이름의 주제로 데이터를 복제하여 한 MSK 클러스터에서 다른 MSK 클러스터로의 데이터 마이그레이션을 간소화할 수 있습니다.

Amazon MSK Replicator는 Kafka 헤더를 사용하여 데이터가 시작된 주제로 다시 복제되는 것을 자동으로 방지하므로 복제 중에 무한 주기의 위험이 없습니다. 헤더는 각 Kafka 메시지에 키, 값 및 타임스탬프와 함께 포함될 수 있는 키-값 페어입니다. MSK Replicator는 복제되는 각 레코드의 헤더에 소스 클러스터 및 주제에 대한 식별자를 포함합니다. MSK Replicator는 헤더 정보를 사용하여 무한 복제 반복을 방지합니다. 클라이언트가 복제된 데이터를 예상대로 읽을 수 있는지 확인해야 합니다.

# 튜토리얼: Amazon MSK Replicator에 대한 소스 및 대상 클러스터 설정
<a name="msk-replicator-getting-started"></a>

이 자습서에서는 동일한 AWS 리전 또는 다른 AWS 리전에서 소스 클러스터와 대상 클러스터를 설정하는 방법을 보여줍니다. 그런 다음 해당 클러스터를 사용하여 Amazon MSK Replicator를 생성합니다.

# Amazon MSK 소스 클러스터 준비
<a name="msk-replicator-prepare-cluster"></a>

MSK Replicator를 위해 이미 생성된 MSK 소스 클러스터가 있는 경우 이 섹션에 설명된 요구 사항을 충족하는지 확인하세요. 그렇지 않으면 다음 단계에 따라 MSK 프로비저닝 또는 서버리스 소스 클러스터를 생성합니다.

리전 간 및 동일 리전의 MSK Replicator 소스 클러스터를 생성하는 프로세스도 유사합니다. 다음 절차에서 차이점을 설명합니다.

1. 소스 리전에서 [IAM 액세스 제어가 켜져 있는](create-iam-access-control-cluster-in-console.md) MSK 프로비저닝 클러스터 또는 서버리스 클러스터를 생성합니다. 소스 클러스터에는 최소 3개의 브로커가 있어야 합니다.

1. 리전 간 MSK Replicator의 경우 소스가 프로비저닝 클러스터일 때 IAM 액세스 제어 체계에 대해 다중 VPC 프라이빗 연결을 사용하도록 설정하여 구성합니다. 다중 VPC가 활성화된 경우에는 인증되지 않은 인증 유형이 지원되지 않는다는 점에 유의하세요. 다른 인증 체계(mTLS 또는 SASL/SCRAM)를 위해 다중 VPC 프라이빗 연결을 설정할 필요는 없습니다. MSK 클러스터에 연결하는 다른 클라이언트에 대해 mTLS 또는 SASL/SCRAM 인증 체계를 동시에 사용할 수 있습니다. 콘솔 클러스터 세부 정보 **네트워크 설정**에서 또는 `UpdateConnectivity` API를 사용하여 다중 VPC 프라이빗 연결을 구성할 수 있습니다. [클러스터 소유자가 다중 VPC 활성화](mvpc-cluster-owner-action-turn-on.md)를 참조하세요. 소스 클러스터가 MSK 서버리스 클러스터인 경우 다중 VPC 프라이빗 연결을 켤 필요는 없습니다.

   동일 지역 MSK Replicator의 경우 MSK 소스 클러스터는 다중 VPC 프라이빗 연결이 필요하지 않으며 다른 클라이언트가 인증되지 않은 인증 유형을 사용하여 클러스터에 계속 액세스할 수 있습니다.

1. 리전 간 MSK Replicator의 경우 리소스 기반 권한 정책을 소스 클러스터에 연결해야 합니다. 이렇게 하면 MSK가 해당 클러스터에 연결하여 데이터를 복제할 수 있습니다. 아래 CLI 또는 AWS 콘솔 절차를 사용하여이 작업을 수행할 수 있습니다. [Amazon MSK 리소스 기반 정책](security_iam_service-with-iam.md)도 참조하세요. 동일 리전의 MSK Replicator의 경우 이 단계를 수행할 필요가 없습니다.

------
#### [ Console: create resource policy ]

다음 JSON으로 소스 클러스터 정책을 업데이트합니다. 자리 표시자를 소스 클러스터의 ARN으로 변경합니다.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "Service": [
                "kafka.amazonaws.com"
            ]
        },
        "Action": [
            "kafka:CreateVpcConnection",
            "kafka:GetBootstrapBrokers",
            "kafka:DescribeClusterV2"
        ],
        "Resource": "arn:aws:kafka:us-east-1:123456789012:cluster/myCluster/abcd1234-5678-90ab-cdef-1234567890ab-1"
    }
  ]
}
```

클러스터 세부 정보 페이지의 **작업** 메뉴에서 **클러스터 정책 편집** 옵션을 사용합니다.

![\[콘솔에서 클러스터 정책 편집\]](http://docs.aws.amazon.com/ko_kr/msk/latest/developerguide/images/edit-cluster-policy.png)


------
#### [ CLI: create resource policy ]

참고: AWS 콘솔을 사용하여 소스 클러스터를 생성하고 새 IAM 역할을 생성하는 옵션을 선택하면가 필요한 신뢰 정책을 역할에 AWS 연결합니다. MSK가 기존 IAM 역할을 사용하도록 하거나 직접 역할을 생성하는 경우 다음 신뢰 정책을 해당 역할에 연결하여 MSK Replicator가 해당 역할을 맡을 수 있도록 하세요. 역할의 신뢰 관계를 수정하는 방법에 대한 자세한 내용은 [역할 수정](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html)을 참조하세요.

1. 이 명령을 사용하여 MSK 클러스터 정책의 현재 버전을 가져옵니다. 자리 표시자를 실제 클러스터 ARN으로 변경합니다.

   ```
   aws kafka get-cluster-policy —cluster-arn <Cluster ARN>
   {
   "CurrentVersion": "K1PA6795UKM GR7",
   "Policy": "..."
   }
   ```

1. 리소스 기반 정책을 생성하여 MSK Replicator가 소스 클러스터에 액세스할 수 있도록 허용합니다. 다음 구문을 템플릿으로 사용하여 자리 표시자를 실제 소스 클러스터 ARN으로 변경합니다.

   ```
   aws kafka put-cluster-policy --cluster-arn "<sourceClusterARN>" --policy '{
   "Version": "2012-10-17", 		 	 	 
   "Statement": [
   {
   "Effect": "Allow",
   "Principal": {
   "Service": [
   "kafka.amazonaws.com"
   ]
   },
   "Action": [
   "kafka:CreateVpcConnection",
   "kafka:GetBootstrapBrokers",
   "kafka:DescribeClusterV2"
   ],
   "Resource": "<sourceClusterARN>"
   }
   ]
   ```

------

# Amazon MSK 대상 클러스터 준비
<a name="msk-replicator-prepare-target-cluster"></a>

IAM 액세스 제어가 켜져 있는 MSK 대상 클러스터(프로비저닝 또는 서버리스)를 생성합니다. 대상 클러스터는 다중 VPC 프라이빗 연결이 켜져 있지 않아도 됩니다. 대상 클러스터는 소스 클러스터와 동일한 AWS 리전 또는 다른 리전에 있을 수 있습니다. 소스 클러스터와 대상 클러스터는 모두 동일한 AWS 계정에 있어야 합니다. 대상 클러스터에는 최소 3개의 브로커가 있어야 합니다.

# 튜토리얼: Amazon MSK Replicator 생성
<a name="msk-replicator-create"></a>

소스 및 대상 클러스터를 설정한 후 해당 클러스터를 사용하여 Amazon MSK Replicator를 생성할 수 있습니다. Amazon MSK Replicator를 생성하기 전에 먼저 권한([MSK Replicator를 생성하는 데 필요한 IAM 권한](msk-replicator-requirements.md#replicator-role-permissions-successful))이 있는지 확인합니다.

**Contents**
+ [Amazon MSK Replicator를 생성하기 위한 고려 사항](msk-replicator-requirements.md)
  + [MSK Replicator를 생성하는 데 필요한 IAM 권한](msk-replicator-requirements.md#replicator-role-permissions-successful)
  + [MSK Replicator에 대해 지원되는 클러스터 유형 및 버전](msk-replicator-supported-clusters-versions.md)
  + [지원되는 MSK Serverless 클러스터 구성](msk-replicator-serverless-requirements.md)
    + [클러스터 구성 변경 사항](msk-replicator-serverless-requirements.md#msk-replicator-config-changes)
+ [대상 클러스터 리전에서 AWS 콘솔을 사용하여 복제기 생성](msk-replicator-create-console.md)
  + [소스 클러스터 선택](msk-replicator-create-console.md#msk-replicator-create-console-choose-source)
  + [대상 클러스터 선택](msk-replicator-create-console.md#msk-replicator-create-console-choose-target)
  + [복제기 설정 및 권한 구성](msk-replicator-create-console.md#msk-replicator-create-settings)

# Amazon MSK Replicator를 생성하기 위한 고려 사항
<a name="msk-replicator-requirements"></a>

다음 섹션에서는 MSK Replicator 기능을 사용하기 위한 사전 조건, 지원되는 구성 및 모범 사례를 간략히 소개합니다. 필요한 권한, 클러스터 호환성 및 서버리스별 요구 사항과 생성 후 Replicator 관리에 대한 지침을 다룹니다.

## MSK Replicator를 생성하는 데 필요한 IAM 권한
<a name="replicator-role-permissions-successful"></a>

다음은 MSK Replicator를 생성하는 데 필요한 IAM 정책의 예입니다. 이 `kafka:TagResource` 작업은 MSK Replicator를 생성할 때 태그가 제공된 경우에만 필요합니다. Replicator IAM 정책은 클라이언트에 해당하는 IAM 역할에 연결되어야 합니다. 권한 부여 정책 생성에 대한 자세한 내용은 [권한 부여 정책 생성](https://docs.aws.amazon.com/msk/latest/developerguide/iam-access-control.html#create-iam-access-control-policies)을 참조하세요.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "MSKReplicatorIAMPassRole",
      "Effect": "Allow",
      "Action": "iam:PassRole",
      "Resource": "arn:aws:iam::123456789012:role/MSKReplicationRole",
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "kafka.amazonaws.com"
        }
      }
    },
    {
      "Sid": "MSKReplicatorServiceLinkedRole",
      "Effect": "Allow",
      "Action": "iam:CreateServiceLinkedRole",
      "Resource": "arn:aws:iam::123456789012:role/aws-service-role/kafka.amazonaws.com/AWSServiceRoleForKafka*"
    },
    {
      "Sid": "MSKReplicatorEC2Actions",
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeSubnets",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeVpcs",
        "ec2:CreateNetworkInterface"
      ],
      "Resource": [
        "arn:aws:ec2:us-east-1:123456789012:subnet/subnet-0abcd1234ef56789",
        "arn:aws:ec2:us-east-1:123456789012:security-group/sg-0123abcd4567ef89",
        "arn:aws:ec2:us-east-1:123456789012:network-interface/eni-0a1b2c3d4e5f67890",
        "arn:aws:ec2:us-east-1:123456789012:vpc/vpc-0a1b2c3d4e5f67890"
      ]
    },
    {
      "Sid": "MSKReplicatorActions",
      "Effect": "Allow",
      "Action": [
        "kafka:CreateReplicator",
        "kafka:TagResource"
      ],
      "Resource": [
        "arn:aws:kafka:us-east-1:123456789012:cluster/myCluster/abcd1234-56ef-78gh-90ij-klmnopqrstuv",
        "arn:aws:kafka:us-east-1:123456789012:replicator/myReplicator/wxyz9876-54vu-32ts-10rq-ponmlkjihgfe"
      ]
    }
  ]
}
```

------

다음은 복제기를 설명하는 IAM 정책의 예입니다. `kafka:DescribeReplicator` 작업과 `kafka:ListTagsForResource` 작업 중 하나가 필요하지만 둘 다 필요한 것은 아닙니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "kafka:DescribeReplicator",
                "kafka:ListTagsForResource"
            ],
            "Resource": "*"
        }
    ]
}
```

------

# MSK Replicator에 대해 지원되는 클러스터 유형 및 버전
<a name="msk-replicator-supported-clusters-versions"></a>

지원되는 인스턴스 유형, Kafka 버전, 네트워크 구성에 대한 요구 사항입니다.
+ MSK Replicator는 소스 및 대상 클러스터로 MSK 프로비저닝된 클러스터와 MSK 서버리스 클러스터를 모두 조합하여 지원합니다. 현재 MSK Replicator에서는 다른 유형의 Kafka 클러스터를 지원하지 않습니다.
+ MSK 서버리스 클러스터는 IAM 액세스 제어가 필요하고, Apache Kafka ACL 복제를 지원하지 않으며 주제별 구성 복제를 제한적으로 지원합니다. [MSK Serverless란 무엇인가요?](serverless.md)을(를) 참조하세요.
+ MSK Replicator는 소스 클러스터와 대상 클러스터가 같은 리전에 있는지 또는 다른 AWS 리전에 있는지와 관계없이 Apache Kafka 2.7.0 이상을 실행하는 클러스터에서만 지원됩니다.
+ MSK Replicator는 인스턴스 유형이 m5.large 이상인 클러스터를 지원합니다. t3.small 클러스터는 지원되지 않습니다.
+ MSK 프로비저닝 클러스터와 함께 MSK Replicator를 사용하는 경우 소스 및 대상 클러스터 모두에 최소 3개의 브로커가 필요합니다. 두 개의 가용성 영역에 있는 클러스터 간에 데이터를 복제할 수 있지만 해당 클러스터에는 최소 4개의 브로커가 필요합니다.
+ 소스 및 대상 MSK 클러스터는 모두 동일한 AWS 계정에 있어야 합니다. 다른 계정의 클러스터 간 복제는 지원되지 않습니다.
+ 소스 및 대상 MSK 클러스터가 서로 다른 AWS 리전(교차 리전)에 있는 경우 MSK Replicator를 사용하려면 소스 클러스터에 IAM 액세스 제어 방법에 대해 다중 VPC 프라이빗 연결이 켜져 있어야 합니다.

  교차 AWS 리전 MSK 복제에 대한 소스 클러스터의 다른 인증 방법에는 다중 VPC가 필요하지 않습니다.

  동일한 AWS 리전에 있는 클러스터 간에 데이터를 복제하는 경우에도 다중 VPC가 필요하지 않습니다. [단일 리전에서의 Amazon MSK 다중 VPC 프라이빗 연결](aws-access-mult-vpc.md)을(를) 참조하세요.
+ 동일한 주제 이름 복제(콘솔에서 **동일한 주제 이름 유지**)를 위해서는 Kafka 버전 2.8.1 이상을 실행하는 MSK 클러스터가 필요합니다.
+ 동일한 주제 이름 복제(콘솔에서 **동일한 주제 이름 유지**) 구성의 경우 주기적 복제 위험을 방지하기 위해 MSK Replicator에서 생성하는 헤더를 변경하지 마세요(`__mskmr`).

# 지원되는 MSK Serverless 클러스터 구성
<a name="msk-replicator-serverless-requirements"></a>
+ MSK 서버리스는 주제 생성 중에 MSK 서버리스 대상 클러스터에 대한 주제 구성(`cleanup.policy`, `compression.type`, `max.message.bytes`, `retention.bytes`, `retention.ms`)의 복제를 지원합니다.
+ MSK 서버리스는 주제 구성 동기화 중에 `compression.type`, `max.message.bytes`, `retention.bytes`, `retention.ms` 주제 구성만 지원합니다.
+ 복제기는 대상 MSK 서버리스 클러스터에서 83개의 압축된 파티션을 사용합니다. 대상 MSK 서버리스 클러스터에 충분한 수의 압축된 파티션이 있는지 확인합니다. [MSK 서버 규모 조정](limits.md#serverless-quota)을(를) 참조하세요.

## 클러스터 구성 변경 사항
<a name="msk-replicator-config-changes"></a>
+ MSK Replicator를 생성한 후에는 계층형 스토리지를 켜거나 끄지 않는 것이 좋습니다. 대상 클러스터가 계층화되지 않은 경우 소스 클러스터가 계층화되어 있는지 여부에 관계없이 MSK는 계층화된 스토리지 구성을 복사하지 않습니다. 복제기가 생성된 후 대상 클러스터에서 계층형 스토리지를 켜는 경우 복제기를 다시 생성해야 합니다. 계층화되지 않은 클러스터에서 계층화된 클러스터로 데이터를 복사하려는 경우 주제 구성을 복사해서는 안 됩니다. [기존 주제에서 계층형 스토리지 활성화 및 비활성화](https://docs.aws.amazon.com/msk/latest/developerguide/msk-enable-disable-topic-tiered-storage-cli.html)를 참조하세요.
+ MSK Replicator를 생성한 후에는 클러스터 구성 설정을 변경하지 마세요. 클러스터 구성 설정은 MSK Replicator를 생성하는 동안 검증됩니다. MSK Replicator와 관련된 문제를 방지하려면 MSK Replicator가 생성된 후에는 다음 설정을 변경하지 마세요.
  + MSK 클러스터를 t3 인스턴스 유형으로 변경합니다.
  + 서비스 실행 역할 권한을 변경합니다.
  + MSK 다중 VPC 프라이빗 연결을 비활성화합니다.
  + 연결된 클러스터 리소스 기반 정책을 변경합니다.
  + 클러스터 보안 그룹 규칙을 변경합니다.

# 대상 클러스터 리전에서 AWS 콘솔을 사용하여 복제기 생성
<a name="msk-replicator-create-console"></a>

다음 섹션에서는 Replicator를 생성하기 위한 단계별 콘솔 워크플로를 설명합니다.

**Replicator 세부 정보**

1. 대상 MSK 클러스터가 위치한 AWS 리전에서 [https://console.aws.amazon.com/msk/home?region=us-east-1\$1/home/](https://console.aws.amazon.com/msk/home?region=us-east-1#/home/) Amazon MSK 콘솔을 엽니다.

1. 계정의 복제기 목록을 표시하려면 **복제기**를 선택합니다.

1. **복제기 생성**을 선택합니다.

1. **복제기 세부 정보** 창에서 새로운 복제기에 고유한 이름을 지정합니다.

## 소스 클러스터 선택
<a name="msk-replicator-create-console-choose-source"></a>

소스 클러스터에는 대상 MSK 클러스터로 복사하려는 데이터가 포함되어 있습니다.

1. **소스 클러스터** 창에서 소스 클러스터가 있는 AWS 리전을 선택합니다.

   **MSK 클러스터**로 이동하여 **클러스터** 세부 정보 ARN을 확인하여 클러스터의 리전을 조회할 수 있습니다. 리전 이름은 ARN 문자열에 포함되어 있습니다. 다음 예제 ARN에서 `ap-southeast-2`는 클러스터 리전입니다.

   ```
   arn:aws:kafka:ap-southeast-2:123456789012:cluster/cluster-11/eec93c7f-4e8b-4baf-89fb-95de01ee639c-s1
   ```

1. 소스 클러스터의 ARN을 입력하거나 소스 클러스터를 찾아 선택합니다.

1. 소스 클러스터에 대한 서브넷을 선택합니다.

   콘솔에 소스 클러스터의 리전에서 사용할 수 있는 서브넷이 표시되어 선택할 수 있습니다. 최소 2개의 서브넷을 선택해야 합니다. 동일 리전 MSK Replicator의 경우 소스 클러스터에 액세스하도록 설정한 서브넷과 대상 클러스터에 액세스하도록 설정한 서브넷은 동일한 가용 영역에 있어야 합니다.

1. MSK Replicator가 소스 클러스터에 액세스할 수 있는 보안 그룹을 선택합니다.
   + 크로스 리전 복제(CRR)의 경우 소스 클러스터의 보안 그룹을 제공할 필요가 없습니다.
   + 동일 리전 복제(SRR)의 경우 Amazon EC2 콘솔(https://console.aws.amazon.com/ec2/)로 이동하여 소스 클러스터의 보안 그룹으로의 트래픽을 허용하는 아웃바운드 규칙이 Replicator에 제공할 보안 그룹에 있는지 확인합니다. 또한 소스에 제공된 Replicator 보안 그룹으로부터의 트래픽을 허용하는 인바운드 규칙이 있는지 소스 클러스터의 보안 그룹에 확인합니다.

      

**소스 클러스터의 보안 그룹에 인바운드 규칙을 추가하려면**

     1.  AWS 콘솔에서 클러스터 **이름을** 선택하여 소스 클러스터의 세부 정보로 이동합니다.

     1. **속성** 탭을 선택한 다음 **네트워크 설정** 창까지 아래로 스크롤하여 적용된 **보안 그룹**의 이름을 선택합니다.

     1. 인바운드 규칙으로 이동하여 **인바운드 규칙 편집**을 선택합니다.

     1. **규칙 추가**를 선택합니다.

     1. 새 규칙의 **유형** 열에서 **사용자 지정 TCP**를 선택합니다.

     1. **포트 범위** 열에 `9098`을 입력합니다. MSK Replicator는 IAM 액세스 제어를 사용하여 포트 9098을 사용하는 클러스터에 연결합니다.

     1. **소스** 열에 소스 클러스터에 대한 Replicator 생성 시 제공할 보안 그룹의 이름(MSK 소스 클러스터의 보안 그룹과 동일할 수 있음)을 입력한 다음, **규칙 저장**을 선택합니다.

      

**소스에 제공된 Replicator의 보안 그룹에 아웃바운드 규칙을 추가하려면:**

     1. Amazon EC2용 AWS 콘솔에서 소스에 대한 복제기 생성 중에 제공할 보안 그룹으로 이동합니다.

     1. 아웃바운드 규칙으로 이동하여 **아웃바운드 규칙 편집**을 선택합니다.

     1. **규칙 추가**를 선택합니다.

     1. 새 규칙의 **유형** 열에서 **사용자 지정 TCP**를 선택합니다.

     1. **포트 범위** 열에 `9098`을 입력합니다. MSK Replicator는 IAM 액세스 제어를 사용하여 포트 9098을 사용하는 클러스터에 연결합니다.

     1. **소스** 열에 MSK 소스 클러스터의 보안 그룹 이름을 입력한 다음, **규칙 저장**을 선택합니다.

**참고**  
또는 보안 그룹을 사용하여 트래픽을 제한하지 않으려면 모든 트래픽을 허용하는 인바운드 및 아웃바운드 규칙을 추가할 수 있습니다.  
1. **규칙 추가**를 선택합니다.  
2. **유형** 열에서 **모든 트래픽**을 선택합니다.  
3. 소스 열에 `0.0.0.0/0`을 입력한 다음 **규칙 저장**을 선택합니다.

## 대상 클러스터 선택
<a name="msk-replicator-create-console-choose-target"></a>

대상 클러스터는 소스 데이터가 복사되는 MSK 프로비저닝 클러스터 또는 서버리스 클러스터입니다.

**참고**  
MSK Replicator는 주제 이름에 자동 생성된 접두사를 추가하여 대상 클러스터에 새 주제를 생성합니다. 예를 들어 MSK Replicator는 소스 클러스터의 “`topic`”에 있는 데이터를 `<sourceKafkaClusterAlias>.topic`이라는 대상 클러스터의 새 주제로 복제합니다. 이는 소스 클러스터에서 복제된 데이터가 포함된 주제를 대상 클러스터의 다른 주제와 구분하고 클러스터 간에 데이터가 순환 복제되는 것을 방지하기 위한 것입니다. 대상 클러스터의 주제 이름에 추가될 접두사는 `DescribeReplicator` API 또는 MSK 콘솔의 **복제기 세부 정보 페이지**를 사용하여 **sourceKafkaClusterAlias** 필드 아래에서 찾을 수 있습니다. 대상 클러스터의 접두사는 `<sourceKafkaClusterAlias>`입니다.

1. **대상 클러스터** 창에서 대상 클러스터가 위치한 AWS 리전을 선택합니다.

1. 대상 클러스터의 ARN을 입력하거나 대상 클러스터를 찾아 선택합니다.

1. 대상 클러스터에 대한 서브넷을 선택합니다.

   콘솔에 대상 클러스터의 리전에서 사용할 수 있는 서브넷이 표시되어 선택할 수 있습니다. 최소 2개의 서브넷을 선택합니다.

1. MSK Replicator가 대상 클러스터에 액세스할 수 있는 보안 그룹을 선택합니다.

   대상 클러스터의 리전에서 사용할 수 있는 보안 그룹이 표시되어 선택할 수 있습니다. 선택한 보안 그룹이 각 연결과 관련이 있습니다. 보안 그룹 사용에 대한 자세한 내용은 *Amazon VPC 사용 설명서*의 [보안 그룹을 사용하여 AWS 리소스에 대한 트래픽 제어를 참조하세요](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html).
   + 크로스 리전 복제(CRR)의 경우 Amazon EC2 콘솔([https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/))로 이동하여 대상 클러스터의 보안 그룹으로의 트래픽을 허용하는 아웃바운드 규칙이 Replicator에 제공할 보안 그룹에 있는지 확인합니다. 또한 대상 클러스터의 보안 그룹에 대상에 제공된 복제기 보안 그룹으로부터의 트래픽을 허용하는 인바운드 규칙이 있는지 확인합니다.

      

**대상 클러스터의 보안 그룹에 대해 인바운드 규칙을 추가하려면**

     1.  AWS 콘솔에서 클러스터 **이름을** 선택하여 대상 클러스터의 세부 정보로 이동합니다.

     1. **속성** 탭을 선택한 다음, 네트워크 설정 창까지 아래로 스크롤하여 적용된 **보안 그룹**의 이름을 선택합니다.

     1. 인바운드 규칙으로 이동하여 **인바운드 규칙 편집**을 선택합니다.

     1. **규칙 추가**를 선택합니다.

     1. 새 규칙의 **유형** 열에서 **사용자 지정 TCP**를 선택합니다.

     1. **포트 범위** 열에 `9098`을 입력합니다. MSK Replicator는 IAM 액세스 제어를 사용하여 포트 9098을 사용하는 클러스터에 연결합니다.

     1. **소스** 열에 대상 클러스터에 대한 Replicator를 생성하는 동안 제공할 보안 그룹의 이름(MSK 대상 클러스터의 보안 그룹과 동일할 수 있음)을 입력한 다음 **규칙 저장**을 선택합니다.

      

**대상에 대해 제공된 Replicator의 보안 그룹에 아웃바운드 규칙을 추가하려면:**

     1.  AWS 콘솔에서 대상에 대한 복제기 생성 중에 제공할 보안 그룹으로 이동합니다.

     1. **속성** 탭을 선택한 다음, 네트워크 설정 창까지 아래로 스크롤하여 적용된 **보안 그룹**의 이름을 선택합니다.

     1. 아웃바운드 규칙으로 이동하여 **아웃바운드 규칙 편집**을 선택합니다.

     1. **규칙 추가**를 선택합니다.

     1. 새 규칙의 **유형** 열에서 **사용자 지정 TCP**를 선택합니다.

     1. **포트 범위** 열에 `9098`을 입력합니다. MSK Replicator는 IAM 액세스 제어를 사용하여 포트 9098을 사용하는 클러스터에 연결합니다.

     1. **소스** 열에 MSK 대상 클러스터의 보안 그룹 이름을 입력한 다음, **규칙 저장**을 선택합니다.

**참고**  
또는 보안 그룹을 사용하여 트래픽을 제한하지 않으려면 모든 트래픽을 허용하는 인바운드 및 아웃바운드 규칙을 추가할 수 있습니다.  
1. **규칙 추가**를 선택합니다.  
2. **유형** 열에서 **모든 트래픽**을 선택합니다.  
3. 소스 열에 `0.0.0.0/0`을 입력한 다음 **규칙 저장**을 선택합니다.

## 복제기 설정 및 권한 구성
<a name="msk-replicator-create-settings"></a>

1. **복제기 설정** 창에서 허용 및 거부 목록의 정규 표현식을 사용하여 복제할 주제를 지정합니다. 기본적으로 모든 주제가 복제됩니다.
**참고**  
MSK Replicator는 정렬된 순서로 최대 750개의 주제만 복제합니다. 더 많은 주제를 복제해야 하는 경우 별도의 Replicator를 생성하는 것이 좋습니다. 복제기당 750개 이상의 주제에 대한 지원이 필요한 경우 AWS 콘솔 지원 센터로 이동하여 [지원 사례를 생성합니다](https://console.aws.amazon.com/support/home#/). ‘TopicCount’ 지표를 사용하여 복제되는 주제 수를 모니터링할 수 있습니다. [Amazon MSK Standard 브로커 할당량](limits.md#msk-provisioned-quota)을(를) 참조하세요.

1. 기본적으로 MSK Replicator는 선택한 주제의 *최신*(가장 최근) 오프셋에서 복제를 시작합니다. 또는 주제에 기존 데이터를 복제하려는 경우 선택한 주제의 *가장 빠른*(가장 오래된) 오프셋에서 복제를 시작할 수 있습니다. Replicator가 생성된 후에는 이 설정을 변경할 수 없습니다. 이 설정은 [https://docs.aws.amazon.com/msk/1.0/apireference-replicator/v1-replicators.html#CreateReplicator](https://docs.aws.amazon.com/msk/1.0/apireference-replicator/v1-replicators.html#CreateReplicator) 요청 및 [https://docs.aws.amazon.com/msk/1.0/apireference-replicator/v1-replicators-replicatorarn.html#DescribeReplicator](https://docs.aws.amazon.com/msk/1.0/apireference-replicator/v1-replicators-replicatorarn.html#DescribeReplicator) 응답 API의 [https://docs.aws.amazon.com/msk/1.0/apireference-replicator/v1-replicators-replicatorarn.html#v1-replicators-replicatorarn-model-replicationstartingposition](https://docs.aws.amazon.com/msk/1.0/apireference-replicator/v1-replicators-replicatorarn.html#v1-replicators-replicatorarn-model-replicationstartingposition) 필드에 해당합니다.

1. 다음과 같은 주제 이름 구성을 선택합니다.
   + `PREFIXED` 주제 이름 복제(콘솔의 **주제 이름에 접두사 추가**): 기본 설정입니다. MSK Replicator는 소스 클러스터에서 이름이 `<sourceKafkaClusterAlias>.topic1`인 대상 클러스터의 새 주제로 ‘topic1’을 복제합니다.
   + 동일한 주제 이름 복제(콘솔에 **동일한 주제 이름 유지**): 소스 클러스터의 주제는 대상 클러스터에 동일한 주제 이름으로 복제됩니다.

   이 설정은 `CreateReplicator` 요청 및 `DescribeReplicator` 응답 API의 `TopicNameConfiguration` 필드에 해당합니다. [Amazon MSK Replicator 작동 방식](msk-replicator-how-it-works.md)을(를) 참조하세요.
**참고**  
MSK Replicator는 기본적으로 주제 이름에 자동 생성된 접두사를 추가하여 대상 클러스터에 새 주제를 생성합니다. 이는 소스 클러스터에서 복제된 데이터가 포함된 주제를 대상 클러스터의 다른 주제와 구분하고 클러스터 간에 데이터가 순환 복제되는 것을 방지하기 위한 것입니다. 또는 복제 중에 주제 이름이 유지되도록 동일한 주제 이름 복제(**콘솔에 동일한 주제 이름 유지**)를 사용하여 MSK Replicator를 생성할 수 있습니다. 이 구성을 사용하면 설정 중에 클라이언트 애플리케이션을 재구성할 필요가 줄어들고 다중 클러스터 스트리밍 아키텍처를 더 쉽게 운영할 수 있습니다.

1. 기본적으로 MSK Replicator는 원활한 장애 조치를 위해 주제 구성, 액세스 제어 목록(ACL), 소비자 그룹 오프셋을 포함한 모든 메타데이터를 복사합니다. 장애 조치를 위해 복제기를 생성하지 않는 경우 **추가 설정** 섹션에서 사용 가능한 설정 중 하나 이상을 선택적으로 비활성화할 수 있습니다.
**참고**  
생산자가 대상 클러스터의 복제된 주제에 직접 쓰면 안 되므로 MSK Replicator는 쓰기 ACL을 복제하지 않습니다. 생산자는 장애 조치 후 대상 클러스터의 로컬 주제에 써야 합니다. 세부 정보는 [보조 AWS 리전으로 계획된 장애 조치 수행](msk-replicator-perform-planned-failover.md) 섹션을 참조하세요.

1. **소비자 그룹 복제** 창에서 허용 및 거부 목록의 정규 표현식을 사용하여 복제할 소비자 그룹을 지정합니다. 기본적으로 모든 소비자 그룹이 복제됩니다.

1. **압축** 창에서 대상 클러스터에 쓰여진 데이터를 압축하도록 선택할 수 있습니다(선택 사항). 압축을 사용하려는 경우 원본 클러스터의 데이터와 동일한 압축 방법을 사용하는 것을 권장합니다.

1. **액세스 권한** 패널에서 다음 중 하나를 수행합니다.

   1. **필요한 정책으로 IAM 역할 생성 또는 업데이트**를 선택합니다. MSK 콘솔은 소스 및 대상 MSK 클러스터를 읽고 쓰는 데 필요한 서비스 실행 역할에 필요한 권한과 신뢰 정책을 자동으로 연결합니다.  
![\[MSK 콘솔을 사용하여 복제기 IAM 역할 생성 또는 업데이트\]](http://docs.aws.amazon.com/ko_kr/msk/latest/developerguide/images/msk-replicator-ezCRC.png)

   1. **Amazon MSK가 맡을 수 있는 IAM 역할 중에서 선택**을 선택하여 자체 IAM 역할을 제공합니다. 자체 IAM 정책을 작성하는 대신 `AWSMSKReplicatorExecutionRole` 관리형 IAM 정책을 서비스 실행 역할에 연결하는 것이 좋습니다.

      1. Replicator에서 신뢰 정책의 일부로 아래 JSON과 역할에 연결된 `AWSMSKReplicatorExecutionRole`을 사용하여 소스 및 대상 MSK 클러스터를 읽고 쓰는 데 사용할 IAM 역할을 생성합니다. 신뢰 정책에서 자리 표시자 <yourAccountID>를 실제 계정 ID로 변경합니다.

------
#### [ JSON ]

****  

        ```
        {
            "Version":"2012-10-17",		 	 	 
            "Statement": [
                {
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "kafka.amazonaws.com"
                    },
                    "Action": "sts:AssumeRole",
                    "Condition": {
                        "StringEquals": {
                            "aws:SourceAccount": "<yourAccountID>"
                        }
                    }
                }
            ]
        }
        ```

------

1. **복제기 태그** 창에서 MSK Replicator 리소스에 태그를 할당할 수 있습니다(선택 사항). 자세한 내용은 [Amazon MSK 클러스터에 태그 지정](msk-tagging.md) 단원을 참조하십시오. 리전 간 MSK Replicator의 경우 복제기가 생성되면 태그가 원격 리전으로 자동 동기화됩니다. 복제기를 생성한 후 태그를 변경하면 변경 사항이 원격 리전에 자동으로 동기화되지 않으므로 로컬 복제기와 원격 복제기 참조를 수동으로 동기화해야 합니다.

1. **생성**을 선택합니다.

`kafka-cluster:WriteData` 권한을 제한하려면 [Amazon MSK에 대한 IAM 액세스 제어 작동 방식](https://docs.aws.amazon.com/msk/latest/developerguide/iam-access-control.html#how-to-use-iam-access-control) 의 *권한 부여 정책 생성* 섹션을 참조하세요. 소스 클러스터와 대상 클러스터 모두에 `kafka-cluster:WriteDataIdempotently` 권한을 추가해야 합니다.

MSK Replicator가 성공적으로 생성되고 실행 중 상태로 전환되는 데 약 30분이 소요됩니다.

삭제한 복제기를 대체할 새 MSK Replicator를 생성하면 새 복제기가 최신 오프셋부터 복제를 시작합니다.

MSK Replicator가 실패 상태로 전환된 경우 문제 해결 섹션 [MSK Replicator 문제 해결](msk-replicator-troubleshooting.md)을 참조하세요.

# MSK Replicator 설정 편집
<a name="msk-replicator-edit-settings"></a>

MSK Replicator가 생성된 후에는 소스 클러스터, 대상 클러스터, Replicator 시작 위치 또는 주제 이름 복제 구성을 변경할 수 없습니다. 동일한 주제 이름 복제 구성을 사용하려면 새로운 Replicator를 생성해야 합니다. 그러나 복제할 주제 및 소비자 그룹과 같은 다른 Replicator 설정을 편집할 수 있습니다.

1. 에 로그인 AWS Management Console하고 [https://console.aws.amazon.com/msk/home?region=us-east-1\$1/home/](https://console.aws.amazon.com/msk/home?region=us-east-1#/home/) Amazon MSK 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **Replicator**를 선택하여 계정의 Replicator 목록을 표시하고 편집하려는 MSK Replicator를 선택합니다.

1. **속성** 탭을 선택합니다.

1. **복제기 설정** 섹션에서 **복제기 편집**을 선택합니다.

1. 이러한 설정을 변경하여 MSK Replicator 설정을 편집할 수 있습니다.
   + 허용 및 거부 목록에서 정규 표현식을 사용하여 복제할 주제를 지정합니다. 기본적으로 MSK Replicator는 원활한 장애 조치를 위해 주제 구성, 액세스 제어 목록(ACL), 소비자 그룹 오프셋을 포함한 모든 메타데이터를 복사합니다. 장애 조치를 위해 복제기를 생성하지 않는 경우 **추가 설정** 섹션에서 사용 가능한 설정 중 하나 이상을 선택적으로 비활성화할 수 있습니다.
**참고**  
생산자가 대상 클러스터의 복제된 주제에 직접 쓰면 안 되므로 MSK Replicator는 쓰기 ACL을 복제하지 않습니다. 생산자는 장애 조치 후 대상 클러스터의 로컬 주제에 써야 합니다. 세부 정보는 [보조 AWS 리전으로 계획된 장애 조치 수행](msk-replicator-perform-planned-failover.md) 섹션을 참조하세요.
   + **소비자 그룹 복제**의 경우 허용 및 거부 목록에서 정규 표현식을 사용하여 복제할 소비자 그룹을 지정할 수 있습니다. 기본적으로 모든 소비자 그룹이 복제됩니다. 허용 및 거부 목록이 비어 있으면 소비자 그룹 복제가 비활성화됩니다.
   + **대상 압축 유형**에서 대상 클러스터에 기록되는 데이터를 압축할지 여부를 선택할 수 있습니다. 압축을 사용하려는 경우 원본 클러스터의 데이터와 동일한 압축 방법을 사용하는 것을 권장합니다.

1. 변경 내용을 저장합니다.

   MSK Replicator를 성공적으로 생성하고 실행 상태로 전환하는 데는 약 30분이 소요됩니다. MSK Replicator가 실패 상태로 전환된 경우 문제 해결 섹션 [MSK Replicator 문제 해결](msk-replicator-troubleshooting.md)을 참조하세요.

# MSK Replicator 삭제
<a name="msk-replicator-delete"></a>

MSK Replicator가 생성에 실패한 경우 삭제해야 할 수 있습니다(실패 상태). MSK Replicator가 생성된 후에는 MSK Replicator에 할당된 소스 및 타겟 클러스터를 변경할 수 없습니다. 기존 MSK Replicator를 삭제하고 새로 생성할 수 있습니다. 삭제된 복제기를 대체할 새 MSK Replicator를 생성하면 새 복제기가 최신 오프셋부터 복제를 시작합니다.

1. 소스 클러스터가 위치한 AWS 리전에서에 로그인 AWS Management Console하고 [https://console.aws.amazon.com/msk/home?region=us-east-1\$1/home/](https://console.aws.amazon.com/msk/home?region=us-east-1#/home/) Amazon MSK 콘솔을 엽니다.

1. 탐색 창에서 **복제기**를 선택합니다.

1. MSK Replicator 목록에서 삭제하려는 복제기를 선택하고 **삭제**를 선택합니다.

# 복제 모니터링
<a name="msk-replicator-monitor"></a>

대상 클러스터 리전에서 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)를 사용하여 각 Amazon MSK Replicator의 주제 및 집계 수준에서 `ReplicationLatency`, `MessageLag`, `ReplicatorThroughput`에 대한 지표를 볼 수 있습니다. 지표는 “AWS/Kafka” 네임스페이스의 **ReplicatorName** 아래에 표시됩니다. `ReplicatorFailure`, `AuthError`, `ThrottleTime` 지표를 확인하여 문제를 확인할 수도 있습니다.

MSK 콘솔은 각 MSK Replicator에 대한 CloudWatch 지표의 하위 세트를 표시합니다. 콘솔 **복제기** 목록에서 복제기의 이름을 선택하고 **모니터링** 탭을 선택합니다.

## MSK Replicator 지표
<a name="msk-replicator-metrics"></a>

다음 지표는 MSK Replicator의 성능 또는 연결 지표에 대해 설명합니다.

AuthError 지표는 주제 수준의 인증 오류를 다루지 않습니다. MSK Replicator의 주제 수준 인증 오류를 모니터링하려면 복제기의 ReplicationLatency 지표와 소스 클러스터의 주제 수준 지표인 MessagesInPerSec를 모니터링하세요. 주제의 ReplicationLatency가 0으로 떨어졌지만 주제에 여전히 생성되는 데이터가 있는 경우 이는 복제기에 해당 주제에 대한 인증 문제가 있음을 나타냅니다. 복제기의 서비스 실행 IAM 역할에 주제에 액세스할 수 있는 충분한 권한이 있는지 확인합니다.


****  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/msk/latest/developerguide/msk-replicator-monitor.html)

# 복제를 사용하여 여러 리전에 걸쳐 Kafka 스트리밍 애플리케이션의 복원력 향상
<a name="msk-replicator-increase-resiliency"></a>

MSK Replicator를 사용하여 액티브-액티브 또는 액티브-패시브 클러스터 토폴로지를 설정하여 AWS 리전 간 Apache Kafka 애플리케이션의 복원력을 높일 수 있습니다. 액티브-액티브 설정에서는 두 MSK 클러스터가 모두 읽기 및 쓰기를 적극적으로 제공합니다. 액티브-패시브 설정에서는 한 번에 하나의 MSK 클러스터만 스트리밍 데이터를 적극적으로 서비스하고 다른 클러스터는 대기 상태로 유지됩니다.

## 다중 리전 Apache Kafka 애플리케이션 빌드의 고려 사항
<a name="msk-replication-multi-region-kafka-applications"></a>

소비자는 다운스트림에 영향을 주지 않으면서 중복된 메시지를 재처리할 수 있어야 합니다. MSK Replicator는 대기 클러스터에 중복이 발생할 수 있는 데이터를 최소 한 번 복제합니다. 보조 AWS 리전으로 전환하면 소비자가 동일한 데이터를 두 번 이상 처리할 수 있습니다. MSK Replicator는 더 나은 성능을 위해 소비자 오프셋보다 데이터 복사에 우선 순위를 둡니다. 장애 조치 후 소비자는 이전 오프셋부터 읽기를 시작하므로 중복 처리가 발생할 수 있습니다.

생산자와 소비자는 최소한의 데이터 손실도 감수해야 합니다. MSK Replicator는 데이터를 비동기식으로 복제하므로 기본 AWS 리전에서 오류가 발생하기 시작해도 모든 데이터가 보조 리전에 복제된다는 보장은 없습니다. 복제 대기 시간을 사용하여 보조 리전으로 복사되지 않은 최대 데이터를 결정할 수 있습니다.

## 액티브-액티브 대 액티브-패시브 클러스터 토폴로지 사용
<a name="msk-replicator-active-versus-passive"></a>

액티브-액티브 클러스터 토폴로지는 거의 0에 가까운 복구 시간과 스트리밍 애플리케이션이 여러 AWS 리전에서 동시에 작동할 수 있도록 하는 기능을 제공합니다. 한 리전의 클러스터가 손상되더라도 다른 리전의 클러스터에 연결된 애플리케이션이 데이터를 계속 처리합니다.

액티브-패시브 설정은 한 번에 하나의 AWS 리전에서만 실행할 수 있는 애플리케이션이나 데이터 처리 순서를 세부적으로 제어해야 하는 경우에 적합합니다. 액티브-패시브 설정은 장애 조치 후 스트리밍 데이터를 다시 시작하려면 보조 리전에서 생산자와 소비자를 포함한 전체 액티브-패시브 설정을 시작해야 하므로 액티브-액티브 설정보다 복구 시간이 더 오래 걸립니다.

# 권장 주제 이름 지정 구성을 사용하여 액티브-패시브 Kafka 클러스터 설정 생성
<a name="msk-replicators-active-passive-cluster-setup"></a>

액티브-패시브 설정의 경우 두 AWS 리전에서 생산자, MSK 클러스터 및 소비자(동일한 소비자 그룹 이름)의 유사한 설정을 작동하는 것이 좋습니다. 안정적인 데이터 복제를 보장하려면 두 MSK 클러스터의 읽기 및 쓰기 용량이 동일해야 합니다. 기본 클러스터에서 대기 클러스터로 데이터를 지속적으로 복사하려면 MSK Replicator를 생성해야 합니다. 또한 동일한 AWS 리전에 있는 클러스터의 주제에 데이터를 쓰도록 생산자를 구성해야 합니다.

액티브-패시브 설정의 경우 주제 이름이 동일한 새로운 Replicator를 생성하여(콘솔에서 **동일한 주제 이름 유지**) 기본 리전의 MSK 클러스터에서 보조 리전의 클러스터로 데이터 복제를 시작합니다. 두 AWS 리전에서 각각 부트스트랩 문자열을 사용하여 자체 리전의 클러스터에 연결하는 중복된 생산자 및 소비자 세트를 운영하는 것이 좋습니다. 이렇게 하면 부트스트랩 문자열을 변경할 필요가 없으므로 장애 조치 프로세스가 간소화됩니다. 소비자가 중단한 위치 근처에서 읽도록 하려면 소스 클러스터와 대상 클러스터의 소비자는 동일한 소비자 그룹 ID를 가져야 합니다.

MSK Replicator에 대해 동일한 주제 이름 복제(콘솔에서 **동일한 주제 이름 유지**)를 사용하는 경우 해당 소스 주제와 동일한 이름으로 주제가 복제됩니다.

대상 클러스터에서 클라이언트에 대해 클러스터 수준 설정 및 권한을 구성하는 것이 좋습니다. 액세스 제어 목록을 복사하는 옵션을 선택한 경우 MSK Replicator에서 자동으로 복사하므로 주제 수준 설정과 리터럴 읽기 ACL을 구성할 필요가 없습니다. [메타데이터 복제](msk-replicator-how-it-works.md#msk-replicator-metadata-replication)을(를) 참조하세요.

# 보조 AWS 리전으로 장애 조치
<a name="msk-replicator-when-planned-failover"></a>

Amazon CloudWatch를 사용하여 보조 AWS 리전의 복제 지연 시간을 모니터링하는 것이 좋습니다. 기본 AWS 리전의 서비스 이벤트 중에 복제 지연 시간이 갑자기 증가할 수 있습니다. 지연 시간이 계속 증가하는 경우 AWS 서비스 상태 대시보드를 사용하여 기본 AWS 리전의 서비스 이벤트를 확인합니다. 이벤트가 있는 경우 보조 AWS 리전으로 장애 조치를 수행할 수 있습니다.

# 보조 AWS 리전으로 계획된 장애 조치 수행
<a name="msk-replicator-perform-planned-failover"></a>

계획된 장애 조치를 수행하여 소스 MSK 클러스터가 있는 기본 AWS 리전의 예상치 못한 이벤트에 대해 애플리케이션의 복원력을 테스트할 수 있습니다. 계획된 장애 조치로 인해 데이터가 손실되어서는 안 됩니다.

동일한 주제 이름 복제 구성을 사용하는 경우 다음 단계를 따르세요.

1. 소스 클러스터에 연결하는 모든 생산자와 소비자를 종료합니다.

1. 새 MSK Replicator를 생성하여 보조 리전의 MSK 클러스터에서 기본 리전의 MSK 클러스터로 동일한 주제 이름 복제를 통해 데이터를 복제합니다(콘솔에서 **동일한 주제 이름 유지**). 예기치 않은 이벤트가 종료된 후 기본 리전으로 페일백할 수 있도록 보조 리전에 기록할 데이터를 다시 기본 리전으로 복사하는 데 필요합니다.

1. 보조 AWS 리전의 대상 클러스터에 연결된 생산자 및 소비자를 시작합니다.

접두사 지정된 주제 이름 구성을 사용하는 경우 다음 단계를 따라 장애 조치를 수행합니다.

1. 소스 클러스터에 연결하는 모든 생산자와 소비자를 종료합니다.

1. 새 MSK Replicator를 생성하여 보조 리전의 MSK 클러스터에서 기본 리전의 MSK 클러스터로 데이터를 복제합니다. 예기치 않은 이벤트가 종료된 후 기본 리전으로 페일백할 수 있도록 보조 리전에 기록할 데이터를 다시 기본 리전으로 복사하는 데 필요합니다.

1. 보조 AWS 리전의 대상 클러스터에서 생산자를 시작합니다.

1. 애플리케이션의 메시지 정렬 요구 사항에 따라 다음 탭 중 하나의 단계를 따릅니다.

------
#### [ No message ordering ]

   애플리케이션에 메시지 순서 지정이 필요하지 않은 경우 와일드카드 연산자(예: )를 사용하여 로컬(예: 주제) 및 복제된 주제(예: `<sourceKafkaClusterAlias>.topic`) 모두에서 읽는 보조 AWS 리전에서 소비자를 시작합니다`.*topic`.

------
#### [ Message ordering ]

   애플리케이션에 메시지 정렬이 필요한 경우 대상 클러스터의 복제된 토픽(예: `<sourceKafkaClusterAlias>.topic`)에 대해서만 소비자를 시작하고 로컬 토픽(예: `topic`)에 대해서는 시작하지 마세요.

------

1. 대상 MSK 클러스터에 복제된 주제의 모든 소비자가 모든 데이터 처리를 완료하여 소비자 지연이 0이 되고 처리된 레코드 수 또한 0이 될 때까지 기다립니다. 그런 다음 대상 클러스터에서 복제된 주제에 대한 소비자를 중지합니다. 이 시점에서 소스 MSK 클러스터에서 대상 MSK 클러스터로 복제된 모든 레코드가 소비되었습니다.

1. 대상 MSK 클러스터에서 로컬 주제(예: `topic`)에 대한 소비자를 시작합니다.

# 보조 AWS 리전에 대한 계획되지 않은 장애 조치 수행
<a name="msk-replicator-perform-unplanned-failover"></a>

소스 MSK 클러스터가 있는 기본 AWS 리전에 서비스 이벤트가 있고 트래픽을 대상 MSK 클러스터가 있는 보조 리전으로 일시적으로 리디렉션하려는 경우 계획되지 않은 장애 조치를 수행할 수 있습니다. MSK Replicator가 데이터를 비동기적으로 복제하므로 계획되지 않은 장애 조치로 인해 일부 데이터가 손실될 수 있습니다. [복제 모니터링](msk-replicator-monitor.md)의 지표를 사용하여 메시지 지연을 추적할 수 있습니다.

동일한 주제 이름 복제 구성(콘솔에서 **동일한 주제 이름 유지**)을 사용하는 경우 다음 단계를 따르세요.

1. 기본 리전의 소스 MSK 클러스터에 연결하는 모든 생산자와 소비자를 종료하려고 시도합니다. 해당 리전의 장애로 인해 이 작업이 성공하지 못할 수 있습니다.

1. 보조 AWS 리전의 대상 MSK 클러스터에 연결하는 생산자와 소비자를 시작하여 장애 조치를 완료합니다. MSK Replicator는 읽기 ACL 및 소비자 그룹 오프셋을 비롯한 메타데이터도 복제하므로 생산자와 소비자는 장애 조치 전에 중단한 위치 근처에서 처리를 원활하게 재개합니다.

`PREFIX` 주제 이름 구성을 사용하는 경우 다음 단계에 따라 장애 조치를 수행하세요.

1. 기본 리전의 소스 MSK 클러스터에 연결하는 모든 생산자와 소비자를 종료하려고 시도합니다. 해당 리전의 장애로 인해 이 작업이 성공하지 못할 수 있습니다.

1. 보조 AWS 리전의 대상 MSK 클러스터에 연결하는 생산자와 소비자를 시작하여 장애 조치를 완료합니다. MSK Replicator는 읽기 ACL 및 소비자 그룹 오프셋을 비롯한 메타데이터도 복제하므로 생산자와 소비자는 장애 조치 전에 중단한 위치 근처에서 처리를 원활하게 재개합니다.

1. 애플리케이션의 메시지 정렬 요구 사항에 따라 다음 탭 중 하나의 단계를 따릅니다.

------
#### [ No message ordering ]

   애플리케이션에 메시지 순서 지정이 필요하지 않은 경우 와일드카드 연산자(예: `topic`)를 사용하여 로컬(예: ) 및 복제된 주제(예: `<sourceKafkaClusterAlias>.topic`) 모두에서 읽는 대상 AWS 리전의 소비자를 시작합니다`.*topic`.

------
#### [ Message ordering ]

   1. 대상 클러스터의 복제된 주제(예: `<sourceKafkaClusterAlias>.topic`)에 대해서만 소비자를 시작하고 로컬 주제(예: `topic`)는 시작하지 않습니다.

   1. 대상 MSK 클러스터에 복제된 주제의 모든 소비자가 모든 데이터 처리를 완료하여 오프셋 지연이 0이 되고 처리된 레코드 수 또한 0이 될 때까지 기다립니다. 그런 다음 대상 클러스터에서 복제된 주제에 대한 소비자를 중지합니다. 이 시점에서 소스 MSK 클러스터에서 대상 MSK 클러스터로 복제된 모든 레코드가 소비되었습니다.

   1. 대상 MSK 클러스터에서 로컬 주제(예: `topic`)에 대한 소비자를 시작합니다.

------

1. 기본 리전에서 서비스 이벤트가 종료되면 새 MSK Replicator를 생성하여 보조 리전의 MSK 클러스터에서 기본 리전의 MSK 클러스터로 데이터를 복제합니다. 이때 Replicator 시작 위치는 *가장 빠른* 위치로 설정됩니다. 이는 서비스 이벤트가 종료된 후 기본 리전으로 페일백할 수 있도록 보조 리전에 쓸 데이터를 다시 기본 리전으로 복사하는 데 필요합니다. Replicator 시작 위치를 *가장 빠른* 위치로 설정하지 않으면 기본 리전의 서비스 이벤트 중에 보조 리전의 클러스터에 생성한 모든 데이터는 기본 리전의 클러스터로 다시 복사되지 않습니다.

# 기본 AWS 리전으로 장애 복구 수행
<a name="msk-replicator-perform-failback"></a>

해당 AWS 리전의 서비스 이벤트가 종료된 후 기본 리전으로 페일백할 수 있습니다.

동일한 주제 이름 복제 구성을 사용하는 경우 다음 단계를 따르세요.

1. 보조 클러스터를 소스로, 기본 클러스터를 대상으로 하여 새 MSK Replicator를 생성합니다. 시작 위치는 *가장 빠른* 동일한 주제 이름 복제로 설정됩니다(콘솔에서 **동일한 주제 이름 유지**).

   이렇게 하면 장애 조치 후 보조 클러스터에 작성된 모든 데이터를 기본 리전으로 다시 복사하는 프로세스가 시작됩니다.

1. Amazon CloudWatch에서 새로운 Replicator의 `MessageLag` 지표가 `0`에 도달할 때까지 모니터링합니다. 이 도달은 모든 데이터가 보조에서 기본으로 복제되었음을 나타냅니다.

1. 모든 데이터가 복제되면 보조 클러스터에 연결하는 모든 생산자를 중지하고 기본 클러스터에 연결하는 생산자를 시작합니다.

1. 소비자가 보조 클러스터에 연결할 때까지 `MaxOffsetLag` 지표가 `0`이 될 때까지 기다렸다가 모든 데이터를 처리되었는지 확인합니다. [소비자 지연 모니터링](consumer-lag.md)을(를) 참조하세요.

1. 모든 데이터가 처리되면 보조 리전의 소비자를 중지하고 소비자를 기본 클러스터에 연결하여 장애 복구를 완료합니다.

1. 보조 클러스터에서 기본 클러스터로 데이터를 복제하는 첫 번째 단계에서 생성한 Replicator를 삭제합니다.

1. 기본 클러스터에서 보조 클러스터로 데이터를 복사하는 기존 Replicator의 상태가 ‘RUNNING’이며 Amazon CloudWatch의 `ReplicatorThroughput` 지표가 `0`인지 확인합니다.

   시작 위치가 가장 빠른** 장애 복구인 새로운 Replicator를 생성하면 보조 클러스터의 주제에 있는 모든 데이터를 읽기 시작합니다. 데이터 보존 설정에 따라 소스 클러스터에서 가져온 데이터가 주제에 있을 수 있습니다. MSK Replicator에서 이러한 메시지를 자동으로 필터링하지만 보조 클러스터의 모든 데이터에 대한 데이터 처리 및 전송 요금이 계속 발생합니다. `ReplicatorBytesInPerSec`를 사용하여 Replicator에서 처리한 총 데이터를 추적할 수 있습니다. [MSK Replicator 지표](msk-replicator-monitor.md#msk-replicator-metrics)을(를) 참조하세요.

접두사 지정된 주제 이름 구성을 사용하는 경우 다음 단계를 따르세요.

보조 리전의 클러스터에서 기본 리전의 클러스터로 복제가 완료되고 Amazon CloudWatch의 MessageLag 지표가 0에 가까워진 후에만 장애 복구 단계를 시작해야 합니다. 계획된 페일백으로 인해 데이터가 손실되어서는 안 됩니다.

1. 보조 리전의 MSK 클러스터에 연결하는 모든 생산자와 소비자를 종료합니다.

1. 액티브-패시브 토폴로지의 경우 보조 리전의 클러스터에서 기본 리전으로 데이터를 복제하는 복제기를 삭제합니다. 액티브-액티브 토폴로지의 경우에는 복제기를 삭제할 필요가 없습니다.

1. 기본 리전의 MSK 클러스터에 연결하는 생산자를 시작합니다.

1. 애플리케이션의 메시지 정렬 요구 사항에 따라 다음 탭 중 하나의 단계를 따릅니다.

------
#### [ No message ordering ]

   애플리케이션에 메시지 순서 지정이 필요하지 않은 경우 와일드카드 연산자(예: `topic`)를 사용하여 로컬(예: ) 및 복제된 주제(예: `<sourceKafkaClusterAlias>.topic`) 모두에서 읽는 기본 AWS 리전에서 소비자를 시작합니다`.*topic`. 로컬 주제(예: 주제)의 소비자는 장애 조치 전에 소비한 마지막 오프셋부터 다시 시작합니다. 장애 조치 이전부터 처리되지 않은 데이터가 있는 경우 이제 처리됩니다. 계획된 장애 조치의 경우 이러한 레코드가 없어야 합니다.

------
#### [ Message ordering ]

   1. 기본 리전(예: `<sourceKafkaClusterAlias>.topic`)에서 복제된 주제에 대해서만 소비자를 시작하고 로컬 주제(예: `topic`)는 시작하지 않습니다.

   1. 기본 리전의 클러스터에서 복제된 주제의 모든 소비자가 모든 데이터 처리를 완료하여 오프셋 지연이 0이 되고 처리된 레코드 수 또한 0이 될 때까지 기다립니다. 그런 다음 기본 리전의 클러스터에서 복제된 토픽에 대한 소비자를 중지합니다. 이 시점에서 장애 조치 후 보조 리전에서 생성된 모든 레코드는 기본 리전에서 소비됩니다.

   1. 기본 지역의 클러스터에서 로컬 주제(예: `topic`)에 대한 소비자를 시작합니다.

------

1. 기본 리전의 클러스터에서 보조 리전의 클러스터로 기존 Replicator가 RUNNING 상태이고 `ReplicatorThroughput` 및 대기 시간 지표를 사용하여 예상대로 작동하는지 확인합니다.

# MSK Replicator를 사용하여 액티브-액티브 설정 생성
<a name="msk-replicator-active-active"></a>

두 MSK 클러스터가 모두 읽기 및 쓰기를 적극적으로 제공하는 액티브-액티브 설정을 생성하려면 접두사 지정된 주제 이름 복제(콘솔에서 **주제 이름에 접두사 추가**)가 포함된 MSK Replicator를 사용하는 것이 좋습니다. 하지만 이렇게 하려면 복제된 주제를 읽도록 소비자를 재구성해야 합니다.

다음 단계에 따라 소스 MSK 클러스터 A와 대상 MSK 클러스터 B 간에 액티브-액티브 토폴로지를 설정합니다.

1. MSK 클러스터 A를 소스로, MSK 클러스터 B를 대상으로 하는 MSK Replicator를 생성합니다.

1. 위의 MSK Replicator가 성공적으로 생성되면 클러스터 B를 소스로, 클러스터 A를 대상으로 복제기를 생성합니다.

1. 생산자와 같은 리전에 있는 클러스터의 로컬 주제(예: “주제”)에 각각 데이터를 동시에 기록하는 두 세트의 생산자를 생성합니다.

1. 소비자와 동일한 AWS 리전에 있는 MSK 클러스터에서 와일드카드 구독(예: “.\$1topic”)을 사용하여 각각 데이터를 읽는 두 개의 소비자 세트를 생성합니다. 이렇게 하면 소비자가 로컬 주제(예: `topic`)에서 해당 리전에서 로컬로 생성된 데이터와 접두사(`<sourceKafkaClusterAlias>.topic`)가 있는 주제의 다른 리전에서 복제된 데이터를 자동으로 읽습니다. 이 두 소비자 세트는 서로 다른 소비자 그룹 ID를 가져야 MSK Replicator가 다른 클러스터로 복사할 때 소비자 그룹 오프셋이 덮어쓰지 않습니다.

클라이언트를 재구성하지 않으려면 접두사 지정된 주제 이름 복제(콘솔에서 **주제 이름에 접두사 추가**) 대신 동일한 주제 이름 복제(콘솔에서 **동일한 주제 이름 유지**)를 사용하여 MSK Replicator를 생성하여 액티브-액티브 설정을 생성할 수 있습니다. 하지만 각 Replicator에 대해 추가 데이터 처리 및 데이터 전송 요금을 지불하게 됩니다. 이는 각 Replicator가 일반적인 데이터 양을 두 번(복제를 위해 한 번, 무한 루프를 방지하기 위해 다시 한 번) 처리해야 하기 때문입니다. `ReplicatorBytesInPerSec` 지표를 사용하여 각 Replicator가 처리하는 총 데이터 양을 추적할 수 있습니다. [복제 모니터링](msk-replicator-monitor.md)을(를) 참조하세요. 이 지표에는 대상 클러스터에 복제된 데이터와 MSK Replicator에서 필터링한 데이터가 포함되어 데이터가 시작된 동일한 주제로 다시 복사되는 것을 방지합니다.

**참고**  
동일한 주제 이름 복제(콘솔에서 **동일한 주제 이름 유지**)를 사용하여 액티브-액티브 토폴로지를 설정하는 경우 주제를 삭제한 후 30초 이상 기다린 다음, 동일한 이름으로 주제를 다시 생성합니다. 이 대기 기간은 중복된 메시지가 소스 클러스터로 다시 복제되는 것을 방지하는 데 도움이 됩니다. 소비자는 다운스트림에 영향을 주지 않으면서 중복된 메시지를 재처리할 수 있어야 합니다. [다중 리전 Apache Kafka 애플리케이션 빌드의 고려 사항](msk-replicator-increase-resiliency.md#msk-replication-multi-region-kafka-applications)을(를) 참조하세요.

# MSK Replicator를 사용하여 Amazon MSK 클러스터 간의 마이그레이션
<a name="msk-replicator-migrate-cluster"></a>

클러스터 마이그레이션에 동일한 주제 이름 복제를 사용할 수 있지만 소비자는 다운스트림 영향 없이 중복 메시지를 처리할 수 있어야 합니다. MSK Replicator가 최소 한 번 복제를 제공하므로 드문 상황에서 중복 메시지가 발생할 수 있기 때문입니다. 소비자가 이 요구 사항을 충족하는 경우 다음 단계를 따르세요.

1. Replicator의 시작 위치를 *가장 빠른* 위치로 설정하고 동일한 주제 이름 복제를 사용하여 이전 클러스터의 데이터를 새 클러스터로 복제하는 Replicator를 생성합니다(콘솔에서 **동일한 주제 이름 유지**).

1. 새로운 클러스터에 대한 클러스터 수준 설정 및 권한을 구성합니다. MSK Replicator가 자동으로 복사하므로 주제 수준 설정과 ‘리터럴’ 읽기 ACL을 구성할 필요가 없습니다.

1. Amazon CloudWatch의 `MessageLag` 지표가 0에 도달할 때까지 이 지표를 모니터링합니다. 0은 모든 데이터가 복제되었음을 나타냅니다.

1. 모든 데이터가 복제되면 생산자에서 이전 클러스터에 데이터를 쓰지 못하도록 합니다.

1. 새로운 클러스터에 연결하고 시작하도록 해당 생산자를 재구성합니다.

1. 이전 클러스터에서 데이터를 읽는 소비자의 `MaxOffsetLag` 지표가 `0`이 될 때까지 지표를 모니터링합니다. 이 값은 기존 데이터가 모두 처리되었음을 나타냅니다.

1. 이전 클러스터에 연결하는 소비자를 중지합니다.

1. 새로운 클러스터에 연결하고 시작하도록 소비자를 재구성합니다.

# 자체 관리형 MirrorMaker2에서 MSK Replicator로 마이그레이션
<a name="msk-replicator-migrate-mirrormaker2"></a>

MirrorMaker(MM2)에서 MSK Replicator로 마이그레이션하려면 다음 단계를 따르세요.

1. 소스 Amazon MSK 클러스터에 쓰는 생산자를 중지합니다.

1. MM2가 소스 클러스터의 주제에 있는 모든 메시지를 복제하도록 허용합니다. 소스 MSK 클러스터에서 MM2 소비자의 소비자 지연을 모니터링하여 모든 데이터가 복제된 시기를 확인할 수 있습니다.

1. 시작 위치가 *최신*으로, 주제 이름 구성이 `IDENTICAL`(콘솔에서 **동일한 주제 이름 복제**)로 설정된 새로운 Replicator를 생성합니다.

1. Replicator가 RUNNING 상태가 되면 생산자가 소스 클러스터에 쓰기를 다시 시작할 수 있습니다.

# MSK Replicator 문제 해결
<a name="msk-replicator-troubleshooting"></a>

다음 정보는 MSK Replicator에서 발생할 수 있는 문제를 해결하는 데 도움이 될 수 있습니다. 다른 Amazon MSK 기능에 대한 문제 해결 정보는 [Amazon MSK 클러스터 문제 해결](troubleshooting.md) 단원을 참조하세요. 또한 [AWS re:Post](https://repost.aws/)에 문제를 게시할 수 있습니다.

## MSK Replicator 상태가 생성 중에서 실패로 변경됩니다.
<a name="msk-replicator-troubleshooting-failed-state"></a>

다음은 MSK Replicator 생성 실패의 몇 가지 일반적인 원인입니다.

1. 대상 클러스터 섹션에서 복제기 생성을 위해 제공한 보안 그룹에 대상 클러스터의 보안 그룹에 대한 트래픽을 허용하는 아웃바운드 규칙이 있는지 확인합니다. 또한 대상 클러스터 섹션에서 복제기 생성을 위해 제공한 보안 그룹의 트래픽을 허용하는 인바운드 규칙이 대상 클러스터의 보안 그룹에 있는지 확인합니다. [대상 클러스터 선택](msk-replicator-create-console.md#msk-replicator-create-console-choose-target)을(를) 참조하세요.

1. 리전 간 복제를 위해 복제기를 생성하는 경우 소스 클러스터에 IAM 액세스 제어 인증 방법에 대한 다중 VPC 연결이 활성화되어 있는지 확인합니다. [단일 리전에서의 Amazon MSK 다중 VPC 프라이빗 연결](aws-access-mult-vpc.md)을(를) 참조하세요. 또한 소스 클러스터에 클러스터 정책이 설정되어 있는지 확인하여 MSK Replicator가 소스 클러스터에 연결할 수 있도록 합니다. [Amazon MSK 소스 클러스터 준비](msk-replicator-prepare-cluster.md)을(를) 참조하세요.

1. MSK Replicator 생성 시 제공한 IAM 역할에 소스 및 대상 클러스터에 읽고 쓰는 데 필요한 권한이 있는지 확인합니다. 또한 IAM 역할에 주제에 대한 쓰기 권한이 있는지 확인합니다. [복제기 설정 및 권한 구성](msk-replicator-create-console.md#msk-replicator-create-settings) 섹션을 참조하세요

1. 네트워크 ACL이 MSK Replicator와 소스 및 대상 클러스터 간의 연결을 차단하지 않는지 확인합니다.

1. MSK Replicator가 연결을 시도할 때 소스 또는 대상 클러스터를 완전히 사용할 수 없을 수도 있습니다. 이는 과도한 부하, 디스크 사용량 또는 CPU 사용량으로 인해 복제기가 브로커에 연결할 수 없기 때문일 수 있습니다. 브로커 관련 문제를 해결하고 복제기 생성을 다시 시도합니다.

위의 검증을 수행한 후 MSK Replicator를 다시 생성합니다.

## MSK Replicator가 생성 중 상태로 멈춤
<a name="msk-replicator-troubleshooting-stuck-creating"></a>

때때로 MSK Replicator 생성에 최대 30분이 소요될 수 있습니다. 30분간 기다렸다가 복제기의 상태를 다시 확인합니다.

## MSK Replicator가 데이터를 복제하지 않거나 일부 데이터만 복제합니다.
<a name="msk-replicator-troubleshooting-not-replicating"></a>

다음 단계에 따라 데이터 복제 문제를 해결합니다.

1. Amazon CloudWatch의 MSK Replicator에서 제공하는 AuthError 지표를 사용하여 Replicator에 인증 오류가 발생하지 않는지 확인합니다. 이 지표가 0을 초과하는 경우 복제기에 대해 제공한 IAM 역할의 정책이 유효하고 클러스터 권한에 설정된 거부 권한이 없는지 확인합니다. clusterAlias 차원을 기반으로 소스 또는 대상 클러스터에서 인증 오류가 발생하고 있는지 확인할 수 있습니다.

1. 원본 및 대상 클러스터에 문제가 없는지 확인합니다. 복제기가 소스 또는 대상 클러스터에 연결하지 못할 수 있습니다. 너무 많은 연결, 디스크의 최대 용량 또는 높은 CPU 사용량으로 인해 이러한 문제가 발생할 수 있습니다.

1. Amazon CloudWatch의 KafkaClusterPingSuccessCount 지표를 사용하여 소스 및 대상 클러스터가 MSK Replicator에서 연결 가능한지 확인합니다. clusterAlias 차원을 기반으로 소스 또는 대상 클러스터에서 인증 오류가 발생하고 있는지 확인할 수 있습니다. 이 값이 0이거나 데이터 포인트가 없으면 연결이 정상적이지 않은 것입니다. MSK Replicator가 클러스터 연결에 사용하는 네트워크 및 IAM 역할 권한을 확인해야 합니다.

1. Amazon CloudWatch의 ReplicatorFailure 지표를 사용하여 주제 수준 권한이 누락되어 Replicator에 장애가 발생하지 않는지 확인합니다. 이 지표가 0보다 크면 제공한 IAM 역할에서 주제 수준 권한을 확인합니다.

1. 복제기를 생성할 때 허용 목록에 제공한 정규 표현식이 복제하려는 주제의 이름과 일치하는지 확인합니다. 또한 거부 목록의 정규 표현식으로 인해 해당 주제가 복제에서 제외되고 있지 않은지 확인하세요.

1. Replicator가 대상 클러스터에서 새로운 주제 또는 주제 파티션을 감지하고 생성하는 데 최대 30초가 걸릴 수 있습니다. 대상 클러스터에서 주제가 생성되기 전에 소스 주제에 생성된 메시지는 Replicator 시작 위치가 최신(기본값)인 경우 복제되지 않습니다. 또는 대상 클러스터의 주제에 기존 메시지를 복제하려는 경우 소스 클러스터 주제 파티션의 가장 빠른 오프셋에서 복제를 시작할 수 있습니다. [복제기 설정 및 권한 구성](msk-replicator-create-console.md#msk-replicator-create-settings)을(를) 참조하세요.

## 대상 클러스터의 메시지 오프셋이 소스 클러스터와 다릅니다.
<a name="msk-replicator-troubleshooting-different-message-offsets"></a>

MSK Replicator는 데이터 복제의 일환으로 소스 클러스터의 메시지를 사용하여 대상 클러스터에 메시지를 생성합니다. 이로 인해 소스 클러스터와 대상 클러스터에 서로 다른 오프셋의 메시지가 발생할 수 있습니다. 하지만 Replicator 생성 중에 소비자 그룹 오프셋 동기화를 켠 경우 MSK Replicator는 메타데이터를 복사하는 동안 오프셋을 자동으로 변환하므로 대상 클러스터로 장애 조치한 후 소비자는 소스 클러스터에서 중단한 부분 근처에서 처리를 다시 시작할 수 있습니다.

## MSK Replicator가 소비자 그룹 오프셋을 동기화하지 않고 있거나 대상 클러스터에 소비자 그룹이 없습니다.
<a name="msk-replicator-troubleshooting-not-syncing-consumer-groups"></a>

다음 단계에 따라 메타데이터 복제 문제를 해결하세요.

1. 데이터 복제가 예상대로 작동하는지 확인합니다. 그렇지 않은 경우 [MSK Replicator가 데이터를 복제하지 않거나 일부 데이터만 복제합니다.](#msk-replicator-troubleshooting-not-replicating)를 참조하세요.

1. Replicator를 생성할 때 허용 목록에 제공한 정규 표현식이 복제하려는 소비자 그룹의 이름과 일치하는지 확인합니다. 또한 거부 목록의 정규 표현식으로 인해 해당 주제가 복제에서 제외되고 있지 않은지 확인합니다.

1. MSK Replicator가 대상 클러스터에서 주제를 생성했는지 확인합니다. Replicator가 대상 클러스터에서 새로운 주제 또는 주제 파티션을 감지하고 생성하는 데 최대 30초가 걸릴 수 있습니다. 대상 클러스터에서 주제가 생성되기 전에 소스 주제에 생성된 메시지는 Replicator 시작 위치가 **최신(기본값)인 경우 복제되지 않습니다. 소스 클러스터의 소비자 그룹이 MSK Replicator에서 복제하지 않은 메시지만 사용한 경우 소비자 그룹은 대상 클러스터에 복제되지 않습니다. 대상 클러스터에서 주제가 성공적으로 생성되면 MSK Replicator에서 소스 클러스터에 새로 작성된 메시지를 대상으로 복제하기 시작합니다. 소비자 그룹이 소스에서 이러한 메시지를 읽기 시작하면 MSK Replicator에서 소비자 그룹을 대상 클러스터에 자동으로 복제합니다. 또는 대상 클러스터의 주제에 기존 메시지를 복제하려는 경우 소스 클러스터 주제 파티션의 가장 빠른 오프셋에서 복제를 시작할 수 있습니다. [복제기 설정 및 권한 구성](msk-replicator-create-console.md#msk-replicator-create-settings)을(를) 참조하세요.

**참고**  
MSK Replicator는 주제 파티션 끝에 가까운 위치에서 읽는 소스 클러스터의 소비자에 대한 소비자 그룹 오프셋 동기화를 최적화합니다. 소비자 그룹이 소스 클러스터에서 지연되는 경우 소스에 비해 대상의 해당 소비자 그룹 지연이 더 높을 수 있습니다. 즉, 대상 클러스터로의 장애 조치 후 소비자는 더 많은 중복 메시지를 재처리합니다. 이 지연을 줄이려면 소스 클러스터의 소비자가 스트림의 팁(주제 파티션의 끝)을 파악하여 이 팁에서 소비를 시작해야 합니다. 소비자가 소비를 시작하면 MSK Replicator가 지연을 자동으로 줄입니다.

## 복제 지연 시간이 길거나 계속 증가하는 경우
<a name="msk-replicator-troubleshooting-high-latency"></a>

다음은 복제 지연 시간이 길어지는 몇 가지 일반적인 원인입니다.

1. 소스 및 대상 MSK 클러스터에 적절한 수의 파티션이 있는지 확인합니다. 파티션이 너무 적거나 많으면 성능에 영향을 미칠 수 있습니다. 파티션 수 선택에 대한 지침은 [MSK Replicator 사용 모범 사례](msk-replicator-best-practices.md) 섹션을 참조하세요. 다음 표는 MSK Replicator로 원하는 처리량을 얻기 위해 권장되는 최소 파티션 수를 보여줍니다.  
**처리량 및 권장되는 최소 파티션 수**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/msk/latest/developerguide/msk-replicator-troubleshooting.html)

1. 소스 및 대상 MSK 클러스터에 복제 트래픽을 지원할 수 있는 충분한 읽기 및 쓰기 용량이 있는지 확인합니다. MSK Replicator는 소스 클러스터(송신)의 소비자 역할과 대상 클러스터(수신)의 생산자 역할을 합니다. 따라서 클러스터의 다른 트래픽과 더불어 복제 트래픽을 지원할 수 있도록 클러스터 용량을 프로비저닝해야 합니다. MSK 클러스터 크기 조정에 대한 지침은 [MSK Replicator 사용 모범 사례](msk-replicator-best-practices.md) 섹션을 참조하세요.

1. 복제 지연 시간은 클러스터가 서로 지리적으로 얼마나 멀리 떨어져 있는지에 따라 서로 다른 소스 및 대상 AWS 리전 페어의 MSK 클러스터에 따라 다를 수 있습니다. 예를 들어 유럽(아일랜드) 및 유럽(런던) 리전의 클러스터 간 복제 시 일반적으로 유럽(아일랜드) 및 아시아 태평양(시드니) 리전의 클러스터 간 복제에 비해 복제 지연 시간이 더 짧습니다.

1. 소스 또는 대상 클러스터에 설정된 지나치게 공격적인 할당량으로 인해 복제기가 제한되고 있지는 않은지 확인합니다. Amazon CloudWatch에서 MSK Replicator가 제공하는 ThrottleTime 지표를 사용하여 소스/대상 클러스터의 브로커가 요청을 제한한 평균 시간(밀리초)을 확인할 수 있습니다. 이 지표가 0보다 크면 Kafka 쿼터를 조정하여 제한을 줄여 복제기가 따라잡을 수 있도록 해야 합니다. 복제기의 Kafka 할당량 관리에 대한 자세한 내용은 [Kafka 할당량을 사용하여 MSK Replicator 처리량 관리](msk-replicator-best-practices.md#msk-replicator-manage-throughput-kafka-quotas) 섹션을 참조하세요.

1.  AWS 리전 성능이 저하되면 ReplicationLatency 및 MessageLag가 증가할 수 있습니다. [AWS 서비스 상태 대시보드](https://health.aws.amazon.com/health/status)를 사용하여 기본 MSK 클러스터가 있는 리전에서 MSK 서비스 이벤트를 확인합니다. 서비스 이벤트가 있는 경우 애플리케이션 읽기 및 쓰기를 다른 리전으로 일시적으로 리디렉션할 수 있습니다.

## ReplicatorFailure 지표를 사용하여 MSK Replicator 실패 문제 해결
<a name="msk-replicator-troubleshooting-ReplicatorFailure"></a>

ReplicatorFailure 지표는 MSK Replicator에서 복제 문제를 모니터링하고 감지하는 데 도움이 됩니다. 이 지표 값이 0이 아닌 경우 일반적으로 복제 실패 문제를 나타내며, 이는 다음 요인으로 인해 발생할 수 있습니다.
+ 메시지 크기 제한
+ 타임스탬프 범위 위반
+ 배치 크기 문제 기록

ReplicatorFailure 지표가 0이 아닌 값을 보고하는 경우 다음 단계에 따라 문제를 해결합니다.

**참고**  
이 지표에 대한 자세한 정보는 [MSK Replicator 지표](msk-replicator-monitor.md#msk-replicator-metrics) 섹션을 참조하세요.

1. 대상 MSK 클러스터에 연결 가능하고 Apache Kafka CLI 도구 설정이 있는 클라이언트를 구성합니다. 클라이언트 및 Kafka CLI 도구 설정에 대한 자세한 내용은 [Amazon MSK 프로비저닝된 클러스터에 연결](client-access.md) 섹션을 참조하세요.

1. [https://console.aws.amazon.com/msk/home?region=us-east-1\$1/home/](https://console.aws.amazon.com/msk/home?region=us-east-1#/home/)에서 Amazon MSK 콘솔을 엽니다.

   뒤이어 다음과 같이 하세요.

   1. MSK Replicator 및 대상 MSK 클러스터의 ARN을 가져옵니다.

   1. 대상 MSK 클러스터의 [브로커 엔드포인트를 가져옵니다](get-bootstrap-console.md). 다음 단계에서 해당 엔드포인트를 사용합니다.

1. 다음 명령을 실행하여 이전 단계에서 얻은 MSK Replicator ARN 및 브로커 엔드포인트를 내보냅니다.

   다음 예제에서 사용되는 <*ReplicatorARN*>, <*BootstrapServerString*> 및 <*ConsumerConfigFile*>의 자리 표시자 값을 실제 값으로 바꿔야 합니다.

   ```
   export TARGET_CLUSTER_SERVER_STRING=<BootstrapServerString>
   ```

   ```
   export REPLICATOR_ARN=<ReplicatorARN>
   ```

   ```
   export CONSUMER_CONFIG_FILE=<ConsumerConfigFile>
   ```

1. `<path-to-your-kafka-installation>/bin` 디렉터리에서 다음을 수행합니다.

   1. 다음 스크립트를 저장하고 이름을 **query-replicator-failure-message.sh**로 지정합니다.

      ```
      #!/bin/bash
      
      # Script: Query MSK Replicator Failure Message
      # Description: This script queries exceptions from AWS MSK Replicator status topics
      # It takes a replicator ARN and bootstrap server as input and searches for replicator exceptions
      # in the replicator's status topic, formatting and displaying them in a readable manner
      #
      # Required Arguments:
      #   --replicator-arn: The ARN of the AWS MSK Replicator
      #   --bootstrap-server: The Kafka bootstrap server to connect to
      #   --consumer.config: Consumer config properties file
      # Usage Example:
      #   ./query-replicator-failure-message.sh ./query-replicator-failure-message.sh --replicator-arn <replicator-arn> --bootstrap-server <bootstrap-server> --consumer.config <consumer.config>
      
      print_usage() {
        echo "USAGE: $0 ./query-replicator-failure-message.sh --replicator-arn <replicator-arn> --bootstrap-server <bootstrap-server> --consumer.config <consumer.config>"
        echo "--replicator-arn <String: MSK Replicator ARN>      REQUIRED: The ARN of AWS MSK Replicator."
        echo "--bootstrap-server <String: server to connect to>  REQUIRED: The Kafka server to connect to."
        echo "--consumer.config <String: config file>            REQUIRED: Consumer config properties file."
        exit 1
      }
      
      # Initialize variables
      replicator_arn=""
      bootstrap_server=""
      consumer_config=""
      
      # Parse arguments
      while [[ $# -gt 0 ]]; do
        case "$1" in
          --replicator-arn)
            if [ -z "$2" ]; then
              echo "Error: --replicator-arn requires an argument."
              print_usage
            fi
            replicator_arn="$2"; shift 2 ;;
          --bootstrap-server)
            if [ -z "$2" ]; then
              echo "Error: --bootstrap-server requires an argument."
              print_usage
            fi
            bootstrap_server="$2"; shift 2 ;;
          --consumer.config)
            if [ -z "$2" ]; then
              echo "Error: --consumer.config requires an argument."
              print_usage
            fi
            consumer_config="$2"; shift 2 ;;
          *) echo "Unknown option: $1"; print_usage ;;
        esac
      done
      
      # Check for required arguments
      if [ -z "$replicator_arn" ] || [ -z "$bootstrap_server" ] || [ -z "$consumer_config" ]; then
        echo "Error: --replicator-arn, --bootstrap-server, and --consumer.config are required."
        print_usage
      fi
      
      # Extract replicator name and suffix from ARN
      replicator_arn_suffix=$(echo "$replicator_arn" | awk -F'/' '{print $NF}')
      replicator_name=$(echo "$replicator_arn" | awk -F'/' '{print $(NF-1)}')
      echo "Replicator name: $replicator_name"
      
      # List topics and find the status topic
      topics=$(./kafka-topics.sh --command-config client.properties --list --bootstrap-server "$bootstrap_server")
      status_topic_name="__amazon_msk_replicator_status_${replicator_name}_${replicator_arn_suffix}"
      
      # Check if the status topic exists
      if echo "$topics" | grep -Fq "$status_topic_name"; then
        echo "Found replicator status topic: '$status_topic_name'"
        ./kafka-console-consumer.sh --bootstrap-server "$bootstrap_server" --consumer.config "$consumer_config" --topic "$status_topic_name" --from-beginning | stdbuf -oL grep "Exception" | stdbuf -oL sed -n 's/.*Exception:\(.*\) Topic: \([^,]*\), Partition: \([^\]*\).*/ReplicatorException:\1 Topic: \2, Partition: \3/p'
      else
        echo "No topic matching the pattern '$status_topic_name' found."
      fi
      ```

   1. 이 스크립트를 실행하여 MSK Replicator 실패 메시지를 쿼리합니다.

      ```
      <path-to-your-kafka-installation>/bin/query-replicator-failure-message.sh --replicator-arn $REPLICATOR_ARN --bootstrap-server $TARGET_CLUSTER_SERVER_STRING --consumer.config $CONSUMER_CONFIG_FILE
      ```

      이 스크립트는 예외 메시지 및 영향을 받는 토픽 파티션과 함께 모든 오류를 출력합니다. [일반적인 MSK Replicator 장애 및 해당 솔루션](#msk-replicator-ReplicatorFailure-error-mitigation)에 설명된 대로 해당 예외 정보를 사용하여 실패를 완화할 수 있습니다. 토픽에 모든 과거 실패 메시지가 포함되어 있으므로 마지막 메시지를 사용하여 조사를 시작합니다. 다음은 실패 메시지의 예입니다.

      ```
      ReplicatorException: The request included a message larger than the max message size the server will accept. Topic: test, Partition: 1
      ```

### 일반적인 MSK Replicator 장애 및 해당 솔루션
<a name="msk-replicator-ReplicatorFailure-error-mitigation"></a>

다음 목록은 발생할 수 있는 일부 MSK Replicator 장애와 이를 완화하는 방법을 설명합니다.

**max.request.size보다 큰 메시지 크기**  
**원인**  
이 실패는 개별 메시지 크기가 10MB를 초과하기 때문에 MSK Replicator가 데이터를 복제하지 못할 때 발생합니다. 기본적으로 MSK Replicator는 최대 10MB 크기의 메시지를 복제합니다.
다음은 오류 메시지 유형의 예입니다.  

```
ReplicatorException: The message is 20635370 bytes when serialized which is larger than 10485760, which is the value of the max.request.size configuration. Topic: test, Partition: 1
```
**Solution**  
토픽의 개별 메시지 크기를 줄입니다. 이렇게 할 수 없는 경우 다음 지침에 따라 [한도 증가를 요청하세요](limits.md#request-msk-quota-increase).

**서버가 수락할 최대 메시지 크기보다 큰 메시지 크기**  
**원인**  
이 실패는 메시지 크기가 대상 클러스터의 최대 메시지 크기를 초과할 때 발생합니다.
다음은 오류 메시지 유형의 예입니다.  

```
ReplicatorException: The request included a message larger than the max message size the server will accept. Topic: test, Partition: 1
```
**Solution**  
대상 클러스터 또는 해당 대상 클러스터 토픽의 `max.message.bytes` 구성을 증가시킵니다. 압축되지 않은 최대 메시지 크기와 일치하도록 대상 클러스터의 `max.message.bytes` 구성을 설정합니다. 이에 대한 자세한 내용은 [max.message.bytes](https://kafka.apache.org/documentation/#topicconfigs_max.message.bytes)를 참조하세요.

**범위를 벗어난 타임스탬프**  
**원인**  
이 실패는 개별 메시지 타임스탬프가 대상 클러스터의 허용 범위를 벗어나기 때문에 발생합니다.
다음은 오류 메시지 유형의 예입니다.  

```
ReplicatorException: Timestamp 1730137653724 of message with offset 0 is out of range. The timestamp should be within [1730137892239, 1731347492239] Topic: test, Partition: 1
```
**Solution**  
이전 타임스탬프가 있는 메시지를 허용하도록 대상 클러스터의 `message.timestamp.before.max.ms` 구성을 업데이트합니다. 이에 대한 자세한 내용은 [message.timestamp.before.max.ms](https://kafka.apache.org/documentation/#topicconfigs_message.timestamp.before.max.ms)를 참조하세요.

**레코드 배치가 너무 큼**  
**원인**  
이 실패는 레코드 배치 크기가 대상 클러스터의 토픽에 대해 설정된 세그먼트 크기를 초과하기 때문에 발생합니다. MSK Replicator는 최대 배치 크기 1MB를 지원합니다.
다음은 오류 메시지 유형의 예입니다.  

```
ReplicatorException: The request included message batch larger than the configured segment size on the server. Topic: test, Partition: 1
```
**Solution**  
Replicator가 오류 없이 진행되려면 대상 클러스터의 segment.bytes 구성이 배치 크기(1MB) 이상이어야 합니다. 대상 클러스터의 segment.bytes를 1048576(1MB) 이상으로 업데이트합니다. 이에 대한 자세한 내용은 [segment.bytes](https://kafka.apache.org/documentation/#topicconfigs_segment.bytes)를 참조하세요.

**참고**  
해당 솔루션을 적용한 후에도 ReplicatorFailure 지표가 0이 아닌 값을 계속 내보내는 경우 지표가 0의 값을 내보낼 때까지 문제 해결 프로세스를 반복합니다.

# MSK Replicator 사용 모범 사례
<a name="msk-replicator-best-practices"></a>

이 섹션에서는 Amazon MSK Replicator 사용에 대한 일반적인 모범 사례와 구현 전략을 다룹니다.

**Contents**
+ [Kafka 할당량을 사용하여 MSK Replicator 처리량 관리](#msk-replicator-manage-throughput-kafka-quotas)
+ [클러스터 보존 기간 설정](#msk-replicator-retention-period)

## Kafka 할당량을 사용하여 MSK Replicator 처리량 관리
<a name="msk-replicator-manage-throughput-kafka-quotas"></a>

MSK Replicator는 소스 클러스터의 소비자 역할을 하므로 복제로 인해 소스 클러스터에서 다른 소비자가 제한될 수 있습니다. 제한의 양은 원본 클러스터의 읽기 용량과 복제 중인 데이터의 처리량에 따라 달라집니다. 소스 클러스터와 대상 클러스터에 동일한 용량을 프로비저닝하고 필요한 용량을 계산할 때 복제 처리량을 고려하는 것이 좋습니다.

또한 소스 및 대상 클러스터에서 복제기에 대한 Kafka 할당량을 설정하여 MSK Replicator가 사용할 수 있는 용량을 제어할 수 있습니다. 네트워크 대역폭 할당량을 사용하는 것을 권장합니다. 네트워크 대역폭 할당량은 할당량을 공유하는 하나 이상의 클라이언트에 대해 초당 바이트로 정의되는 바이트 속도 임계값을 정의합니다. 이 할당량은 브로커별로 정의됩니다.

할당량을 적용하려면 다음 단계를 수행합니다.

1. 소스 클러스터의 부트스트랩 서버 문자열을 검색합니다. [Amazon MSK 클러스터를 위한 부트스트랩 브로커 가져오기](msk-get-bootstrap-brokers.md)을(를) 참조하세요.

1. MSK Replicator에서 사용하는 서비스 실행 역할(SER)을 검색합니다. `CreateReplicator` 요청에 사용한 SER입니다. 기존 복제기의 DescribeReplicator 응답에서 SER을 가져올 수도 있습니다.

1. Kafka CLI 도구를 사용하여 소스 클러스터에 대해 다음 명령을 실행합니다.

   ```
   ./kafka-configs.sh --bootstrap-server <source-cluster-bootstrap-server> --alter --add-config 'consumer_byte_
   rate=<quota_in_bytes_per_second>' --entity-type users --entity-name arn:aws:sts::<customer-account-id>:assumed-role/<ser-role-name>/<customer-account-id> --command-config <client-properties-for-iam-auth></programlisting>
   ```

1. 위 명령을 실행한 후 `ReplicatorThroughput` 지표가 설정한 할당량을 초과하지 않는지 확인합니다.

여러 MSK Replicator 간에 서비스 실행 역할을 다시 사용하는 경우 모두 이 할당량이 적용된다는 점에 유의하세요. 복제기별로 별도의 할당량을 유지하려면 별도의 서비스 실행 역할을 사용하세요.

할당량과 함께 MSK IAM 인증을 사용하는 방법에 대한 자세한 내용은 [IAM 액세스 제어 및 Kafka 할당량이 있는 Amazon MSK의 멀티 테넌시 Apache Kafka 클러스터 - 1부](https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-1/)를 참조하세요.

**주의**  
Consumer\$1byte\$1rate를 매우 낮게 설정하면 MSK Replicator가 예상치 못한 방식으로 작동할 수 있습니다.

## 클러스터 보존 기간 설정
<a name="msk-replicator-retention-period"></a>

MSK 프로비저닝 및 서버리스 클러스터에 대한 로그 보존 기간을 설정할 수 있습니다. 권장 보존 기간은 7일입니다. [클러스터 구성 변경 사항](msk-replicator-serverless-requirements.md#msk-replicator-config-changes) 또는 [지원되는 MSK Serverless 클러스터 구성](msk-replicator-serverless-requirements.md)을 참조하세요.