

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

# 取用者群組位移同步
<a name="msk-replicator-bidirectional-offset-sync"></a>

MSK Replicator 可以將取用者群組位移從來源叢集同步到目標叢集，讓取用者在不略過記錄的情況下切換叢集並繼續處理。本主題涵蓋偏移同步如何在單向 （舊版） 和雙向 （增強型） 組態中運作，並強調常見的陷阱。

## 偏移同步的運作方式
<a name="msk-replicator-offset-sync-how-it-works"></a>

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

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

位移同步是三階段管道：

1. 位**移映射** — 當記錄從來源複寫到目標時，複寫器會記錄來源位移和對應目標位移之間的定期映射。由於來源和目標偏移差異 （不同的起點、壓縮等），因此這些映射至關重要。

1. **位移轉譯** — 複寫器會定期讀取來源叢集上每個複寫取用者群組的遞交位移。然後，它會使用存放的位移映射，將這些來源位移轉譯為同等的目標位移。

1. **位移遞交** — 轉譯的位移會遞交至目標叢集`__consumer_offsets`的主題，因此當取用者連線到目標並聯結相同的群組時，會從大約正確的位置繼續。

關鍵行為：
+ 位移平移是近似值，不精確。複寫器會每隔一段時間取樣位移映射，因此平移的位移可能略低於真正的同等位置。這是設計：它錯誤地位於at-least-once交付端，這表示消費者可能會在容錯移轉後重新讀取少量訊息。
+ 只有在目標上的取用者群組中沒有取用者主動取用時，才會將位移遞交至目標上的取用者群組。這可防止複寫器干擾已在目標叢集上執行的取用者。
+ 取用者群組必須符合要同步的已設定取用者群組篩選條件 （包含/排除模式）。

## 具有舊版位移同步的單向複寫
<a name="msk-replicator-offset-sync-legacy"></a>

這是標準單向複寫器 （叢集 A → 叢集 B) 的預設模式。
+ **主題命名 — **舊版位移同步支援字首和相同的主題名稱複寫。
+ **方向** — 只有當生產者在來源上處於作用中狀態，且取用者在目標叢集上處於非作用中狀態時，取用者群組偏移才會同步到目標叢集。
+ **容錯移轉** — 消費者可以指向目標叢集，並從平移的位移位置繼續。
+ **無容錯回復支援** - 舊版位移同步不會將目標的位移轉譯回來源。如果您將取用者移至目標，但之後想要將取用者移回來源，則不會自動偏移平移傳回行程。如果需要容錯回復，請使用具有增強偏移同步的雙向設定。

## 具有增強偏移同步的雙向設定
<a name="msk-replicator-offset-sync-enhanced"></a>

雙向設定需要兩個複寫器以相反方向執行 （複寫器 A→B 和複寫器 B→A)。每個複寫器仍會執行單向資料複寫和位移同步 - 它會將資料從其來源複寫到其目標，並在相同方向同步取用者群組位移。透過增強型偏移同步，即使生產者和取用者在不同叢集上處於作用中狀態，每個複寫器也能繼續同步取用者群組。

關鍵特性：
+ **主題命名** — 增強型同步需要兩個複寫器上相同的主題名稱複寫。
+ **兩個複寫器，每個單向** — 每個複寫器都會複寫資料，並在一個方向同步位移。雙向行為來自一起運作的配對。
+ **從兩個複寫器讀取映射** - 轉換位移時，複寫器會一起運作，以判斷最準確的可用轉譯。
+ **容錯移轉和容錯回復** — 消費者可以從任一叢集移至另一個叢集，並從大約正確的位置繼續。

何時啟用雙向位移同步：
+ **使用轉返功能的遷移** — 從一個叢集遷移到另一個叢集時，如果出現問題，您希望能夠轉返到原始叢集。
+ **主動-主動架構** — 當兩個叢集都主動提供讀取和寫入服務時，您需要取用者能夠在叢集之間切換。
+ **災難復原** — 當您需要確保消費者可以在容錯移轉或容錯回復事件後，從任一叢集上的正確偏移繼續處理時。

## 監控位移同步
<a name="msk-replicator-offset-sync-monitoring"></a>

監控下列 Amazon CloudWatch 指標，以確認位移同步正常運作：
+ `ConsumerGroupCount` — 確認兩個複寫器上正在同步的預期取用者群組數量。
+ `ConsumerGroupOffsetSyncFailure` — 兩個複寫器上的 應為 0。如果此值大於 0，請檢查取用者群組是否處於作用中狀態、驗證讀取和描述許可，並確保目標叢集上存在主題。
+ `OffsetLag (MSK Cluster)` 和 `OffsetLag (Non-MSK Cluster)` — 比較兩個叢集的分割區層級消費者延遲，以確認偏移已同步。

## 常見陷阱
<a name="msk-replicator-offset-sync-pitfalls"></a>

1. **消費者可能會在容錯移轉後重新讀取少量訊息**

   位移平移是近似值。平移位移是刻意保守的 - 可能略低於真正的同等位置。這表示消費者通常會在切換叢集後重新處理少量記錄。應用程式應設計為處理重複處理 （冪等性）。

1. **位移不會同步到正在對目標消費的群組**

   如果取用者群組已在目標叢集上處於作用中狀態，複寫器將不會覆寫其位移。這是安全機制。不過，這表示如果消費者在複寫器有機會同步位移之前啟動目標，則這些消費者會從目標的預設位移重設政策 （通常是 `latest`或 `earliest`) 開始，而不是從轉譯位置開始。

1. **位移同步具有固有延遲**

   位移平移取決於兩個非同步程序：資料複寫和位移同步。當取用者遞交來源上的位移，以及平移的位移出現在目標上時，一律會有延遲。在容錯移轉期間，如果來源取用者最近處於作用中狀態，此延遲可能會導致取用者重新讀取比預期更多的訊息。

1. **複寫篩選條件中必須包含取用者群組**

   只有符合所設定包含模式 （且不符合排除模式） 的取用者群組才會同步其位移。如果取用者群組的位移未出現在目標上，請確認它包含在取用者群組複寫組態中。

1. **單向複寫器不支援容錯回復**

   使用舊版 （單向） 位移同步時，位移只會從來源轉譯到目標。如果您將取用者移至目標，之後需要將取用者移回來源，則需要手動判斷正確的位移或接受重新處理。如果需要容錯回復，請使用具有增強偏移同步的雙向設定。

1. **主題刪除和重新建立可能會使位移映射失效**

   如果在任一叢集上刪除並重新建立主題，則偏移映射會變得過時，因為新主題從偏移 0 開始。透過舊版位移同步，這可能會導致不正確的位移平移。增強型位移同步可偵測主題重新建立，並自動重設映射。