View a markdown version of this page

取用者群組位移同步 - Amazon Managed Streaming for Apache Kafka

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

取用者群組位移同步

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

偏移同步的運作方式

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

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

位移同步是三階段管道:

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

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

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

關鍵行為:

  • 位移平移是近似值,不精確。複寫器會每隔一段時間取樣位移映射,因此平移的位移可能略低於真正的同等位置。這是設計:它錯誤地位於at-least-once交付端,這表示消費者可能會在容錯移轉後重新讀取少量訊息。

  • 只有在目標上的取用者群組中沒有取用者主動取用時,才會將位移遞交至目標上的取用者群組。這可防止複寫器干擾已在目標叢集上執行的取用者。

  • 取用者群組必須符合要同步的已設定取用者群組篩選條件 (包含/排除模式)。

具有舊版位移同步的單向複寫

這是標準單向複寫器 (叢集 A → 叢集 B) 的預設模式。

  • 主題命名 — 舊版位移同步支援字首和相同的主題名稱複寫。

  • 方向 — 只有當生產者在來源上處於作用中狀態,且取用者在目標叢集上處於非作用中狀態時,取用者群組偏移才會同步到目標叢集。

  • 容錯移轉 — 消費者可以指向目標叢集,並從平移的位移位置繼續。

  • 無容錯回復支援 - 舊版位移同步不會將目標的位移轉譯回來源。如果您將取用者移至目標,但之後想要將取用者移回來源,則不會自動偏移平移傳回行程。如果需要容錯回復,請使用具有增強偏移同步的雙向設定。

具有增強偏移同步的雙向設定

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

關鍵特性:

  • 主題命名 — 增強型同步需要兩個複寫器上相同的主題名稱複寫。

  • 兩個複寫器,每個單向 — 每個複寫器都會複寫資料,並在一個方向同步位移。雙向行為來自一起運作的配對。

  • 從兩個複寫器讀取映射 - 轉換位移時,複寫器會一起運作,以判斷最準確的可用轉譯。

  • 容錯移轉和容錯回復 — 消費者可以從任一叢集移至另一個叢集,並從大約正確的位置繼續。

何時啟用雙向位移同步:

  • 使用轉返功能的遷移 — 從一個叢集遷移到另一個叢集時,如果出現問題,您希望能夠轉返到原始叢集。

  • 主動-主動架構 — 當兩個叢集都主動提供讀取和寫入服務時,您需要取用者能夠在叢集之間切換。

  • 災難復原 — 當您需要確保消費者可以在容錯移轉或容錯回復事件後,從任一叢集上的正確偏移繼續處理時。

監控位移同步

監控下列 Amazon CloudWatch 指標,以確認位移同步正常運作:

  • ConsumerGroupCount — 確認兩個複寫器上正在同步的預期取用者群組數量。

  • ConsumerGroupOffsetSyncFailure — 兩個複寫器上的 應為 0。如果此值大於 0,請檢查取用者群組是否處於作用中狀態、驗證讀取和描述許可,並確保目標叢集上存在主題。

  • OffsetLag (MSK Cluster)OffsetLag (Non-MSK Cluster) — 比較兩個叢集的分割區層級消費者延遲,以確認偏移已同步。

常見陷阱

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

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

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

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

  3. 位移同步具有固有延遲

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

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

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

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

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

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

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