Amazon MSK 複製器的工作原理 - Amazon Managed Streaming for Apache Kafka

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

Amazon MSK 複製器的工作原理

若要開始使用MSK複製器,您需要在目標叢集中建立新的複製器 AWS 地區。MSK複製器會自動複製主叢集中的所有資料 AWS 在目的地區域稱為目標區域中的叢集稱為 source 的區域。來源和目標叢集可以位於相同或不同 AWS 地區。如果目標叢集並未存在,您將需要建立目標叢集。

建立複製器時,MSK複製器會在目標叢集中部署所有必要的資源 AWS 要針對資料複寫延遲最佳化的區域。複寫延遲會因許多因素而有所不同,包括兩者之間的網路距離 AWS MSK叢集的區域、來源和目標叢集的輸送量容量,以及來源和目標叢集上的分割區數目。MSKReplicator 會自動調整基礎資源的規模,讓您可以隨需複製資料,而無需監控或擴充容量。

資料複製

根據預設,MSKReplicator 會以非同步方式將來源叢集主題磁碟分割中的最新偏移量中的所有資料複製到目標叢集。如果「偵測並複製新主題」設定已開啟,MSKReplicator 會自動偵測新主題或主題分割區,並將其複製到目標叢集。不過,複製器最多可能需要 30 秒的時間才能偵測並建立目標叢集上的新主題或主題磁碟分割。在目標叢集上建立主題之前,對來源主題產生的任何訊息都不會被複寫。或者,如果您想要將主題上的現有訊息複製到目標叢集,則可以在建立期間設定複製器,以從來源叢集主題磁碟分割中的最早偏移量開始複製。

MSK複製器不會儲存您的資料。資料會從來源叢集中消耗、在記憶體中緩衝,並寫入目標叢集。當資料成功寫入或重試後失敗時,緩衝區會自動清除。MSK複製器和叢集之間的所有通訊和資料一律會在傳輸過程中加密。所有MSK複製器API呼叫 (例如DescribeClusterV2CreateTopic、) DescribeTopicDynamicConfiguration 都會擷取於 AWS CloudTrail。您的MSK代理日誌也將反映相同。

MSK複寫器會在目標叢集中建立主題,複寫器係數為 3。如有需要,您可以直接在目標叢集上修改複寫因子。

元數據複製

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

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

作業 研究 APIs允許

Alter

主題

CreatePartitions

AlterConfigs

主題

AlterConfigs

建立

主題

CreateTopics, 中繼資料

Delete

主題

DeleteRecords, DeleteTopics

描述

主題

ListOffsets, 中繼資料, OffsetFetch, OffsetForLeaderEpoch

DescribeConfigs

主題

DescribeConfigs

讀取

主題

取, OffsetCommit, TxnOffsetCommit

寫入 (僅拒絕)

主題

生產, AddPartitionsToTxn

MSK複製器ACLs僅複製資源類LITERAL型「主題」的模式類型。PREFIXED模式類型ACLs和其他資源類型不會ACLs被複製。MSK複寫器也不會在目標叢集ACLs上刪除。如果您刪除來源叢集ACL上的,您也應該同時刪除目標叢集上的。有關卡夫卡ACLs資源,模式和操作的更多詳細信息,請參閱 https://kafka.apache.org/documentation/#security_authz_cli。

MSK複製器僅複製卡夫卡ACLs,其IAM訪問控制不使用。如果您的用戶端使用IAM存取控制來讀取/寫入MSK叢集,您需要在目標叢集上設定相關IAM原則,以及順暢的容錯移轉。對於「前置詞」和「相同」主題名稱複製組態也是如此。

作為用戶群組偏移同步的一部分,MSKReplicator 會針對來源叢集上的取用者進行最佳化,這些用戶從接近串流尖端 (主題分割區結尾) 讀取的位置。如果您的用戶群組落後於來源叢集上,與來源相比,您可能會看到目標上這些用戶群組的延遲較高。這意味著在容錯移轉到目標叢集之後,您的取用者將重新處理更多重複的訊息。為了減少此延遲,來源叢集上的消費者需要 catch 並從串流尖端開始使用 (主題磁碟分割的結尾)。隨著您的消費者 catch,MSK複製器將自動減少延遲。

MSK複寫器來源和目標叢集

主題名稱組態

MSK複製器具有兩種主題名稱組態模式:置詞 (預設) 或相同主題名稱複製。

前置詞主題名稱複製

根據預設,MSK複製器會在目標叢集中建立新主題,並在來源叢集主題名稱中加入自動產生的前置詞,例如<sourceKafkaClusterAlias>.topic。這是為了區分複製的主題與目標叢集中的其他主題,並避免叢集之間的資料循環複寫。

例如,MSK複製器會將名為「topic」主題的資料從來源叢集複寫到目標叢集中名為 < sourceKafkaCluster Alias>.topic 的新主題。您可以使用DescribeReplicatorAPI或主MSK控台上的 [複寫器詳細資料] 頁面,在 [sourceKafkaCluster別名] 欄位下,找到要新增至目標叢集主題名稱的前置詞。目標叢集中的前置詞是 < sourceKafkaCluster 別名 >。

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

當您想要將MSK複製器資料保留在目標叢集中的個別主題 (例如主動-主動式叢集設定) 時,應使用複製器來新增前置詞。

相同的主題名稱複製

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

相同的主題名稱複製 (在主控台中保留相同的主題名稱) 具有下列優點:

  • 可讓您在複寫程序期間保留相同的主題名稱,同時也可自動避免無限複寫迴圈的風險。

  • 讓設定和操作多叢集串流架構更簡單,因為您可以避免將用戶端重新設定為從複製的主題讀取。

  • 對於主動-被動叢集架構,相同主題名稱複寫功能也可簡化容錯移轉程序,讓應用程式無縫容錯移轉至待命叢集,而不需要變更任何主題名稱或用戶端重新設定。

  • 可用於更輕鬆地將來自多個MSK叢集的資料整合到單一叢集中,以進行資料彙總或集中分析。這需要您為每個來源叢集和相同的目標叢集建立個別的複製器。

  • 透過將資料複製到目標MSK叢集中名稱相同的主題,可簡化從一個叢集到另一個叢集的資料移轉。

Amazon MSK 複寫器使用 Kafka 標頭自動避免將資料複寫回其來源主題,從而消除複寫期間無限循環的風險。標頭是可以包含在每個卡夫卡消息的鍵,值和時間戳的鍵-值對。MSK複製器會將來源叢集和主題的識別碼嵌入到要複寫之每筆記錄的標頭中。MSK複製器會使用標頭資訊來避免無限複寫迴圈。您應該確認您的用戶端能夠如預期讀取複寫的資料。