本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
取用者群組位移同步
MSK Replicator 可以將取用者群組位移從來源叢集同步到目標叢集,讓取用者在不略過記錄的情況下切換叢集並繼續處理。本主題涵蓋偏移同步如何在單向 (舊版) 和雙向 (增強型) 組態中運作,並強調常見的陷阱。
偏移同步的運作方式
在複寫資料的過程中,MSK Replicator 會使用來自來源叢集的訊息,並將訊息產生到目標叢集。這可能會導致訊息在來源和目標叢集上有不同的位移。如果您在建立複寫器期間開啟取用者群組位移同步,MSK Replicator 會在複製中繼資料時自動翻譯位移,以便在容錯移轉到目標叢集之後,您的取用者可以從他們離開的地方附近繼續處理。
MSK Replicator 會針對來源叢集上的取用者最佳化,這些取用者會從較接近串流頂端的位置 (主題分割區的結尾) 讀取。如果您的取用者群組在來源叢集上延遲,相較於來源,您可能會看到目標上這些取用者群組的延遲較高,這表示取用者在容錯移轉後會重新處理更多重複的訊息。若要減少此延遲,來源叢集上的取用者需要追上進度,並從串流的頂端開始取用。隨著您的消費者追上進度,MSK Replicator 會自動減少延遲。
位移同步是三階段管道:
位移映射 — 當記錄從來源複寫到目標時,複寫器會記錄來源位移和對應目標位移之間的定期映射。由於來源和目標偏移差異 (不同的起點、壓縮等),因此這些映射至關重要。
位移轉譯 — 複寫器會定期讀取來源叢集上每個複寫取用者群組的遞交位移。然後,它會使用存放的位移映射,將這些來源位移轉譯為同等的目標位移。
位移遞交 — 轉譯的位移會遞交至目標叢集
__consumer_offsets的主題,因此當取用者連線到目標並聯結相同的群組時,會從大約正確的位置繼續。
關鍵行為:
位移平移是近似值,不精確。複寫器會每隔一段時間取樣位移映射,因此平移的位移可能略低於真正的同等位置。這是設計:它錯誤地位於at-least-once交付端,這表示消費者可能會在容錯移轉後重新讀取少量訊息。
只有在目標上的取用者群組中沒有取用者主動取用時,才會將位移遞交至目標上的取用者群組。這可防止複寫器干擾已在目標叢集上執行的取用者。
取用者群組必須符合要同步的已設定取用者群組篩選條件 (包含/排除模式)。
具有舊版位移同步的單向複寫
這是標準單向複寫器 (叢集 A → 叢集 B) 的預設模式。
主題命名 — 舊版位移同步支援字首和相同的主題名稱複寫。
方向 — 只有當生產者在來源上處於作用中狀態,且取用者在目標叢集上處於非作用中狀態時,取用者群組偏移才會同步到目標叢集。
容錯移轉 — 消費者可以指向目標叢集,並從平移的位移位置繼續。
無容錯回復支援 - 舊版位移同步不會將目標的位移轉譯回來源。如果您將取用者移至目標,但之後想要將取用者移回來源,則不會自動偏移平移傳回行程。如果需要容錯回復,請使用具有增強偏移同步的雙向設定。
具有增強偏移同步的雙向設定
雙向設定需要兩個複寫器以相反方向執行 (複寫器 A→B 和複寫器 B→A)。每個複寫器仍會執行單向資料複寫和位移同步 - 它會將資料從其來源複寫到其目標,並在相同方向同步取用者群組位移。透過增強型偏移同步,即使生產者和取用者在不同叢集上處於作用中狀態,每個複寫器也能繼續同步取用者群組。
關鍵特性:
主題命名 — 增強型同步需要兩個複寫器上相同的主題名稱複寫。
兩個複寫器,每個單向 — 每個複寫器都會複寫資料,並在一個方向同步位移。雙向行為來自一起運作的配對。
從兩個複寫器讀取映射 - 轉換位移時,複寫器會一起運作,以判斷最準確的可用轉譯。
容錯移轉和容錯回復 — 消費者可以從任一叢集移至另一個叢集,並從大約正確的位置繼續。
何時啟用雙向位移同步:
使用轉返功能的遷移 — 從一個叢集遷移到另一個叢集時,如果出現問題,您希望能夠轉返到原始叢集。
主動-主動架構 — 當兩個叢集都主動提供讀取和寫入服務時,您需要取用者能夠在叢集之間切換。
災難復原 — 當您需要確保消費者可以在容錯移轉或容錯回復事件後,從任一叢集上的正確偏移繼續處理時。
監控位移同步
監控下列 Amazon CloudWatch 指標,以確認位移同步正常運作:
ConsumerGroupCount— 確認兩個複寫器上正在同步的預期取用者群組數量。ConsumerGroupOffsetSyncFailure— 兩個複寫器上的 應為 0。如果此值大於 0,請檢查取用者群組是否處於作用中狀態、驗證讀取和描述許可,並確保目標叢集上存在主題。OffsetLag (MSK Cluster)和OffsetLag (Non-MSK Cluster)— 比較兩個叢集的分割區層級消費者延遲,以確認偏移已同步。
常見陷阱
-
消費者可能會在容錯移轉後重新讀取少量訊息
位移平移是近似值。平移位移是刻意保守的 - 可能略低於真正的同等位置。這表示消費者通常會在切換叢集後重新處理少量記錄。應用程式應設計為處理重複處理 (冪等性)。
-
位移不會同步到正在對目標消費的群組
如果取用者群組已在目標叢集上處於作用中狀態,複寫器將不會覆寫其位移。這是安全機制。不過,這表示如果消費者在複寫器有機會同步位移之前啟動目標,則這些消費者會從目標的預設位移重設政策 (通常是
latest或earliest) 開始,而不是從轉譯位置開始。 -
位移同步具有固有延遲
位移平移取決於兩個非同步程序:資料複寫和位移同步。當取用者遞交來源上的位移,以及平移的位移出現在目標上時,一律會有延遲。在容錯移轉期間,如果來源取用者最近處於作用中狀態,此延遲可能會導致取用者重新讀取比預期更多的訊息。
-
複寫篩選條件中必須包含取用者群組
只有符合所設定包含模式 (且不符合排除模式) 的取用者群組才會同步其位移。如果取用者群組的位移未出現在目標上,請確認它包含在取用者群組複寫組態中。
-
單向複寫器不支援容錯回復
使用舊版 (單向) 位移同步時,位移只會從來源轉譯到目標。如果您將取用者移至目標,之後需要將取用者移回來源,則需要手動判斷正確的位移或接受重新處理。如果需要容錯回復,請使用具有增強偏移同步的雙向設定。
-
主題刪除和重新建立可能會使位移映射失效
如果在任一叢集上刪除並重新建立主題,則偏移映射會變得過時,因為新主題從偏移 0 開始。透過舊版位移同步,這可能會導致不正確的位移平移。增強型位移同步可偵測主題重新建立,並自動重設映射。