

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 什麼是 Amazon MSK Replicator？
<a name="msk-replicator"></a>

Amazon MSK Replicator 是一種 Amazon MSK 功能，可讓您在不同或相同 Amazon MSK 叢集之間可靠地複寫資料 AWS 區域。不過，來源和目標叢集都必須位於相同的 中 AWS 帳戶。使用 MSK Replicator，您可以輕鬆建置具備區域彈性的串流應用程式，以提高可用性和業務連續性。MSK Replicator 提供跨 MSK 叢集的自動非同步複寫功能，無需撰寫自訂程式碼、管理基礎設施或設定跨區域聯網。

MSK Replicator 會自動擴充基礎資源，讓您可以隨需複寫資料，而無需監控或擴展容量。MSK Replicator 也會複寫必要的 Kafka 中繼資料，包括主題設定、存取控制清單 (ACL) 和取用者群組偏移。如果某個區域發生意外事件，您可以容錯移轉到另一個 AWS 區域並無縫繼續處理。

MSK Replicator 支援跨區域複寫 (CRR) 和相同區域複寫 (SRR)。在跨區域複寫中，來源和目標 MSK 叢集位於不同的 AWS 區域。在相同區域複寫中，來源和目標 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)、 中東 （阿拉伯聯合大公國） (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 複寫器會在目標叢集的 AWS 區域中部署所有必要的資源，以最佳化資料複寫延遲。複寫延遲會根據許多因素而有所不同，包括 MSK 叢集 AWS 區域之間的網路距離、來源和目標叢集的輸送量容量，以及來源和目標叢集上的分割區數量。MSK Replicator 會自動擴充基礎資源，讓您可以隨需複寫資料，而無需監控或擴展容量。

## 資料複寫
<a name="msk-replicator-data-replication"></a>

根據預設，MSK Replicator 會以非同步方式將所有資料從來源叢集主題分割區的最新偏移複製到目標叢集。如果開啟「偵測和複製新主題」設定，MSK Replicator 會自動偵測新主題或主題分割區並將其複製到目標叢集。不過，複寫器最多可能需要 30 秒才能偵測和建立目標叢集上的新主題或主題分割區。在目標叢集上建立主題之前產生到來源主題的任何訊息都不會複寫。或者，如果您想要將主題上的現有訊息複寫到目標叢集，您可以在[建立期間設定複寫器](msk-replicator-prepare-cluster.md)，從來源叢集主題分割區中最早的位移開始複寫。

MSK Replicator 不會存放您的資料。資料會從您的來源叢集耗用、在記憶體中緩衝，並寫入目標叢集。當資料成功寫入或在重試後失敗時，緩衝區會自動清除。MSK Replicator 與叢集之間的所有通訊和資料一律會在傳輸中加密。所有 MSK Replicator API 呼叫`CreateTopic`，例如 `DescribeClusterV2`，`DescribeTopicDynamicConfiguration`都會在 AWS CloudTrail 中擷取。您的 MSK 代理程式日誌也會反映相同的 。

MSK Replicator 會在 Replicator 係數為 3 的目標叢集中建立主題。如果需要，您可以直接在目標叢集上修改複寫係數。

## 中繼資料複寫
<a name="msk-replicator-metadata-replication"></a>

MSK Replicator 也支援將中繼資料從來源叢集複製到目標叢集。中繼資料包括主題組態、存取控制清單 (ACLs) 和取用者群組位移。如同資料複寫，中繼資料複寫也會以非同步方式進行。為了獲得更好的效能，MSK Replicator 會優先考慮資料複寫，而不是中繼資料複寫。

下表是 MSK Replicator 複製的存取控制清單 (ACLs) 清單。


| 作業 | 研究 | 允許的 APIs  | 
| --- | --- | --- | 
|  Alter  |  主題  |  CreatePartitions  | 
|  AlterConfigs  |  主題  |  AlterConfigs  | 
|  建立  |  主題  |  CreateTopics、中繼資料  | 
|  刪除  |  主題  |  DeleteRecords、DeleteTopics  | 
|  描述  |  主題  |  ListOffsets、中繼資料、 OffsetFetch、 OffsetForLeaderEpoch  | 
|  DescribeConfigs  |  主題  |  DescribeConfigs  | 
|  讀取  |  主題  |  Fetch、 OffsetCommit、TxnOffsetCommit  | 
|  寫入 （僅拒絕）  |  主題  |  Produce、AddPartitionsToTxn  | 

MSK Replicator 只會針對資源類型主題複製 LITERAL 模式類型 ACLs。PREFIXED 模式類型 ACLs和其他資源類型 ACLs 不會複製。MSK Replicator 也不會刪除目標叢集上的 ACLs。如果您刪除來源叢集上的 ACL，您也應該同時刪除目標叢集上的 。如需 Kafka ACLs：//[https://kafka.apache.org/documentation/\$1security\$1authz\$1cli](https://kafka.apache.org/documentation/#security_authz_cli)。

MSK Replicator 只會複寫 IAM 存取控制不使用的 Kafka ACLs。如果您的用戶端使用 IAM 存取控制來讀取/寫入 MSK 叢集，您也需要在目標叢集上設定相關的 IAM 政策，以實現無縫容錯移轉。字首和相同主題名稱複寫組態也是如此。

做為取用者群組偏移同步的一部分，MSK Replicator 會針對來源叢集上的取用者最佳化，這些取用者會從較接近串流頂端的位置 （主題分割區的結尾） 讀取。如果您的取用者群組在來源叢集上延遲，相較於來源，您可能會看到目標上這些取用者群組的延遲較高。這表示容錯移轉至目標叢集後，您的取用者將重新處理更多重複的訊息。若要減少此延遲，來源叢集上的取用者需要趕上進度，並從串流的頂端開始取用 （主題分割區的結尾）。隨著您的消費者追上進度，MSK Replicator 會自動減少延遲。

![\[MSK Replicator 來源和目標叢集\]](http://docs.aws.amazon.com/zh_tw/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 主控台上的**複寫器**詳細資訊頁面，在 **sourceKafkaClusterAlias** 欄位下找到要新增至目標叢集中主題名稱的字首。目標叢集中的字首為 <sourceKafkaClusterAlias>。

為了確保您的取用者可以從待命叢集可靠地重新啟動處理，您需要設定取用者使用萬用字元運算子 從主題讀取資料`.*`。例如，您的消費者需要在兩個 AWS 區域中使用 。`*topic1`此範例也會包含 等主題`footopic1`，因此請根據您的需求調整萬用字元運算子。

當您想要將複寫器資料保留在目標叢集中的不同主題時，您應該使用 MSK Replicator 來新增字首，例如用於主動-主動叢集設定。

**相同的主題名稱複寫**  
作為預設設定的替代方案，Amazon MSK Replicator 可讓您建立將主題複寫設定為相同主題名稱複寫的複寫器 (**在主控台中保留相同的主題名稱**)。您可以在具有目標 MSK 叢集的 AWS 區域中建立新的複寫器。相同名稱的複寫主題可讓您避免重新設定用戶端從複寫主題讀取。

相同的主題名稱複寫 (**在主控台中保留相同的主題名稱**) 具有下列優點：
+ 可讓您在複寫過程中保留相同的主題名稱，同時自動避免無限複寫迴圈的風險。
+ 讓多叢集串流架構的設定和操作更為簡單，因為您可以避免重新設定用戶端從複寫的主題讀取。
+ 對於主動-被動叢集架構，相同的主題名稱複寫功能也會簡化容錯移轉程序，允許應用程式無縫容錯移轉至待命叢集，而不需要任何主題名稱變更或用戶端重新設定。
+ 可用來更輕鬆地將多個 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 佈建或無伺服器叢集。您的來源叢集必須至少要有三個代理程式。

1. 對於跨區域 MSK Replicator，如果來源是佈建叢集，請設定為針對 IAM 存取控制機制開啟多 VPC 私有連線。請注意，開啟多 VPC 後，不支援未驗證的身分驗證類型。您不需要針對其他身分驗證機制 (MTL 或 SASL/SCRAM) 開啟多 VPC 私有連線。您可以針對連線至 MSK 叢集的其他用戶端，同時使用 mTLS 或 SASL/SCRAM 身分驗證機制。您可以在主控台叢集詳細資訊**網路設定**中或使用 `UpdateConnectivity` API 設定多 VPC 私有連線。請參閱[叢集擁有者開啟多 VPC](mvpc-cluster-owner-action-turn-on.md)。如果您的來源叢集為 MSK Serverless 叢集，則不需要開啟多 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/zh_tw/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>

建立 MSK 目標叢集 (佈建或無伺服器類型)，並開啟 IAM 存取控制。目標叢集不需要開啟多 VPC 私有連線。目標叢集可以位於與來源叢集相同的 AWS 區域或不同的 區域。來源和目標叢集都必須位於相同的 AWS 帳戶中。您的目標叢集必須至少要有三個代理程式。

# 教學課程：建立 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 政策範例。只有在建立 MSK Replicator 時提供了標籤的情況下，才需要動作 `kafka:TagResource`。複寫器 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 Serverless 叢集需要 IAM 存取控制，不支援 Apache Kafka ACL 複寫，而且對主題組態複寫提供有限的支援。請參閱 [什麼是 MSK Serverless？](serverless.md)。
+ 只有在執行 Apache Kafka 2.7.0 或更高版本的叢集上才支援 MSK Replicator，無論您的來源和目標叢集是否位於相同或不同。 AWS 區域
+ MSK Replicator 支援使用 m5.large 或更大執行個體類型的叢集。不支援 t3.small 叢集。
+ 如果將 MSK Replicator 與 MSK 佈建叢集搭配使用，則來源和目標叢集中至少要有三個代理程式。您可以在兩個可用區域的所有叢集中複寫資料，但在這些叢集中至少要有四個代理程式。
+ 您的來源和目標 MSK 叢集都必須位於相同的 AWS 帳戶中。不支援不同帳戶中叢集間的複寫。
+ 如果來源和目標 MSK 叢集位於不同的 AWS 區域 （跨區域），MSK Replicator 會要求來源叢集為其 IAM 存取控制方法開啟多 VPC 私有連線。

  MSK 複寫的來源叢集上的其他身分驗證方法不需要多重 VPC AWS 區域。

  如果您要在相同叢集之間複寫資料，也不需要多重 VPC AWS 區域。請參閱 [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 Serverless 支援在主題建立期間複寫 MSK Serverless 目標叢集的下列主題組態：`cleanup.policy`、`compression.type`、`max.message.bytes`、`retention.bytes`、`retention.ms`。
+ MSK Serverless 在主題組態同步期間僅支援下列主題組態：`compression.type`、`max.message.bytes`、`retention.bytes`、`retention.ms`。
+ 複寫器會在目標 MSK Serverless 叢集上使用 83 個壓縮分區。確定目標 MSK Serverless 叢集具有足夠數量的壓縮分區。請參閱 [MSK Serverless 配額](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>

下一節說明建立複寫器的逐步主控台工作流程。

**複寫器詳細資訊**

1. 在目標 MSK 叢集所在的 AWS 區域中，開啟位於 https：//[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. 選擇來源叢集的子網路。

   主控台會顯示來源叢集區域中可用的子網路，以供您選取。您必須至少選取兩個子網路。對於相同區域 MSK Replicator，您選取設定用來存取來源叢集的子網路，以及用來存取目標叢集的子網路必須位於相同的可用區域之中。

1. 選擇 MSK Replicator 的安全群組 (MSK Replicator) 以存取您的來源叢集。
   + 對於跨區域複寫 (CRR)，您不需要為來源叢集提供安全群組。
   + 對於相同的區域複寫 (SRR)，請前往 Amazon EC2 主控台，網址為 https://console.aws.amazon.com/ec2/：//。此外，請確定來源叢集的安全群組具有傳入規則，允許來自為來源提供的複寫器安全群組的流量。

      

**若要將傳入規則新增至來源叢集的安全群組：**

     1. 在 AWS 主控台中，選取叢集**名稱**，前往來源叢集的詳細資訊。

     1. 選取**屬性**索引標籤，然後向下捲動至**網路設定**窗格，以選取套用的**安全群組**名稱。

     1. 前往傳入規則，然後選取**編輯傳入規則**。

     1. 選取**新增規則**。

     1. 在新規則的**類型**欄中，選取**自訂 TCP**。

     1. 在**連接埠範圍**欄中，輸入 `9098`。MSK Replicator 使用 IAM 存取控制來連線至使用連接埠 9098 的叢集。

     1. 在**來源**欄中，輸入您將為來源叢集建立複寫器時提供的安全群組名稱 （這可能與 MSK 來源叢集的安全群組相同），然後選取**儲存規則**。

      

**若要將傳出規則新增至為來源提供的複寫器安全群組：**

     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. 選擇目標叢集的子網路。

   主控台會顯示目標叢集區域中可用的子網路，以供您選取。選取至少兩個子網路。

1. 選擇 MSK Replicator 的安全群組 (MSK Replicator) 以存取您的目標叢集。

   系統將顯示目標叢集區域中可用的安全群組，以供您選取。所選的安全群組會與每個連線相關聯。如需使用安全群組的詳細資訊，請參閱《*Amazon VPC 使用者指南*》中的[AWS 使用安全群組控制資源的流量](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html)。
   + 對於跨區域複寫 (CRR) 和相同區域複寫 (SRR)，請前往 Amazon EC2 主控台，網址為 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)：//。此外，請確定目標叢集的安全群組具有傳入規則，可接受來自於為目標提供之複寫器安全群組的流量。

      

**若要將傳入規則新增至目標叢集的安全群組：**

     1. 在 AWS 主控台中，選取叢集**名稱**，前往目標叢集的詳細資訊。

     1. 選取**屬性**索引標籤，然後向下捲動至網路設定窗格，以選取套用**的安全群組**名稱。

     1. 前往傳入規則，然後選取**編輯傳入規則**。

     1. 選取**新增規則**。

     1. 在新規則的**類型**欄中，選取**自訂 TCP**。

     1. 在**連接埠範圍**欄中，輸入 `9098`。MSK Replicator 使用 IAM 存取控制來連線至使用連接埠 9098 的叢集。

     1. 在**來源**欄中，輸入您將為目標叢集建立複寫器時提供的安全群組名稱 （這可能與 MSK 目標叢集的安全群組相同），然後選取**儲存規則**。

      

**若要將傳出規則新增至為目標提供的複寫器安全群組：**

     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 個主題。如果您需要複寫更多主題，建議您建立個別的複寫器。如果您需要每個複寫器支援超過 750 個主題，請前往 AWS 主控台支援中心並[建立支援案例](https://console.aws.amazon.com/support/home#/)。您可以使用「TopicCount」指標來監控複寫的主題數量。請參閱 [Amazon MSK Standard 代理程式配額](limits.md#msk-provisioned-quota)。

1. 根據預設，MSK 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)回應 APIs中的 [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 會將「topic1」從來源叢集複寫到目標叢集中名為 的新主題`<sourceKafkaClusterAlias>.topic1`。
   + 相同的主題名稱複寫 (**在主控台中保留相同的主題名稱**)：來源叢集中的主題會在目標叢集中以相同的主題名稱複寫。

   此設定對應至`CreateReplicator`請求和`DescribeReplicator`回應 APIs中的 `TopicNameConfiguration` 欄位。請參閱 [Amazon MSK Replicator 的運作方式](msk-replicator-how-it-works.md)。
**注意**  
根據預設，MSK Replicator 會在目標叢集中建立新的主題，並將自動產生的字首新增至主題名稱。這是為了區分包含從來源叢集複寫之資料的主題，與目標叢集中的其他主題，並避免在叢集之間循環複寫資料。或者，您可以建立具有相同主題名稱複寫的 MSK Replicator （在主控台中**保留相同的主題名稱**)，以便在複寫期間保留主題名稱。此組態可減少您在設定期間重新設定用戶端應用程式的需求，並讓您更輕鬆地操作多叢集串流架構。

1. 依預設，MSK 複寫器會複製所有中繼資料，包括主題組態、存取控制清單 (ACL) 和取用者群組位移，以實現順暢的容錯移轉。如果您不是建立用於容錯移轉的複寫器，您可以選擇關閉在**其他設定**區段中的一或多個可用設定。
**注意**  
MSK 複寫器不會複寫寫入 ACL，因為您的生產者不應該直接寫入目標叢集中的複寫主題。容錯移轉後，您的生產者應該寫入目標叢集中的本機主題。如需詳細資訊，請參閱 [執行計劃容錯移轉至次要 AWS 區域](msk-replicator-perform-planned-failover.md)。

1. 在**取用者群組複寫**窗格中，指定您要使用允許和拒絕清單中的規則運算式複寫的取用者群組。依預設，會複寫所有取用者群組。

1. 在**壓縮**窗格中，您可以選擇壓縮寫入目標叢集的資料。如果要使用壓縮，建議您使用與來源叢集中的資料相同的壓縮方法。

1. 在**存取許可**窗格中，執行下列其中一項操作：

   1. 選取**使用必要政策建立或更新 IAM 角色**。MSK 主控台會自動將必要的許可和信任政策連接到讀取和寫入來源和目標 MSK 叢集所需的服務執行角色。  
![\[用以建立或更新複寫器 IAM 角色的 MSK 主控台\]](http://docs.aws.amazon.com/zh_tw/msk/latest/developerguide/images/msk-replicator-ezCRC.png)

   1. 選取**從 Amazon MSK 可擔任的 IAM 角色中選擇，以提供您自己的 IAM 角色**。建議您將 `AWSMSKReplicatorExecutionRole`受管 IAM 政策連接至您的服務執行角色，而不是撰寫您自己的 IAM 政策。

      1. 建立複寫器將用來讀取和寫入來源和目標 MSK 叢集的 IAM 角色，其中包含以下 JSON，作為信任政策的一部分，以及`AWSMSKReplicatorExecutionRole`連接到角色的 。在信任政策中，使用您的實際帳戶 ID 取代預留位置 <yourAccountID>。

------
#### [ 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 分鐘才能成功建立，並轉換為 RUNNING (執行中) 狀態。

如果您建立新的 MSK Replicator 來取代已刪除的複寫器，則新的複寫器會從最新的偏移開始複寫。

如果 MSK Replicator 已轉換為 FAILED (失敗) 狀態，請參閱疑難排解章節的[疑難排解 MSK Replicator](msk-replicator-troubleshooting.md)。

# 編輯 MSK Replicator 設定
<a name="msk-replicator-edit-settings"></a>

建立 MSK Replicator 後，您無法變更來源叢集、目標叢集、複寫器開始位置或主題名稱複寫組態。您需要建立新的複寫器，才能使用相同的主題名稱複寫組態。不過，您可以編輯其他複寫器設定，例如要複寫的主題和取用者群組。

1. 登入 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. 在左側導覽窗格中，選擇**複寫器**以顯示帳戶中的複寫器清單，然後選取您要編輯的 MSK 複寫器。

1. 選擇**屬性**索引標籤。

1. 在**複寫器設定**區段中，選擇**編輯複寫器**。

1. 您可以變更任何設定以編輯 MSK Replicator 設定。
   + 指定您要使用允許和拒絕清單中的規則運算式複寫的主題。依預設，MSK 複寫器會複製所有中繼資料，包括主題組態、存取控制清單 (ACL) 和取用者群組位移，以實現順暢的容錯移轉。如果您不是建立用於容錯移轉的複寫器，您可以選擇關閉在**其他設定**區段中的一或多個可用設定。
**注意**  
MSK 複寫器不會複寫寫入 ACL，因為您的生產者不應該直接寫入目標叢集中的複寫主題。容錯移轉後，您的生產者應該寫入目標叢集中的本機主題。如需詳細資訊，請參閱 [執行計劃容錯移轉至次要 AWS 區域](msk-replicator-perform-planned-failover.md)。
   + 針對**取用者群組複寫**，您可以指定要使用允許和拒絕清單中的規則運算式複寫的取用者群組。依預設，會複寫所有取用者群組。如果允許和拒絕清單為空白，則會關閉取用者群組複寫。
   + 在**目標壓縮類型**下，您可以選擇是否要壓縮寫入目標叢集的資料。如果要使用壓縮，建議您使用與來源叢集中的資料相同的壓縮方法。

1. 儲存您的變更。

   MSK Replicator 大約需要 30 分鐘才能成功建立，並轉換為執行中狀態。如果您的 MSK Replicator 已轉換為 FAILED (失敗) 狀態，請參閱疑難排解章節 [MSK Replicator 故障診斷](msk-replicator-troubleshooting.md)。

# 刪除 MSK Replicator
<a name="msk-replicator-delete"></a>

如果 MSK Replicator 無法建立 (FAILED 狀態)，那麼您可能需要刪除 MSK Replicator。建立 MSK Replicator 後，無法變更指派給 MSK Replicator 的來源和目標叢集。您可以刪除現有的 MSK Replicator，並建立新的 MSK Replicator。如果您建立新的 MSK Replicator 來取代刪除的複寫器，則新的複寫器會從最新的偏移開始複寫。

1. 在來源叢集所在的 AWS 區域中，登入 AWS 管理主控台，然後開啟位於 https：//[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/zh_tw/msk/latest/developerguide/msk-replicator-monitor.html)

# 使用複寫來提高跨區域的 Kafka 串流應用程式彈性
<a name="msk-replicator-increase-resiliency"></a>

您可以使用 MSK Replicator 來設定主動-主動或主動-被動叢集拓撲，以提高 Apache Kafka 應用程式跨 AWS 區域的彈性。在主動-主動式設定中，兩個 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>

主動-主動式叢集拓撲提供接近零的復原時間，而且可讓串流應用程式在多個 AWS 區域同時運作。當一個區域中的叢集受損時，連線到另一個區域中叢集的應用程式會繼續處理資料。

主動-被動式設定適用於一次只能在一個 AWS 區域中執行的應用程式，或當您需要對資料處理順序有更多的控制時。主動-被動式設定比主動-主動式設定需要更多的復原時間，因為您必須在次要區域啟動整個主動-被動式設定，包括您的生產者和取用者，才能在容錯移轉後恢復串流資料。

# 使用建議的主題命名組態建立主動-被動 Kafka 叢集設定
<a name="msk-replicators-active-passive-cluster-setup"></a>

對於主動-被動設定，我們建議您在兩個不同的 AWS 區域中操作類似的生產者、MSK 叢集和取用者設定 （使用相同的取用者群組名稱）。重要的是，兩個 MSK 叢集具有相同的讀取和寫入容量，以確保可靠的資料複寫。您需要建立 MSK Replicator，以持續從主要叢集將資料複製到待命叢集。您也需要設定生產者將資料寫入相同 AWS 區域中叢集上的主題。

對於主動-被動設定，請使用相同的主題名稱複寫 （在主控台中**保留相同的主題名稱**) 建立新的複寫器，以開始將資料從主要區域中的 MSK 叢集複寫到次要區域中的叢集。我們建議您在兩個區域中操作一組重複的生產者和消費者 AWS ，每個生產者和消費者都使用其引導字串連接到自己區域中的叢集。這可簡化容錯移轉程序，因為它不需要變更引導字串。為了確保消費者從他們離開的地方附近讀取，來源和目標叢集中的消費者應該具有相同的消費者群組 ID。

如果您為 MSK Replicator 使用相同的主題名稱複寫 （在主控台中**保留相同的主題名稱**)，則會使用與對應來源主題相同的名稱複寫您的主題。

建議您為目標叢集上的用戶端設定叢集層級設定和許可。您不需要設定主題層級設定和常值讀取 ACLs因為如果您已選取複製存取控制清單的選項，MSK Replicator 會自動將其複製。請參閱 [中繼資料複寫](msk-replicator-how-it-works.md#msk-replicator-metadata-replication)。

# 容錯移轉至次要 AWS 區域
<a name="msk-replicator-when-planned-failover"></a>

建議您 AWS 使用 Amazon CloudWatch 監控次要區域中的複寫延遲。在主要 AWS 區域中的服務事件期間，複寫延遲可能會突然增加。如果延遲持續增加，請使用 AWS 服務運作狀態儀表板來檢查主要 AWS 區域中的服務事件。如果有事件，您可以容錯移轉至次要 AWS 區域。

# 執行計劃容錯移轉至次要 AWS 區域
<a name="msk-replicator-perform-planned-failover"></a>

您可以執行計劃的容錯移轉，以針對主要 AWS 區域中具有來源 MSK 叢集的意外事件測試應用程式的彈性。計劃的容錯移轉不應導致資料遺失。

如果您使用的是相同的主題名稱複寫組態，請遵循下列步驟：

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>

當主要 AWS 區域中具有來源 MSK 叢集的服務事件，且您想要暫時將流量重新導向至具有目標 MSK 叢集的次要區域時，您可以執行意外容錯移轉。當 MSK Replicator 非同步複寫資料時，意外容錯移轉可能會導致部分資料遺失。您可以使用 中的指標來追蹤訊息延遲[監控複寫](msk-replicator-monitor.md)。

如果您使用的是相同的主題名稱複寫組態 (**在主控台中保留相同的主題名稱），**請依照下列步驟執行：

1. 嘗試關閉連線至主要區域中來源 MSK 叢集的所有生產者和取用者。由於該區域中的受損，此操作可能不會成功。

1. 啟動連線至次要 AWS 區域中目標 MSK 叢集的生產者和消費者，以完成容錯移轉。由於 MSK Replicator 也會複寫中繼資料，包括讀取 ACLs 和取用者群組位移，因此您的生產者和取用者將順暢地從在容錯移轉之前離開的地方繼續處理。

如果您使用的是`PREFIX`主題名稱組態，請依照下列步驟進行容錯移轉：

1. 嘗試關閉連線至主要區域中來源 MSK 叢集的所有生產者和取用者。由於該區域中的受損，此操作可能不會成功。

1. 啟動連線至次要 AWS 區域中目標 MSK 叢集的生產者和消費者，以完成容錯移轉。由於 MSK Replicator 也會複寫中繼資料，包括讀取 ACLs 和取用者群組位移，因此您的生產者和取用者將順暢地從在容錯移轉之前離開的地方繼續處理。

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 叢集，並將複寫器開始位置設定為*最早*。如果需要將要寫入次要區域的資料複寫回主要區域，以便在服務事件結束後容錯恢復至主要區域，就需要此操作。如果您未將複寫器開始位置設定為*最早*，則在主要區域中的服務事件期間產生到次要區域中叢集的任何資料都不會複製回主要區域中的叢集。

# 執行容錯移轉至主要 AWS 區域
<a name="msk-replicator-perform-failback"></a>

您可以在該 AWS 區域中的服務事件結束後，容錯移轉回主要區域。

如果您使用的是相同的主題名稱複寫組態，請遵循下列步驟：

1. 建立新的 MSK Replicator，您的次要叢集做為來源，而主要叢集做為目標，開始位置設定為*最早*和相同的主題名稱複寫 (**在主控台中保留相同的主題名稱**)。

   這將開始複製容錯移轉回主要區域後寫入次要叢集的所有資料的程序。

1. 在 `MessageLag` Amazon CloudWatch 中監控新複寫器上的指標，直到達到 `0`，這表示所有資料已從次要複寫到主要。

1. 複寫所有資料後，停止連線至次要叢集的所有生產者，並啟動連線至主要叢集的生產者。

1. 等待連線至次要叢集的消費者成為 `MaxOffsetLag` 指標`0`，以確保他們已處理所有資料。請參閱 [監控消費者延遲](consumer-lag.md)。

1. 處理所有資料後，停止次要區域的取用者，並啟動連線至主要叢集的取用者以完成容錯回復。

1. 刪除您在將資料從次要叢集複寫至主要叢集的第一個步驟中建立的複寫器。

1. 確認您現有的複寫器將資料從主要叢集複製到次要叢集，在 Amazon CloudWatch 中狀態為「RUNNING」和`ReplicatorThroughput`指標`0`。

   請注意，當您建立新的複寫器，其起始位置為*最早*容錯回復時，它會開始讀取次要叢集主題中的所有資料。根據您的資料保留設定，您的主題可能會有來自來源叢集的資料。雖然 MSK Replicator 會自動篩選這些訊息，但您仍需支付次要叢集中所有資料的資料處理和傳輸費用。您可以使用 追蹤複寫器處理的資料總數`ReplicatorBytesInPerSec`。請參閱 [MSK Replicator 指標](msk-replicator-monitor.md#msk-replicator-metrics)。

如果您使用的是字首主題名稱組態，請遵循下列步驟：

只有在從次要區域中的叢集複寫到主要區域中的叢集已趕上且 Amazon CloudWatch 中的 MessageLag 指標接近 0 之後，您才應該啟動容錯回復步驟。計劃的容錯恢復不會導致任何資料遺失。

1. 關閉連線至次要區域中 MSK 叢集的所有生產者和取用者。

1. 對於主動-被動式拓撲，刪除從次要區域中叢集將資料複寫到主要區域的複寫器。您不需要刪除主動-主動式拓撲的複寫器。

1. 啟動連線至主要區域中 MSK 叢集的生產者。

1. 根據應用程式的訊息順序要求而定，依照下列其中一個索引標籤中的步驟進行操作。

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

   如果您的應用程式不需要訊息排序，請在主要 AWS 區域中使用萬用字元運算子 （例如 `topic`) 從本機 （例如 ) 和複寫主題 （例如 `<sourceKafkaClusterAlias>.topic`) 讀取的消費者`.*topic`。本機主題 (例如：topic) 上的取用者將從容錯移轉之前取用者取用的最後一個偏移恢復。如果在容錯移轉之前有任何未處理的資料，則將會立即處理該資料。如果是計劃的容錯移轉，應該沒有此類記錄。

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

   1. 請僅針對主要區域 (例如 `<sourceKafkaClusterAlias>.topic`) 上的複寫主題，而非本機主題 (例如，`topic`) 啟動取用者。

   1. 等待主要區域中叢集上複寫主題的所有取用者完成處理所有資料，偏移延遲為 0，且處理的記錄數量也為 0。然後，停止在主要區域中叢集上複製主題的取用者。此時，容錯移轉後在次要區域中產生的所有記錄皆已在主要區域中取用。

   1. 啟動主要區域中叢集上本機主題 (例如 `topic`) 的取用者。

------

1. 確認從主要 叢集到次要 叢集的現有複寫器處於 RUNNING 狀態，並使用 `ReplicatorThroughput`和 延遲指標如預期般運作。

# 使用 MSK Replicator 建立主動-主動設定
<a name="msk-replicator-active-active"></a>

如果您想要建立主動-主動設定，其中兩個 MSK 叢集都在主動提供讀取和寫入，建議您使用具有字首主題名稱複寫的 MSK Replicator （在主控台中**將字首新增至主題名稱**)。不過，這需要您重新設定取用者以讀取複寫的主題。

依照下列步驟，在來源 MSK 叢集 A 與目標 MSK 叢集 B 之間設定主動-主動式拓樸。

1. 建立 MSK Replicator，將 MSK 叢集 A 作為來源，MSK 叢集 B 作為目標。

1. 成功建立上述 MSK Replicator 之後，請建立以叢集 B 作為來源，建立叢集 A 作為目標的複寫器。

1. 建立兩組生產者，兩組生產者可同時將資料寫入在與生產者相同區域中叢集的本機主題 (例如 "topic")。

1. 建立兩組取用者，每個取用者使用萬用字元訂閱 （例如「.\$1topic」) 從與取用者相同 AWS 區域中的 MSK 叢集讀取資料。這樣，您的取用者將自動從本機主題 (例如，`topic`) 中讀取在區域中本機產生的資料，以及從其他區域帶有字首 `<sourceKafkaClusterAlias>.topic` 的主題中複寫的資料。這兩組取用者應具有不同的取用者群組 ID，以便在 MSK Replicator 將取用者群組複製到另一個叢集時，不會覆寫取用者群組偏移。

如果您想要避免重新設定用戶端，而不是字首主題名稱複寫 (**在主控台中將字首新增至主題名稱**)，您可以使用相同的主題名稱複寫 （在主控台中**保留相同的主題名稱） **建立 MSK 複寫器，以建立主動-主動設定。不過，您將為每個複寫器支付額外的資料處理和資料傳輸費用。這是因為每個複寫器都需要處理一般資料量的兩倍，一次用於複寫，另一次用於防止無限迴圈。您可以使用 `ReplicatorBytesInPerSec` 指標追蹤每個複寫器處理的資料總量。請參閱 [監控複寫](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 at-least-once複寫，這可能會在極少數情況下導致重複的訊息。如果您的消費者符合此要求，請遵循下列步驟。

1. 建立複寫器，將資料從舊叢集複寫到新叢集，並將複寫器的開始位置設定為*最早*，並使用相同的主題名稱複寫 (**在主控台中保留相同的主題名稱**)。

1. 在新叢集上設定叢集層級設定和許可。您不需要設定主題層級設定和「常值」讀取 ACLs，因為 MSK Replicator 會自動複製它們。

1. 在 `MessageLag` Amazon CloudWatch 中監控指標，直到達到 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`（主控台中的**相同主題名稱複寫**)。

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 狀態從 CREATING (建立中) 變為 FAILED (失敗)
<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 顯示停滯在 CREATING 狀態
<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. 請注意，複寫器最多可能需要 30 秒才能偵測和建立目標叢集上的新主題或主題分割區。如果在目標叢集上建立主題之前對來源主題產生的任何訊息，如果複寫器的開始位置是最新的 （預設），則不會複寫。或者，如果您想要複寫目標叢集主題上的現有訊息，您可以從來源叢集主題分割區中最早的位移開始複寫。請參閱 [設定複寫器設定和許可](msk-replicator-create-console.md#msk-replicator-create-settings)。

## 目標叢集中的訊息位移與來源叢集不同
<a name="msk-replicator-troubleshooting-different-message-offsets"></a>

在複寫資料的過程中，MSK Replicator 會使用來自來源叢集的訊息，並將訊息產生到目標叢集。這可能會導致訊息在來源和目標叢集上有不同的位移。不過，如果您已在建立複寫器期間開啟取用者群組位移同步，則 MSK Replicator 會在複製中繼資料時自動翻譯位移，以便在容錯移轉至目標叢集之後，您的取用者可以從在來源叢集中離開的附近繼續處理。

## MSK Replicator 不會同步取用者群組位移，或取用者群組不存在於目標叢集上
<a name="msk-replicator-troubleshooting-not-syncing-consumer-groups"></a>

請依照下列步驟對中繼資料複寫問題進行疑難排解。

1. 確認您的資料複寫如預期般運作。如果沒有，請參閱 [MSK Replicator 未複製資料或僅複製部分資料](#msk-replicator-troubleshooting-not-replicating)。

1. 驗證您在建立複寫器時在允許清單中提供的規則表達式是否符合您要複寫的取用者群組名稱。此外，請確認消費者群組不會因為拒絕清單中的規則表達式而從複寫中排除。

1. 確認 MSK Replicator 已在目標叢集上建立主題。複寫器最多可能需要 30 秒才能偵測和建立目標叢集上的新主題或主題分割區。在目標叢集上建立主題之前對來源主題產生的任何訊息，如果複寫器的開始位置是*最新的* （預設），則不會複寫。如果您在來源叢集上的取用者群組只取用 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/zh_tw/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 中的複寫問題。此指標的非零值通常表示複寫失敗問題，可能由下列因素造成：
+ 訊息大小限制
+ 時間戳記範圍違規
+ 記錄批次大小問題

如果 ReplicatorFailure 指標報告非零值，請依照下列步驟對問題進行疑難排解。

**注意**  
如需此指標的詳細資訊，請參閱 [MSK Replicator 指標](msk-replicator-monitor.md#msk-replicator-metrics)。

1. 設定可連線至目標 MSK 叢集且具有 Apache Kafka CLI 工具設定的用戶端。如需設定用戶端和 Kafka CLI 工具的資訊，請參閱 [連線至 Amazon MSK 佈建叢集](client-access.md)。

1. 開啟 Amazon MSK 主控台，網址為 [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/)。

   然後，執行下列動作：

   1. 取得 MSK Replicator 和目標 MSK 叢集ARNs。

   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**  
**原因**  
當 MSK Replicator 因為個別訊息大小超過 10 MB 而無法複寫資料時，就會發生此失敗。根據預設，MSK Replicator 會複寫大小上限為 10 MB 的訊息。
以下是此失敗訊息類型的範例。  

```
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
```
**解決方案**  
減少主題中的個別訊息大小。如果您無法這麼做，請依照這些指示[請求提高限制](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
```
**解決方案**  
增加目標叢集或對應目標叢集主題的`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
```
**解決方案**  
更新目標叢集的`message.timestamp.before.max.ms`組態，以允許具有較舊時間戳記的訊息。如需執行此操作的詳細資訊，請參閱 https：//[message.timestamp.before.max.ms](https://kafka.apache.org/documentation/#topicconfigs_message.timestamp.before.max.ms)。

**記錄批次過大**  
**原因**  
發生此失敗是因為記錄批次大小超過目標叢集上為主題設定的區段大小。MSK Replicator 支援最大批次大小為 1 MB。
以下是此失敗訊息類型的範例。  

```
ReplicatorException: The request included message batch larger than the configured segment size on the server. Topic: test, Partition: 1
```
**解決方案**  
目標叢集的 segment.bytes 組態必須至少與複寫器的批次大小 (1 MB) 一樣大，才能繼續執行而不會發生錯誤。將目標叢集的 segment.bytes 更新為至少 1048576 (1 MB)。如需執行此操作的詳細資訊，請參閱 [segment.bytes](https://kafka.apache.org/documentation/#topicconfigs_segment.bytes)。

**注意**  
如果 ReplicatorFailure 指標在套用這些解決方案後繼續發出非零值，請重複疑難排解程序，直到指標發出零值。

# 使用 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 身分驗證與配額搭配使用的詳細資訊，請參閱 [Multi-tenancy Apache Kafka clusters in Amazon MSK with IAM access control and Kafka Quotas – Part 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)。